feat: TTLock settings redesign — correct TTHotel DLL architecture

- Settings page rebuilt with 3-step flow:
  Step 1: client_id / client_secret (from TTHotel → Settings → Integrations)
  Step 2: workstation + COM port + card sectors
  Step 3: room → lock MAC address mapping (from lock.ttlock.com)
- Agent command ttlock:write_card now uses lockMac, comPort, cardSectors
  instead of cloud-only lockId approach
- New agent command ttlock:ping_encoder for encoder connectivity check
- Migration 049_ttlock_v2.sql: lock_mac TEXT replaces lock_id BIGINT,
  card_sectors + com_port added, ttlock_username/password removed
- API types updated: TTLockConfig, RoomLockMapping, CardIssuance

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-31 16:29:30 +03:00
parent be92d026e8
commit 249492cf3a
4 changed files with 391 additions and 456 deletions

View File

@@ -0,0 +1,21 @@
-- TTLock v2: исправляем схему под реальную архитектуру TTHotel DLL
-- lock_id BIGINT → lock_mac TEXT (MAC замка из lock.ttlock.com)
-- добавляем card_sectors и com_port
-- Убираем старый lock_id, добавляем MAC-адрес замка
ALTER TABLE room_lock_mappings
DROP COLUMN IF EXISTS lock_id,
ADD COLUMN IF NOT EXISTS lock_mac TEXT NOT NULL DEFAULT '';
-- В логе выдачи карт: lock_id → lock_mac
ALTER TABLE card_issuances
DROP COLUMN IF EXISTS lock_id,
ADD COLUMN IF NOT EXISTS lock_mac TEXT NOT NULL DEFAULT '';
-- Убираем ttlock_username/password — не нужны (auth через client_id/secret напрямую).
-- Добавляем card_sectors (из TTHotel) и com_port (COM-порт энкодера)
ALTER TABLE hotel_ttlock_config
DROP COLUMN IF EXISTS ttlock_username,
DROP COLUMN IF EXISTS ttlock_password,
ADD COLUMN IF NOT EXISTS card_sectors TEXT NOT NULL DEFAULT '1,2,3,4,5,6,7,8,9,10',
ADD COLUMN IF NOT EXISTS com_port TEXT NOT NULL DEFAULT '';