Skip to content

About

Multi-tenant order platform: isolated client DBs, JWT/RBAC, React/TypeScript.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Order Tracking System

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Система отслеживания заказов с поддержкой множественных баз данных и проектов. Веб-приложение для управления заказами, проектами и базами данных с удобным интерфейсом и экспортом данных.

🚀 Основные возможности

  • Управление базами данных - создание и управление множественными базами данных
  • Управление проектами - организация проектов внутри баз данных
  • Отслеживание заказов - создание, редактирование и отслеживание статусов заказов
  • Экспорт в Excel - генерация отчетов в формате Excel
  • Управление счетами - функционал для работы со счетами
  • Админ-панель - управление пользователями и правами доступа
  • Система ролей - гибкая система прав доступа для пользователей
  • Аутентификация - безопасная система входа с JWT токенами

🛠 Технологический стек

Backend

  • Node.js с Express.js - серверная часть приложения
  • PostgreSQL - реляционная база данных
  • Drizzle ORM - современный ORM для работы с базой данных
  • JWT - аутентификация через JSON Web Tokens
  • Passport.js - middleware для аутентификации
  • bcryptjs - хеширование паролей

Frontend

  • React 18 - библиотека для построения пользовательского интерфейса
  • TypeScript - типизированный JavaScript
  • Vite - быстрый сборщик и dev-сервер
  • React Router - маршрутизация в приложении
  • TanStack Query - управление состоянием сервера
  • Tailwind CSS - utility-first CSS фреймворк
  • shadcn/ui - компоненты UI на основе Radix UI
  • React Hook Form - управление формами
  • Zod - валидация схем данных

Инструменты разработки

  • Docker Compose - контейнеризация и оркестрация
  • ESBuild - быстрая сборка для production
  • TypeScript - статическая типизация

📋 Требования

  • Node.js 18+
  • npm или yarn
  • PostgreSQL 15+ (или Docker для запуска через docker-compose)
  • Docker и Docker Compose (опционально, для упрощенного развертывания)

🔧 Установка

1. Клонирование репозитория

git clone <repository-url>
cd OrderTrackingSystem

2. Установка зависимостей

npm install

3. Настройка базы данных

Вариант A: Использование Docker Compose (рекомендуется)

  1. Запуск PostgreSQL контейнера:
docker-compose up -d

Это запустит PostgreSQL на порту 5433 с предустановленными настройками:

  • База данных: orderdb
  • Пользователь: orderuser
  • Пароль: orderpass
  • Порт: 5433
  1. Проверка работы базы данных:
# Проверка статуса контейнера
docker-compose ps

# Просмотр логов (если есть проблемы)
docker-compose logs db
  1. Ожидание готовности базы данных:

Подождите несколько секунд, пока PostgreSQL полностью запустится. Вы можете проверить готовность:

# Проверка подключения к базе данных
docker-compose exec db pg_isready -U orderuser -d orderdb

Вариант B: Использование существующей PostgreSQL

  1. Создание базы данных:

Подключитесь к PostgreSQL и создайте базу данных:

# Через psql
psql -U postgres
CREATE DATABASE orderdb;
CREATE USER orderuser WITH PASSWORD 'orderpass';
GRANT ALL PRIVILEGES ON DATABASE orderdb TO orderuser;
\q
  1. Настройка переменных окружения:

Создайте файл .env в корне проекта:

# База данных (для Drizzle)
DATABASE_URL=postgresql://orderuser:orderpass@localhost:5432/orderdb

# Или отдельные переменные (для прямого подключения)
PGHOST=localhost
PGPORT=5432
PGUSER=orderuser
PGPASSWORD=orderpass
PGDATABASE=orderdb

# JWT секрет для аутентификации
JWT_SECRET=your-secret-key-here-change-in-production

# Окружение
NODE_ENV=development

4. Применение схемы базы данных (первый запуск)

После настройки базы данных необходимо применить схему:

# Для Docker Compose (убедитесь, что DATABASE_URL установлен)
export DATABASE_URL=postgresql://orderuser:orderpass@localhost:5433/orderdb
npm run db:push

Или если используете .env файл:

npm run db:push

Важно: Команда db:push создаст все необходимые таблицы в базе данных:

  • databases - таблица баз данных
  • projects - таблица проектов
  • orders - таблица заказов
  • users - таблица пользователей
  • user_databases - связующая таблица

Проверка успешного создания таблиц:

# Для Docker Compose
docker-compose exec db psql -U orderuser -d orderdb -c "\dt"

# Для локальной PostgreSQL
psql -U orderuser -d orderdb -c "\dt"

Вы должны увидеть список созданных таблиц.

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

Режим разработки

npm run dev

Приложение будет доступно по адресу http://localhost:5000

При первом запуске:

  • Автоматически создастся первый администратор (см. раздел "Первый вход")
  • Если база данных пустая, все таблицы будут созданы автоматически

Production сборка

npm run build
npm start

🔍 Решение проблем при первом запуске БД

Проблема: "Connection terminated unexpectedly"

Причина: База данных еще не готова или неправильные настройки подключения.

Решение:

  1. Убедитесь, что PostgreSQL запущен:
    docker-compose ps
  2. Проверьте переменные окружения (особенно DATABASE_URL)
  3. Подождите 10-15 секунд после запуска Docker контейнера

Проблема: "database does not exist"

Причина: База данных не была создана.

Решение:

# Для Docker Compose - база создается автоматически
# Для локальной PostgreSQL:
psql -U postgres -c "CREATE DATABASE orderdb;"

Проблема: "password authentication failed"

Причина: Неправильные учетные данные.

Решение:

  • Проверьте переменные окружения в .env
  • Для Docker Compose используйте значения из docker-compose.yml
  • Убедитесь, что DATABASE_URL соответствует настройкам

Проблема: "relation does not exist"

Причина: Схема базы данных не была применена.

Решение:

# Примените схему
npm run db:push

# Проверьте, что таблицы созданы
docker-compose exec db psql -U orderuser -d orderdb -c "\dt"

Проблема: Порт 5433 уже занят

Причина: Другой сервис использует порт 5433.

Решение:

  1. Измените порт в docker-compose.yml:
    ports:
      - "5434:5432"  # Используйте другой порт
  2. Обновите DATABASE_URL в .env:
    DATABASE_URL=postgresql://orderuser:orderpass@localhost:5434/orderdb

👤 Первый вход

При первом запуске автоматически создается администратор:

  • Логин: ArgusM
  • Пароль: Ar29gus207

⚠️ Важно: После первого входа рекомендуется изменить пароль администратора через админ-панель.

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

OrderTrackingSystem/
├── client/                 # Frontend приложение
│   ├── src/
│   │   ├── components/    # React компоненты
│   │   ├── pages/         # Страницы приложения
│   │   ├── hooks/         # React хуки
│   │   └── lib/           # Утилиты и конфигурация
│   └── index.html
├── server/                 # Backend приложение
│   ├── index.ts           # Точка входа сервера
│   ├── routes.ts          # API маршруты
│   ├── storage_new.ts     # Слой работы с данными
│   └── db.ts              # Конфигурация базы данных
├── shared/                 # Общий код
│   └── schema.ts          # Схемы базы данных и валидация
├── docker-compose.yml     # Конфигурация Docker
├── package.json           # Зависимости проекта
└── README.md             # Документация

🔐 Система прав доступа

Приложение поддерживает следующие права доступа:

  • isAdmin - полный административный доступ
  • canAddOrders - возможность создавать заказы
  • canDeleteOrders - возможность удалять заказы
  • canManageDatabases - управление базами данных
  • canManageProjects - управление проектами

Права настраиваются администратором в админ-панели.

📊 API Endpoints

Аутентификация

  • POST /api/login - вход в систему
  • POST /api/logout - выход из системы

Заказы

  • GET /api/orders - получение списка заказов
  • POST /api/orders - создание нового заказа
  • PUT /api/orders/:id - обновление заказа
  • DELETE /api/orders/:id - удаление заказа

Проекты

  • GET /api/projects - получение списка проектов
  • POST /api/projects - создание проекта
  • PUT /api/projects/:id - обновление проекта
  • DELETE /api/projects/:id - удаление проекта

Базы данных

  • GET /api/databases - получение списка баз данных
  • POST /api/databases - создание базы данных
  • PUT /api/databases/:id - обновление базы данных
  • DELETE /api/databases/:id - удаление базы данных

Пользователи (только для администраторов)

  • GET /api/users - получение списка пользователей
  • POST /api/users - создание пользователя
  • PUT /api/users/:id - обновление пользователя
  • DELETE /api/users/:id - удаление пользователя

Экспорт

  • GET /api/export/excel - экспорт данных в Excel

🧪 Разработка

Проверка типов

npm run check

Структура базы данных

Схема базы данных определена в shared/schema.ts и включает следующие таблицы:

  • databases - базы данных
  • projects - проекты
  • orders - заказы
  • users - пользователи
  • user_databases - связь пользователей с базами данных

🐳 Docker

Запуск с Docker Compose

# Запуск базы данных
docker-compose up -d

# Остановка
docker-compose down

# Остановка с удалением данных
docker-compose down -v

🔒 Безопасность

  • Пароли хранятся в виде bcrypt хешей
  • JWT токены для аутентификации
  • Валидация данных через Zod схемы
  • Защита API endpoints через middleware
  • SQL injection защита через Drizzle ORM

About

Multi-tenant order platform: isolated client DBs, JWT/RBAC, React/TypeScript.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages