Files
hotelsync/backend/README.md
HotelSync 17dbf629a2 Add docs, robots.txt and fix migration syntax
- backend/README.md: full API and DB documentation
- public/robots.txt: block all pages except root for SEO
- index.html: add noindex meta tag for inner SPA pages
- 002_extend.sql: fix RENAME COLUMN syntax (remove unsupported IF EXISTS)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 13:33:27 +03:00

4.0 KiB

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