Files
telegram-bot-workers/migrations/003_add_server_tables.sql
kappa 6563ee0650 feat: add server ordering system with session-based flow
- Add server recommendation integration (SERVER_RECOMMEND worker)
- Implement KV-based session management for multi-step ordering
- Add Linode/Vultr API clients for server provisioning
- Add server-tool for Function Calling support

refactor: major code reorganization (Phase 1-3)

- Remove 443 lines of deprecated callback handlers
- Extract handlers to separate files (message-handler, callback-handler)
- Extract cloud-spec-service, server-recommend-service
- Centralize constants (OS_IMAGES, REGION_FLAGS, NUM_EMOJIS)
- webhook.ts reduced from 1,951 to 30 lines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 21:01:38 +09:00

53 lines
2.1 KiB
SQL

-- Migration 003: Add server management tables
-- Purpose: Cloud server order tracking
-- Date: 2026-01-23
-- Reference: CLAUDE.md "Server Management System"
--
-- Background:
-- Telegram 봇을 통해 클라우드 서버 주문 내역을 기록하고 관리합니다.
-- 예치금 시스템과 통합하여 자동 결제를 지원합니다.
-- 서버 사양(cloud_providers, instance_specs)은 별도 외부 시스템에서 관리합니다.
-- Step 1: Create server_orders table (order lifecycle tracking)
CREATE TABLE IF NOT EXISTS server_orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
spec_id INTEGER NOT NULL,
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'provisioning', 'active', 'failed', 'cancelled', 'terminated')),
region TEXT NOT NULL,
provider_instance_id TEXT,
ip_address TEXT,
root_password TEXT,
price_paid INTEGER NOT NULL,
error_message TEXT,
provisioned_at DATETIME,
terminated_at DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Step 2: Create user_servers table (ownership mapping)
CREATE TABLE IF NOT EXISTS user_servers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
order_id INTEGER UNIQUE NOT NULL,
provider_id INTEGER NOT NULL,
label TEXT,
verified INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (order_id) REFERENCES server_orders(id)
);
-- Step 3: Create indexes for efficient queries
CREATE INDEX IF NOT EXISTS idx_server_orders_user ON server_orders(user_id);
CREATE INDEX IF NOT EXISTS idx_server_orders_status ON server_orders(status, created_at DESC);
CREATE INDEX IF NOT EXISTS idx_user_servers_user ON user_servers(user_id);
CREATE INDEX IF NOT EXISTS idx_user_servers_provider ON user_servers(provider_id);
-- Verification Queries (주석으로 제공)
-- SELECT * FROM server_orders WHERE user_id = 1 ORDER BY created_at DESC;
-- SELECT * FROM user_servers WHERE user_id = 1;