105 lines
3.5 KiB
SQL
105 lines
3.5 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)
|
|
);
|
|
|
|
-- Team scores table - track total and flag points over time
|
|
CREATE TABLE IF NOT EXISTS team_scores (
|
|
id SERIAL PRIMARY KEY,
|
|
team_id INTEGER NOT NULL,
|
|
team_name VARCHAR(255) NOT NULL,
|
|
total_score FLOAT DEFAULT 0,
|
|
flag_points FLOAT DEFAULT 0,
|
|
round INTEGER NOT NULL,
|
|
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 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_team_scores_round ON team_scores(round);
|
|
CREATE INDEX IF NOT EXISTS idx_team_scores_team_id ON team_scores(team_id);
|
|
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);
|