Skip to content

selimdev00/antares

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Журнал работ на строительном объекте

Веб-приложение для ведения журнала производства работ на стройплощадке. Позволяет фиксировать записи о выполненных работах (дата, вид работ из справочника, объём, единица измерения, исполнитель), просматривать их списком с сортировкой и фильтрацией по дате, добавлять, редактировать и удалять записи.

Проект состоит из трёх сервисов, объединённых через docker-compose: PostgreSQL, REST-бэкенд на NestJS и SPA-фронтенд на React, который отдаётся через nginx.

Стек и почему

Backend: NestJS + Prisma + PostgreSQL

  • NestJS даёт модульную структуру (modules / controllers / services), встроенный DI и ValidationPipe с class-validator. Серверная валидация входных данных (обязательные поля, volume > 0, корректная ISO-дата, существование workTypeId) описывается декларативно через DTO, а не россыпью ручных проверок.
  • Prisma обеспечивает типобезопасный доступ к данным: схема в schema.prisma - единственный источник правды, из неё генерируется типизированный клиент. prisma db push поднимает схему, отдельный seed-скрипт наполняет справочник видов работ при первом старте.
  • PostgreSQL - надёжная реляционная СУБД, естественная для связанных сущностей (запись журнала ссылается на вид работ через внешний ключ).
  • Связка даёт end-to-end type-safety на стороне сервера: от схемы БД до DTO контроллера.

Frontend: React + TypeScript + Vite + TanStack Query + Tailwind

  • React + TypeScript - типизированный UI, контракт API описан теми же типами, что использует бэкенд.
  • Vite - быстрый dev-сервер и сборка, минимальная конфигурация (хороший DX).
  • TanStack Query управляет серверным состоянием: кэширование, инвалидация после мутаций (создание / редактирование / удаление), статусы загрузки и ошибок из коробки. Не нужно вручную держать данные в локальном состоянии и синхронизировать их.
  • Tailwind CSS - быстрая верстка утилитарными классами без отдельных CSS-файлов.

Инфраструктура: docker-compose

Один файл поднимает всю систему: база с healthcheck, бэкенд (стартует только после готовности БД, сам делает prisma db push + seed), фронтенд за nginx с проксированием /api на бэкенд. Запуск в одну команду, окружение воспроизводимо.

Запуск

Основной способ - через Docker. Нужен установленный Docker с Docker Compose.

cp .env.example .env
docker compose up --build

После сборки открыть http://localhost:8080.

Миграция схемы (prisma db push) и наполнение справочника видов работ (seed) выполняются автоматически при старте бэкенда - дополнительных шагов не требуется.

Локальная разработка (без Docker)

Понадобятся Node.js 22 и запущенный PostgreSQL.

  1. Поднять PostgreSQL (проще всего тем же образом через Docker):

    docker run --name journal-db -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=journal -p 5432:5432 -d postgres:16-alpine
  2. Backend (порт 3000):

    cd backend
    npm install
    export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/journal?schema=public"
    npx prisma db push
    npm run seed
    npm run start:dev
  3. Frontend (порт 5173):

    cd frontend
    npm install
    npm run dev

Открыть http://localhost:5173. Dev-сервер фронтенда обращается к бэкенду на http://localhost:3000/api (CORS на бэкенде разрешён для http://localhost:5173 и http://localhost:8080).

API

Базовый префикс - /api.

Метод Путь Описание
GET /api/work-types Список видов работ (справочник)
GET /api/entries Список записей журнала. Query: sort=asc|desc (по workDate, по умолчанию desc), from=YYYY-MM-DD, to=YYYY-MM-DD (фильтр по дате, включительно, оба опциональны)
POST /api/entries Создать запись. Body: { workDate, workTypeId, volume, unit, executor }. Ответ 201
PATCH /api/entries/:id Изменить запись (частично, те же поля). Ответ 200
DELETE /api/entries/:id Удалить запись. Ответ 204

Валидация на сервере (ошибка 400): workDate - обязательна, корректная ISO-дата; workTypeId - обязателен, должен существовать в справочнике; volume - обязателен, число > 0; unit - обязателен, непустой; executor - обязателен, непустая строка после trim.

Реализовано

  • Список записей журнала с сортировкой по дате (asc/desc)
  • Фильтрация списка по диапазону дат (from / to, включительно)
  • Добавление записи с серверной валидацией всех полей
  • Удаление записи
  • Справочник видов работ (отдельная сущность, seed при первом старте)
  • Редактирование записи (опционально, реализовано)
  • Запуск всей системы одной командой через docker-compose

About

Журнал производства работ - construction works log. NestJS + Prisma + PostgreSQL API, React + TypeScript SPA, docker-compose.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors