Files
hotelsync/backend
HotelSync c83a9ca714 feat: task problem/solution split + maintenance icons on rooms/calendar
- TechnicalPage: redesign task cards with separate "Задача" and "Решение" sections
  - "Задача": problem description + problem photos (editable before done)
  - "Решение": technician resolution comment + resolution photos (green section)
  - Resolution comment in CompletionModal now saves to resolution_notes field
  - Resolution photos save to resolution_photos (no longer mixed with problem photos)
- RoomModal history tab: maintenance entries show separate problem/resolution sections
- Backend: add resolution_notes, resolution_photos to PATCH allowed fields
- Migration 029: resolution_notes TEXT + resolution_photos TEXT[] columns
- RoomsPage: load active maintenance tasks, show 🔧 неисправность badge on room cards
- CalendarPage: load active maintenance tasks, show 🔧 неиспр. label in calendar row
- BookingCalendar: activeMaintenance prop, WS handler updates maintenance set on task changes
- CalendarPage WS: handle housekeeping_task_created to update activeMaintenance set

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 11:45:24 +03:00
..

HotelSync — Backend API

Fastify + TypeScript + PostgreSQL + Redis

Stack

  • Runtime: Node.js 20
  • Framework: Fastify 4
  • Database: PostgreSQL 16
  • Cache / Sessions: Redis 7
  • Auth: JWT (access 1h) + opaque refresh token (30d, stored in Redis)
  • Language: TypeScript (strict mode off for unused vars)

API Base URL

https://api.hotelsync.ru

Auth

POST /api/auth/login       { email, password } → { token, refreshToken, user }
POST /api/auth/refresh     { refreshToken }    → { token }
POST /api/auth/logout
GET  /api/auth/me

All protected routes require Authorization: Bearer <token>.

Routes

GET  /api/hotels                         (super_admin)
POST /api/hotels                         (super_admin)

GET  /api/hotels/:slug/rooms
POST /api/hotels/:slug/rooms
PATCH /api/hotels/:slug/rooms/:id
DELETE /api/hotels/:slug/rooms/:id

GET  /api/hotels/:slug/bookings
POST /api/hotels/:slug/bookings
PATCH /api/hotels/:slug/bookings/:id

GET  /api/hotels/:slug/guests
POST /api/hotels/:slug/guests
PATCH /api/hotels/:slug/guests/:id

GET  /api/hotels/:slug/housekeeping
POST /api/hotels/:slug/housekeeping
PATCH /api/hotels/:slug/housekeeping/:id

GET  /api/hotels/:slug/users
POST /api/hotels/:slug/users
PATCH /api/hotels/:slug/users/:id

GET  /api/hotels/:slug/channels
PATCH /api/hotels/:slug/channels/:id

GET  /api/hotels/:slug/tariffs
POST /api/hotels/:slug/tariffs
PATCH /api/hotels/:slug/tariffs/:id

GET  /api/hotels/:slug/discounts
POST /api/hotels/:slug/discounts
PATCH /api/hotels/:slug/discounts/:id

GET  /api/hotels/:slug/reviews
POST /api/hotels/:slug/reviews
PATCH /api/hotels/:slug/reviews/:id

GET  /api/hotels/:slug/maintenance
POST /api/hotels/:slug/maintenance
PATCH /api/hotels/:slug/maintenance/:id

GET  /api/hotels/:slug/pos/categories
GET  /api/hotels/:slug/pos/items
GET  /api/hotels/:slug/pos/orders
POST /api/hotels/:slug/pos/orders

# CP Admin panel (super_admin only)
GET  /api/admin/hotels
POST /api/admin/hotels
PATCH /api/admin/hotels/:id
GET  /api/admin/users
POST /api/admin/users
PATCH /api/admin/users/:id

Database Migrations

Migrations run automatically on container startup (in order).

File Description
migrations/001_schema.sql Base schema: hotels, rooms, bookings, users, channels, housekeeping
migrations/002_extend.sql Extended schema: guests, tariffs, discounts, loyalty, reviews, maintenance, POS, document templates, hotel settings

Key tables

Table Description
hotels Hotels with plan, contact info, check-in/out times
rooms Rooms with beds JSONB, extra_place JSONB, child_policy JSONB
room_categories Room categories per hotel
guests Guest database with loyalty points/tiers
bookings Bookings with guest_id, payment_status, meal_plan
tariffs Pricing tariffs (percent / fixed / multiplier)
discounts Discounts and promo codes
loyalty_rules Point accrual rules (stay, review, birthday...)
loyalty_tiers Tier thresholds (standard/silver/gold/platinum)
reviews Guest reviews from all sources
maintenance_tasks Maintenance tasks per room
pos_categories POS item categories
pos_items POS menu items with price and VAT
pos_orders POS orders with JSONB items
document_templates HTML templates for registration cards, invoices
hotel_settings Key-value JSONB settings per hotel

Demo accounts (seeded automatically)

Email Password Role
admin@hotelsync.io demo super_admin
manager@grand-palace.ru demo hotel_manager
cleaner@grand-palace.ru demo housekeeper

Running locally

cd backend
npm install
npm run dev

Requires .env:

DATABASE_URL=postgres://hotelsync:password@localhost:5432/hotelsync
REDIS_URL=redis://localhost:6379
JWT_SECRET=your-secret

Docker

docker build -t hotelsync-api .
docker run -p 3000:3000 --env-file .env hotelsync-api