Files
hotelsync/backend
HotelSync a4fc4a0972 feat: deposit — history page, card info, cancel button, webhook notice, online booking email
- Migration 060: card_last4, card_brand columns in booking_deposits
- Backend: webhook saves card brand/last4 from YooKassa notification
- Backend: GET /api/hotels/:slug/deposits — payment history with guest/room info
- Backend: DELETE /api/hotels/:slug/bookings/:bookingId/deposit — cancel hold_created or paid_cash deposit
- Backend: auto-create YooKassa hold + send deposit email for source='online' bookings
- Frontend: DepositHistoryPage with filters, card display, retention reasons
- Frontend: deposit cancel button for hold_created and paid_cash states
- Frontend: show card last4/brand in hold_confirmed status
- Frontend: release form presets (full return / hold all) + improved UX
- Frontend: webhook setup instructions in DepositSettingsPage
- Frontend: "История платежей" link in deposit settings header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 11:47:51 +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