Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

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

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

Стек и почему

Слой Технологии
Frontend React 18 + TypeScript + Vite
Backend Node.js + TypeScript + Fastify
Валидация zod (fastify-type-provider-zod)
ORM Prisma
БД PostgreSQL 16
Инфраструктура Docker Compose + nginx

Возможности

Обязательное:

  • Список записей журнала (дата выполнения, вид работ, объём + ед. изм., ФИО).
  • Сортировка по дате (клик по заголовку «Дата» или выпадающий список) и фильтр по диапазону дат.
  • Добавление записи с валидацией обязательных полей (на клиенте и на сервере).
  • Удаление записи.

Дополнительное (реализовано):

  • Редактирование существующей записи.
  • Справочник видов работ — отдельная таблица в БД с сидингом; вид работ выбирается из выпадающего списка, единица измерения подставляется автоматически.

Быстрый старт (Docker)

Нужен установленный Docker. Из корня проекта:

docker-compose up --build

Затем открыть http://localhost:8080

При старте бэкенд автоматически применяет миграции и наполняет справочник видов работ. Данные PostgreSQL сохраняются в Docker-томе pgdata между перезапусками.

Примечание про команду. В зависимости от версии Docker используйте либо docker-compose up --build (отдельный бинарь), либо docker compose up --build (плагин). Остановить и удалить контейнеры с данными: docker-compose down -v.

Локальный запуск без Docker

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

  1. Поднять PostgreSQL (пример через Docker):
    docker run -d --name worklog-db -p 5432:5432 \
      -e POSTGRES_USER=worklog -e POSTGRES_PASSWORD=worklog -e POSTGRES_DB=worklog \
      postgres:16-alpine
  2. Настроить переменные окружения бэкенда:
    cp .env.example backend/.env
  3. Бэкенд (в каталоге backend/):
    cd backend
    npm install
    npx prisma migrate dev
    npx prisma db seed
    npm run dev
  4. Фронтенд (в каталоге frontend/, во втором терминале):
    cd frontend
    npm install
    npm run dev
    Dev-сервер Vite проксирует /api на http://localhost:3000, поэтому открывать нужно адрес фронта: http://localhost:5173

API

Базовый путь — /api.

Метод Путь Описание
GET /api/health Проверка живости сервиса.
GET /api/work-types Справочник видов работ (для выпадающего списка).
GET /api/work-logs?from=&to=&sort=asc|desc Список записей с фильтром по диапазону дат и сортировкой по дате (по умолчанию desc).
POST /api/work-logs Создать запись. Тело: performedAt (YYYY-MM-DD), workTypeId (number), volume (>0), unit, executor.
PATCH /api/work-logs/:id Изменить запись (те же поля).
DELETE /api/work-logs/:id Удалить запись.

Невалидное тело запроса возвращает 400 с описанием ошибок, обращение к несуществующей записи — 404.

Структура проекта

.
├── docker-compose.yml        # db + backend + frontend
├── .env.example              # переменные для локального запуска без Docker
├── backend/
│   ├── Dockerfile
│   ├── prisma/
│   │   ├── schema.prisma     # модели WorkType и WorkLog
│   │   ├── migrations/       # начальная миграция
│   │   └── seed.ts           # наполнение справочника видов работ
│   └── src/
│       ├── index.ts          # запуск Fastify, плагины, обработка ошибок
│       ├── prisma.ts         # экземпляр PrismaClient
│       ├── schemas.ts        # zod-схемы валидации
│       └── routes/           # work-logs (CRUD) и work-types
└── frontend/
    ├── Dockerfile            # сборка Vite + nginx
    ├── nginx.conf            # раздача статики и прокси /api
    └── src/
        ├── App.tsx           # экран журнала: загрузка, фильтры, режимы add/edit
        ├── api.ts            # обёртка над fetch (базовый путь /api)
        ├── types.ts
        └── components/       # WorkLogForm, WorkLogTable, Filters

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages