Files
hotelsync/backend
HotelSync 96961046ed fix: room number + photos in task cards; time tracking for tasks
- Backend POST housekeeping: include photos in INSERT, return task with room JOIN
- Backend PATCH housekeeping: set started_at on in_progress, return task with room JOIN
- WS broadcasts now include room_number/assignee_name from JOIN
- Frontend: normalizeTask() helper maps snake_case WS fields to camelCase
- TechnicalPage: fix room number display (roomNumber || room_number)
- TechnicalPage: show time spent (started_at → completed_at) on task cards
- HousekeepingPage: history tab now includes maintenance reports (no category filter)
- HousekeepingPage: HistoryCard shows photos, notes, time spent, maintenance styling
- Migration 028: started_at TIMESTAMPTZ column on housekeeping_tasks
- types: add startedAt? to HousekeepingTask

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 11:24:49 +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