Skip to content

Repository files navigation

Construct — Система учёта строительных нарядов

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


Стек технологий

Frontend

Технология Версия
React ^19.2
TypeScript ~6.0
Vite ^8.0
React Router ^7.15
Tailwind CSS ^4.3
date-fns ^4.3
react-datepicker ^9.1

Backend

Технология Версия
Ruby 4.0.5
Ruby on Rails ~> 8.1 (API-only)
Puma 8.0
PostgreSQL 18 (через pg gem)
Active Record ORM, миграции, валидации

Инфраструктура

  • Docker + docker-compose (Rails, PostgreSQL, nginx)
  • nginx — раздача статики (собранный frontend)

Модели данных

Site (Объект строительства)

Поле Тип
id bigint (PK)
address text, NOT NULL, unique

Связи: has_many :assignments

JobTitle (Должность)

Поле Тип
id bigint (PK)
name text, NOT NULL, unique

Связи: has_many :performers

Operation (Вид работы)

Поле Тип
id bigint (PK)
name text, NOT NULL, unique

Performer (Исполнитель)

Поле Тип
id bigint (PK)
first_name text, NOT NULL
last_name text, NOT NULL
patronymic text, NOT NULL
job_title_id bigint (FK -> job_titles)

Связи: belongs_to :job_title, has_many :assignments

Assignment (Наряд)

Поле Тип
id bigint (PK)
site_id bigint (FK -> sites)
operation_id bigint (FK -> operations)
performer_id bigint (FK -> performers)
value text, NOT NULL
performed_at date, NOT NULL

ER-схема

erDiagram
    sites ||--o{ assignments : ""
    job_titles ||--o{ performers : ""
    performers ||--o{ assignments : ""
    operations ||--o{ assignments : ""

    sites {
        bigint id PK
        text address "NOT NULL, UNIQUE"
    }

    job_titles {
        bigint id PK
        text name "NOT NULL, UNIQUE"
    }

    operations {
        bigint id PK
        text name "NOT NULL, UNIQUE"
    }

    performers {
        bigint id PK
        text first_name "NOT NULL"
        text last_name "NOT NULL"
        text patronymic "NOT NULL"
        bigint job_title_id FK
    }

    assignments {
        bigint id PK
        bigint site_id FK
        bigint operation_id FK
        bigint performer_id FK
        text value "NOT NULL"
        date performed_at "NOT NULL"
    }
Loading

API Endpoints

Все ресурсы поддерживают index, create, update, destroy:

  • GET|POST /sites
  • PATCH|DELETE /sites/:id
  • GET|POST /operations
  • PATCH|DELETE /operations/:id
  • GET|POST /job_titles
  • PATCH|DELETE /job_titles/:id
  • GET|POST /performers
  • PATCH|DELETE /performers/:id
  • GET|POST /assignments (с поддержкой sortBy, sortOrder, filterBy, filterValue)
  • PATCH|DELETE /assignments/:id
  • GET /up — health check

Запуск приложения

Через Docker (рекомендуемый способ)

docker-compose up --build

Поднимаются три сервиса:

  1. postgres — БД PostgreSQL
  2. rails — Rails API (автоматически устанавливает npm-пакеты, собирает frontend, применяет миграции и сиды, запускает Puma на порту 3000)
  3. nginx — раздача статики на порту 80

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

construct/
├── api/                          # Rails API (backend)
│   ├── app/
│   │   ├── controllers/          # REST-контроллеры (6 ресурсов)
│   │   └── models/               # ActiveRecord-модели (Site, JobTitle, Operation, Performer, Assignment)
│   ├── config/                   # Конфигурация Rails, CORS, локали (ru/en)
│   ├── db/
│   │   ├── migrate/              # Миграции БД
│   │   └── seeds.rb              # Начальные данные
│   ├── test/                     # Model/controller/integration тесты
│   ├── Gemfile
│   └── Dockerfile
├── src/                          # React + TypeScript (frontend)
│   ├── clients/api.ts            # HTTP-клиент к Rails API
│   ├── components/
│   │   ├── pages/                # Страницы: Assignments, JobTitles, Operations, Performers, Sites
│   │   ├── ListTable.tsx         # Универсальная таблица с CRUD, сортировкой, фильтрацией
│   │   ├── Header.tsx / Nav.tsx  # Шапка и навигация
│   │   └── Button.tsx / Title.tsx / InfoBlock.tsx
│   ├── interfaces/               # TypeScript-интерфейсы (Assignment, Site, Operation, ...)
│   ├── utils/performerName.ts    # Форматирование ФИО исполнителя
│   ├── constants.ts              # URL и конфигурация
│   └── main.tsx                  # Точка входа
├── data/                         # Данные и монтирование PostgreSQL (18)
├── docker-compose.yml            # Оркестрация: postgres + rails + nginx
├── Dockerfile                    # Сборка frontend + Puma
├── nginx.conf                    # Раздача статики
└── vite.config.ts                # Сборка Vite

Frontend Routes

Path Компонент Описание
/ Assignments Журнал нарядов
/job-titles JobTitles Должности
/operations Operations Виды работ
/performers Performers Исполнители
/sites Sites Объекты строительства

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages