This commit is contained in:
2025-11-08 17:14:40 +08:00
parent 20c1e9f733
commit 0d93cfd874
4 changed files with 24 additions and 15 deletions

View File

@@ -12,10 +12,12 @@ CREATE INDEX idx_users_username ON users(username);
CREATE TABLE IF NOT EXISTS invite_codes ( CREATE TABLE IF NOT EXISTS invite_codes (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(32) UNIQUE NOT NULL, code VARCHAR(32) UNIQUE NOT NULL,
created_by INTEGER REFERENCES users(id), created_by INTEGER,
used_by INTEGER REFERENCES users(id), used_by INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
used_at TIMESTAMP used_at TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES users(id),
FOREIGN KEY (used_by) REFERENCES users(id)
); );
CREATE INDEX idx_invite_codes_code ON invite_codes(code); CREATE INDEX idx_invite_codes_code ON invite_codes(code);
@@ -23,10 +25,12 @@ CREATE INDEX idx_invite_codes_code ON invite_codes(code);
CREATE TABLE IF NOT EXISTS domain_invite_codes ( CREATE TABLE IF NOT EXISTS domain_invite_codes (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(32) UNIQUE NOT NULL, code VARCHAR(32) UNIQUE NOT NULL,
created_by INTEGER REFERENCES users(id), created_by INTEGER,
used_by INTEGER REFERENCES users(id), used_by INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
used_at TIMESTAMP used_at TIMESTAMP,
FOREIGN KEY (created_by) REFERENCES users(id),
FOREIGN KEY (used_by) REFERENCES users(id)
); );
CREATE INDEX idx_domain_invite_codes_code ON domain_invite_codes(code); CREATE INDEX idx_domain_invite_codes_code ON domain_invite_codes(code);
@@ -38,11 +42,12 @@ CREATE TABLE IF NOT EXISTS domains (
name VARCHAR(100) NOT NULL, name VARCHAR(100) NOT NULL,
tld VARCHAR(20) NOT NULL, tld VARCHAR(20) NOT NULL,
ip VARCHAR(255) NOT NULL, ip VARCHAR(255) NOT NULL,
user_id INTEGER REFERENCES users(id), user_id INTEGER,
status VARCHAR(20) DEFAULT 'pending', status VARCHAR(20) DEFAULT 'pending',
denial_reason TEXT, denial_reason TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(name, tld) UNIQUE(name, tld),
FOREIGN KEY (user_id) REFERENCES users(id)
); );
CREATE INDEX idx_domains_name_tld ON domains(name, tld); CREATE INDEX idx_domains_name_tld ON domains(name, tld);
@@ -51,13 +56,14 @@ CREATE INDEX idx_domains_status ON domains(status);
CREATE TABLE IF NOT EXISTS dns_records ( CREATE TABLE IF NOT EXISTS dns_records (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
domain_id INTEGER NOT NULL REFERENCES domains(id) ON DELETE CASCADE, domain_id INTEGER NOT NULL,
record_type VARCHAR(10) NOT NULL, record_type VARCHAR(10) NOT NULL,
name VARCHAR(255) NOT NULL DEFAULT '@', -- @ for root, or subdomain name name VARCHAR(255) NOT NULL DEFAULT '@', -- @ for root, or subdomain name
value VARCHAR(1000) NOT NULL, value VARCHAR(1000) NOT NULL,
ttl INTEGER DEFAULT 3600, ttl INTEGER DEFAULT 3600,
priority INTEGER, -- For MX records priority INTEGER, -- For MX records
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
); );
CREATE INDEX idx_dns_records_domain_type ON dns_records(domain_id, record_type); CREATE INDEX idx_dns_records_domain_type ON dns_records(domain_id, record_type);

View File

@@ -18,13 +18,14 @@ CREATE INDEX idx_certificate_challenges_expires_at ON certificate_challenges(exp
CREATE TABLE IF NOT EXISTS issued_certificates ( CREATE TABLE IF NOT EXISTS issued_certificates (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
domain VARCHAR(255) NOT NULL, domain VARCHAR(255) NOT NULL,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, user_id INTEGER NOT NULL,
certificate_pem TEXT NOT NULL, certificate_pem TEXT NOT NULL,
private_key_pem TEXT NOT NULL, private_key_pem TEXT NOT NULL,
issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, issued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NOT NULL, expires_at TIMESTAMP NOT NULL,
revoked_at TIMESTAMP, revoked_at TIMESTAMP,
serial_number VARCHAR(255) UNIQUE NOT NULL serial_number VARCHAR(255) UNIQUE NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
); );
CREATE INDEX idx_issued_certificates_domain ON issued_certificates(domain); CREATE INDEX idx_issued_certificates_domain ON issued_certificates(domain);

View File

@@ -2,7 +2,8 @@
DELETE FROM dns_records WHERE record_type NOT IN ('A', 'AAAA', 'CNAME', 'TXT'); DELETE FROM dns_records WHERE record_type NOT IN ('A', 'AAAA', 'CNAME', 'TXT');
-- Now apply the constraint -- Now apply the constraint
ALTER TABLE dns_records DROP CONSTRAINT dns_records_record_type_check; -- MySQL doesn't support DROP CONSTRAINT syntax for CHECK constraints
-- ALTER TABLE dns_records DROP CONSTRAINT dns_records_record_type_check;
-- MySQL doesn't support table-level CHECK constraints, using trigger instead -- MySQL doesn't support table-level CHECK constraints, using trigger instead
DELIMITER // DELIMITER //

View File

@@ -1,12 +1,13 @@
-- Search engine domain crawl status tracking -- Search engine domain crawl status tracking
CREATE TABLE IF NOT EXISTS domain_crawl_status ( CREATE TABLE IF NOT EXISTS domain_crawl_status (
domain_id INT PRIMARY KEY, FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE, domain_id INT PRIMARY KEY,
last_crawled_at TIMESTAMP, last_crawled_at TIMESTAMP,
next_crawl_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, next_crawl_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
crawl_status VARCHAR(20) DEFAULT 'pending', crawl_status VARCHAR(20) DEFAULT 'pending',
error_message TEXT, error_message TEXT,
pages_found INTEGER DEFAULT 0, pages_found INTEGER DEFAULT 0,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
); );
CREATE INDEX idx_domain_crawl_status_next_crawl ON domain_crawl_status(next_crawl_at); CREATE INDEX idx_domain_crawl_status_next_crawl ON domain_crawl_status(next_crawl_at);