хз
This commit is contained in:
161
PROJECT_INFO.md
Normal file
161
PROJECT_INFO.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# Hotel 777 - Система бронирования отеля
|
||||
|
||||
## Общее описание
|
||||
Hotel 777 — это веб-приложение для бронирования номеров в гостинице, расположенной на берегу моря в Абхазии (п. Мгудзырхуа, набережная ул. 1). Проект представляет собой полнофункциональную систему управления бронированиями с публичной частью для клиентов и административной панелью.
|
||||
|
||||
## Технологический стек
|
||||
- **Backend**: Node.js + Express 5.x
|
||||
- **База данных**: SQLite3
|
||||
- **Аутентификация**: JWT (jsonwebtoken) + bcryptjs
|
||||
- **Обработка изображений**: Sharp (конвертация в WebP)
|
||||
- **Загрузка файлов**: Multer
|
||||
- **Frontend**: Bootstrap 5, Font Awesome, кастомные шрифты (Inter, Playfair Display)
|
||||
- **Контейнеризация**: Docker + Docker Compose
|
||||
|
||||
## Структура проекта
|
||||
```
|
||||
hotell777_260507/
|
||||
├── server.js # Основной файл сервера (784 строки)
|
||||
├── package.json # Зависимости проекта
|
||||
├── Dockerfile # Сборка Docker образа
|
||||
├── docker-compose.yml # Оркестрация контейнера
|
||||
├── .env # Переменные окружения
|
||||
├── .gitignore
|
||||
├── data/
|
||||
│ └── bookings.db # База данных SQLite
|
||||
├── public/
|
||||
│ ├── index.html # Публичная страница (613 строк)
|
||||
│ ├── admin.html # Админ-панель (949 строк)
|
||||
│ ├── css/ # Стили (Bootstrap, шрифты, кастомные стили)
|
||||
│ ├── js/
|
||||
│ │ ├── main.js # Логика публичной части
|
||||
│ │ └── bootstrap.bundle.min.js
|
||||
│ ├── img/ # Изображения отеля и номеров
|
||||
│ │ └── rooms/ # Фотографии номеров
|
||||
│ └── webfonts/ # Шрифты Font Awesome
|
||||
└── node_modules/
|
||||
```
|
||||
|
||||
## База данных
|
||||
### Таблицы:
|
||||
1. **bookings** — бронирования
|
||||
- Поля: id, name, phone, adults, children, checkin_date, checkout_date, wishes, status, room_type, comment, base_price, discount_percent, discount_amount, total_price, promocode_id, created_at
|
||||
- Статусы: 'новая', 'оплачена', 'зарезервирована', 'заселена', 'выехала', 'отменена'
|
||||
|
||||
2. **rooms** — номера отеля
|
||||
- Типы: 'Эконом' (2500₽/чел), 'Стандарт' (4000₽/чел), 'VIP Люкс' (8000₽/чел)
|
||||
- Поля: type, name, description, rooms_count, single_beds, double_beds, has_sofa, has_ac, has_wifi, has_shower, max_guests, price_per_guest, image_path, is_active
|
||||
|
||||
3. **promocodes** — промокоды
|
||||
- Поля: code, discount_percent (1-99%), valid_from, valid_to, valid_days, is_active
|
||||
|
||||
4. **booking_history** — история изменений бронирований
|
||||
- Отслеживает изменения полей: status, room_type, comment, discount_percent
|
||||
|
||||
5. **users** — пользователи системы
|
||||
- Роли: 'admin', 'user'
|
||||
- Автоматическая синхронизация суперадмина из .env
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Публичные:
|
||||
- `GET /api/rooms` — список доступных номеров
|
||||
- `POST /api/bookings` — создание бронирования
|
||||
- `POST /api/promocodes/validate` — проверка промокода и расчет скидки
|
||||
- `GET /api/bookings` — получение всех бронирований (требуется API_KEY в заголовке X-API-Key)
|
||||
|
||||
### Административные (требуется JWT):
|
||||
- `POST /api/admin/login` — вход в систему
|
||||
- `GET /api/admin/bookings` — список всех бронирований
|
||||
- `GET /api/admin/bookings/:id/history` — история изменений бронирования
|
||||
- `PATCH /api/admin/bookings/:id` — изменение статуса бронирования
|
||||
- `PATCH /api/admin/bookings/:id/room` — изменение типа номера
|
||||
- `PATCH /api/admin/bookings/:id/comment` — добавление комментария
|
||||
- `PATCH /api/admin/bookings/:id/discount` — изменение скидки
|
||||
- `GET /api/admin/rooms` — управление номерами
|
||||
- `POST /api/admin/rooms` — создание номера
|
||||
- `PUT /api/admin/rooms/:id` — обновление номера
|
||||
- `DELETE /api/admin/rooms/:id` — удаление номера
|
||||
- `GET /api/admin/promocodes` — управление промокодами
|
||||
- `POST /api/admin/promocodes` — создание промокода
|
||||
- `PUT /api/admin/promocodes/:id` — обновление промокода
|
||||
- `DELETE /api/admin/promocodes/:id` — удаление промокода
|
||||
|
||||
## Основные функции
|
||||
1. **Публичная часть**:
|
||||
- Просмотр номеров и цен
|
||||
- Бронирование номера с указанием дат, количества гостей
|
||||
- Применение промокодов
|
||||
- Галерея изображений
|
||||
- Информация о гостинице, развлечениях, отзывах
|
||||
|
||||
2. **Админ-панель**:
|
||||
- Просмотр всех бронирований
|
||||
- Изменение статусов бронирований
|
||||
- Управление номерами (создание, редактирование, удаление)
|
||||
- Управление промокодами
|
||||
- История изменений по каждому бронированию
|
||||
- Статистика и фильтрация
|
||||
|
||||
3. **Дополнительно**:
|
||||
- Автоматическая конвертация изображений в WebP
|
||||
- Автоматическое создание номеров по умолчанию
|
||||
- Проверка доступности промокодов по датам
|
||||
- Расчет стоимости с учетом скидок
|
||||
|
||||
## Переменные окружения (.env)
|
||||
```
|
||||
PORT=3000
|
||||
HOTEL777KEY=<секретный_ключ_API>
|
||||
ADMIN_LOGIN=<логин_администратора>
|
||||
ADMIN_PASSWORD=<пароль_администратора>
|
||||
JWT_SECRET=<секрет_JWT>
|
||||
hotelName="Hotel 777"
|
||||
hotelAddress="Абхазия, золотой берег"
|
||||
hotelPhone="+79400000000"
|
||||
```
|
||||
|
||||
## Docker развертывание
|
||||
- Образ: `kalugin66/hotell777_260507`
|
||||
- Порт: 3000 (проброшен через внешний прокси)
|
||||
- Сеть: applications (внешняя сеть Docker)
|
||||
- Тома: `/docker/hotell777_260507/data:/app/data`
|
||||
- Healthcheck: проверка доступности через wget
|
||||
|
||||
## Запуск проекта
|
||||
```bash
|
||||
# Установка зависимостей
|
||||
npm install
|
||||
|
||||
# Запуск в production режиме
|
||||
npm start
|
||||
|
||||
# Запуск в development режиме (с nodemon)
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## Docker команды
|
||||
```bash
|
||||
# Сборка и запуск
|
||||
docker compose up -d --build
|
||||
|
||||
# Пересборка без кэша
|
||||
docker compose build --no-cache && docker compose up -d
|
||||
|
||||
# Создание внешней сети (если не существует)
|
||||
docker network create applications
|
||||
```
|
||||
|
||||
## Git репозиторий
|
||||
- URL: https://git.dadehard.ru/kalugin66/hotell777_260507.git
|
||||
- Ветка по умолчанию: main
|
||||
|
||||
## Автор
|
||||
- GitHub: kalugin66
|
||||
|
||||
## Особенности реализации
|
||||
- Все цены указаны в рублях за человека за ночь
|
||||
- Количество ночей рассчитывается как разница между датами заезда и выезда
|
||||
- История изменений сохраняется автоматически при любом изменении бронирования
|
||||
- Суперадмин автоматически создается/обновляется из переменных окружения при запуске
|
||||
- Изображения номеров загружаются через форму админ-панели и конвертируются в WebP
|
||||
BIN
public/img/rooms/placeholder.webp
Normal file
BIN
public/img/rooms/placeholder.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 278 B |
BIN
public/img/rooms/room-1778180456091-106322718.webp
Normal file
BIN
public/img/rooms/room-1778180456091-106322718.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 200 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 197 KiB |
Reference in New Issue
Block a user