create compose with database

This commit is contained in:
Ivanov Matvey 2025-03-14 03:44:10 +10:00
parent 262bba35da
commit feda68d5f8
5 changed files with 137 additions and 0 deletions

View File

@ -0,0 +1,4 @@
# data_engineer_fasrpost
# Запуск
```docker compose up -d```

26
compose.yaml Normal file
View File

@ -0,0 +1,26 @@
name: data_engineer-farpost
services:
database:
container_name: farpost-database
restart: always
image: postgres:latest
volumes:
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql:ro
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: pg_isready -d log
interval: 60s
start_period: 1s
timeout: 600s
ports:
- 5432:5432
environment:
POSTGRES_DB: log
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
postgres-data:
name: farpost-postgres-data

75
dump.sql Normal file
View File

@ -0,0 +1,75 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 17.3 (Debian 17.3-3.pgdg120+1)
-- Dumped by pg_dump version 17.3 (Debian 17.3-3.pgdg120+1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET transaction_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
--
-- Name: user_actions; Type: TYPE; Schema: public; Owner: postgres
--
CREATE TYPE public.user_actions AS ENUM (
'first_entry',
'registration',
'login',
'logout',
'create_theme',
'entry_theme',
'delete_theme',
'write_message'
);
ALTER TYPE public.user_actions OWNER TO postgres;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: log; Type: TABLE; Schema: public; Owner: postgres
--
CREATE TABLE public.log (
id integer NOT NULL,
user_id integer NOT NULL,
action public.user_actions NOT NULL,
datetime timestamp with time zone DEFAULT (now() AT TIME ZONE 'EAST'::text) NOT NULL,
object_id integer,
response smallint NOT NULL
);
ALTER TABLE public.log OWNER TO postgres;
--
-- Data for Name: log; Type: TABLE DATA; Schema: public; Owner: postgres
--
--
-- Name: log log_pk; Type: CONSTRAINT; Schema: public; Owner: postgres
--
ALTER TABLE ONLY public.log
ADD CONSTRAINT log_pk PRIMARY KEY (id);
--
-- PostgreSQL database dump complete
--

32
tasks/1.md Normal file
View File

@ -0,0 +1,32 @@
1. Спроектировать схему БД
я здесь вижу 2 варианта развития
1) сделать одну таблицу в которой будет:
- id пользователя
- время выполненного дйствия
- enum из различный действия (бэку не нужно лишний раз искать id действия, чтобы закрепить его в таблице логов)
- (отдельная таблица для действий будет лишней)
- (бэку необходимо знать и контролировать все действия, а таблица будет лишь означать изменение данных извне, которое будет либо бесполезной, либо опасной, когда бэк не найдёт нужное действие)
2) разбить на несколько таблиц:
- таблица логов аккаунта
- таблица работы с темой
- таблица работы с сообщениями
- 1 вариант -
1) ускоренная разработка из-за отсутсвия необходимости задумываться над подтягиванием данных из других таблиц (join, lazy_loading, selectin)
2) простота работы с данными: SQL запросы намного проще, более удобный перенос в csv
- 2 вариант -
1) БД более подготовлена к изменению или усложенению архитектуры
2) повышение эффективности за счёт меньшего количества столбцов
в ТЗ не было речи про дальнейшую судьбу этой БД, так что я пойду на 1 вариант
```
CREATE TABLE public.log (
id integer NOT NULL,
user_id integer NOT NULL,
action public.user_actions NOT NULL,
datetime timestamp with time zone DEFAULT (now() AT TIME ZONE 'EAST'::text) NOT NULL,
object_id integer,
response smallint NOT NULL
);
```

0
tasks/2.md Normal file
View File