Files
ad-infr-control/init-db.sql
ilyastar9999 07b338e823 asd
2025-12-03 13:46:00 +03:00

92 lines
3.0 KiB
SQL

-- Database initialization script for A/D Infrastructure Control
-- Services table for controller
CREATE TABLE IF NOT EXISTS services (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
path VARCHAR(512) NOT NULL,
git_url VARCHAR(512),
status VARCHAR(50) DEFAULT 'stopped',
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Service logs table
CREATE TABLE IF NOT EXISTS service_logs (
id SERIAL PRIMARY KEY,
service_id INTEGER REFERENCES services(id) ON DELETE CASCADE,
action VARCHAR(100) NOT NULL,
status VARCHAR(50) NOT NULL,
message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Scoreboard state table - current flags count for each team+service
CREATE TABLE IF NOT EXISTS scoreboard_state (
id SERIAL PRIMARY KEY,
team_id INTEGER NOT NULL,
service_name VARCHAR(255) NOT NULL,
stolen_flags INTEGER DEFAULT 0,
lost_flags INTEGER DEFAULT 0,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(team_id, service_name)
);
-- Attacks tracking table for scoreboard injector
CREATE TABLE IF NOT EXISTS attacks (
id SERIAL PRIMARY KEY,
attack_id VARCHAR(255) UNIQUE,
attacker_team_id INTEGER,
victim_team_id INTEGER,
service_name VARCHAR(255),
flag VARCHAR(255),
timestamp TIMESTAMP NOT NULL,
points FLOAT,
is_our_attack BOOLEAN DEFAULT FALSE,
is_attack_to_us BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Attack alerts table
CREATE TABLE IF NOT EXISTS attack_alerts (
id SERIAL PRIMARY KEY,
attack_id INTEGER REFERENCES attacks(id) ON DELETE CASCADE,
alert_type VARCHAR(100) NOT NULL,
severity VARCHAR(50) NOT NULL,
message TEXT,
notified BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Telegram messages log
CREATE TABLE IF NOT EXISTS telegram_messages (
id SERIAL PRIMARY KEY,
chat_id BIGINT NOT NULL,
message TEXT NOT NULL,
sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN DEFAULT TRUE,
error_message TEXT
);
-- System settings
CREATE TABLE IF NOT EXISTS settings (
key VARCHAR(255) PRIMARY KEY,
value TEXT NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert default settings
INSERT INTO settings (key, value) VALUES
('our_team_id', '0'),
('alert_threshold_points', '100'),
('alert_threshold_time', '300')
ON CONFLICT (key) DO NOTHING;
-- Create indexes for performance
CREATE INDEX IF NOT EXISTS idx_scoreboard_state_team_service ON scoreboard_state(team_id, service_name);
CREATE INDEX IF NOT EXISTS idx_attacks_timestamp ON attacks(timestamp);
CREATE INDEX IF NOT EXISTS idx_attacks_our_attack ON attacks(is_our_attack);
CREATE INDEX IF NOT EXISTS idx_attacks_attack_to_us ON attacks(is_attack_to_us);
CREATE INDEX IF NOT EXISTS idx_service_logs_service_id ON service_logs(service_id);
CREATE INDEX IF NOT EXISTS idx_attack_alerts_notified ON attack_alerts(notified);