# 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-пакеты: ```bash npm install ``` ### Шаг 2. Настройка базы данных Убедитесь, что у вас запущен локальный или удаленный PostgreSQL. Откройте файл `server/.env` и пропишите актуальные реквизиты доступа к вашей СУБД: ```env # Формат: postgresql://[USER]:[PASSWORD]@[HOST]:[PORT]/[DATABASE] DATABASE_URL=postgresql://postgres:password@localhost:5432/harats_booking ``` ### Шаг 3. Инициализация базы данных Если вы запускаете проект впервые на чистой базе, вам нужно создать таблицы и заполнить их тестовыми данными. Для этого выполните скрипт инициализации: ```bash npm run db:init ``` > **Что делает эта команда?** > - Применяет структуру таблиц Prisma к вашей базе данных (`npm run db:migrate`). > - Заполняет БД категориями, меню (40+ позиций), планом столов, актуальными бизнес-ланчами и демо-пользователями (`npm run db:seed`). ### Шаг 4. Запуск серверов разработчика Для одновременного запуска Backend-сервера и Frontend-приложения используйте всего одну команду в корне: ```bash 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 для прямого управления записями БД в браузере.