modified: client/package.json modified: client/src/components/Footer.tsx new file: client/src/components/LocalizedDateInput.tsx new file: client/src/components/LocalizedTimeInput.tsx modified: client/src/index.css new file: client/src/types/html2pdf.d.ts new file: client/src/utils/dateTimeFormat.ts new file: client/src/utils/receiptPdf.ts modified: server/prisma/seed.ts
Harat's Pub Booking System
Полностековое веб-приложение для бронирования столов и оформления предзаказов в сети ирландских пабов Harat's.
🛠 Технологический стек
- Архитектура: Monorepo (npm workspaces)
- Frontend (Client): React 19, TypeScript, Vite, Zustand, TanStack Query, React-Konva (для интерактивной карты заведения)
- Backend (Server): Node.js, Express, TypeScript, Zod (валидация)
- База данных: PostgreSQL 16
- ORM: Prisma
- Авторизация: JWT (Access + Refresh tokens), хэширование bcrypt
🚀 Инструкция по локальному запуску
Для развертывания проекта на локальной машине с операционной системой (например, под управлением Ubuntu или Windows) потребуется установленный Node.js (v18+) и сервер PostgreSQL.
Шаг 1. Установка зависимостей
Откройте терминал в корневой директории проекта и установите все npm-пакеты:
npm install
Шаг 2. Настройка базы данных
Убедитесь, что у вас запущен локальный или удаленный PostgreSQL.
Откройте файл server/.env и пропишите актуальные реквизиты доступа к вашей СУБД:
# Формат: postgresql://[USER]:[PASSWORD]@[HOST]:[PORT]/[DATABASE]
DATABASE_URL=postgresql://postgres:password@localhost:5432/harats_booking
Шаг 3. Инициализация базы данных
Если вы запускаете проект впервые на чистой базе, вам нужно создать таблицы и заполнить их тестовыми данными. Для этого выполните скрипт инициализации:
npm run db:init
Что делает эта команда?
- Применяет структуру таблиц Prisma к вашей базе данных (
npm run db:migrate).- Заполняет БД категориями, меню (40+ позиций), планом столов, актуальными бизнес-ланчами и демо-пользователями (
npm run db:seed).
Шаг 4. Запуск серверов разработчика
Для одновременного запуска Backend-сервера и Frontend-приложения используйте всего одну команду в корне:
npm run dev
Доступ:
- Клиентское приложение: http://localhost:5173
- API Сервер: http://localhost:3001
🔑 Тестовые аккаунты
База предзаполняется двумя типами пользователей для тестирования.
Пароль для обоих аккаунтов одинаковый: admin123 и user123 (соответственно роли).
| Роль | Телефон | Пароль | Доступ |
|---|---|---|---|
| Администратор | +79001234567 |
admin123 |
Права просмотра и редактирования в панели /admin |
| Пользователь | +79009876543 |
user123 |
Тестовый аккаунт гостя для проверки бронирования |
🏗 Дополнительные команды
Все скрипты выполняются из корневой директории проекта:
npm run build— Собрать проект для Production (сначала собирается пакетshared, затемclientиserver).npm run dev:client— Запустить только React-приложение фронтенда.npm run dev:server— Запустить только Express-сервер бэкенда.npm run db:reset— Полностью сбросить и удалить старую базу данных, пересоздав её заново.npm run db:studio(из папкиserver) — Открыть веб-интерфейс Prisma для прямого управления записями БД в браузере.