feat: workstations API + agent WebSocket — паркинг агентов и управление оборудованием
- migration 041: таблицы workstations, agent_pair_codes, workstation_devices - routes/workstations: CRUD рабочих мест, генерация 6-значного кода, CRUD устройств - POST /api/agent/pair: сопряжение агента по коду → JWT токен - agent-ws.ts: WebSocket /ws/agent для постоянного соединения агентов, heartbeat 30s, онлайн/оффлайн статус в БД Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
33
backend/migrations/041_workstations.sql
Normal file
33
backend/migrations/041_workstations.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
-- Рабочие места (агенты Windows)
|
||||
CREATE TABLE IF NOT EXISTS workstations (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
|
||||
agent_id VARCHAR(64) UNIQUE, -- UUID генерируемый агентом
|
||||
name VARCHAR(100) NOT NULL, -- «Ресепшн 1», «Бар»
|
||||
hostname VARCHAR(255), -- имя Windows-компьютера
|
||||
ip_address INET,
|
||||
is_online BOOLEAN NOT NULL DEFAULT false,
|
||||
last_seen TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Коды сопряжения (6 цифр, TTL 10 минут)
|
||||
CREATE TABLE IF NOT EXISTS agent_pair_codes (
|
||||
code CHAR(6) PRIMARY KEY,
|
||||
workstation_id UUID NOT NULL REFERENCES workstations(id) ON DELETE CASCADE,
|
||||
expires_at TIMESTAMPTZ NOT NULL,
|
||||
used BOOLEAN NOT NULL DEFAULT false
|
||||
);
|
||||
|
||||
-- Устройства привязанные к рабочему месту
|
||||
CREATE TABLE IF NOT EXISTS workstation_devices (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
workstation_id UUID NOT NULL REFERENCES workstations(id) ON DELETE CASCADE,
|
||||
type VARCHAR(20) NOT NULL CHECK (type IN ('kkt', 'printer')),
|
||||
name VARCHAR(100) NOT NULL,
|
||||
connection VARCHAR(20) NOT NULL CHECK (connection IN ('usb', 'network')),
|
||||
network_host VARCHAR(255),
|
||||
network_port INTEGER,
|
||||
purpose VARCHAR(30) CHECK (purpose IN ('fiscal', 'kitchen', 'bar', 'receipt', 'other')),
|
||||
config JSONB NOT NULL DEFAULT '{}'
|
||||
);
|
||||
Reference in New Issue
Block a user