ok-2
This commit is contained in:
84
internal/db/schema.go
Normal file
84
internal/db/schema.go
Normal file
@@ -0,0 +1,84 @@
|
||||
// Package db defines the database schema.
|
||||
package db
|
||||
|
||||
// CurrentSchemaVersion returns the current schema version (for migrations)
|
||||
func CurrentSchemaVersion() int {
|
||||
return 1
|
||||
}
|
||||
|
||||
// CreateTableStatements returns a list of CREATE TABLE statements.
|
||||
func CreateTableStatements() []string {
|
||||
return []string{
|
||||
createNodesTable(),
|
||||
createAttributesTable(),
|
||||
createNetworksTable(),
|
||||
createSubnetsTable(),
|
||||
createSoftwareTable(),
|
||||
}
|
||||
}
|
||||
|
||||
// DropTableOrder returns table names in reverse dependency order for safe DROP.
|
||||
func DropTableOrder() []string {
|
||||
return []string{"software", "attributes", "nodes", "subnets", "networks"}
|
||||
}
|
||||
|
||||
// --- Private DDL Functions ---
|
||||
|
||||
func createNodesTable() string {
|
||||
return `
|
||||
CREATE TABLE IF NOT EXISTS nodes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
hostname TEXT NOT NULL UNIQUE,
|
||||
ip TEXT,
|
||||
status TEXT DEFAULT 'active',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
}
|
||||
|
||||
func createAttributesTable() string {
|
||||
return `
|
||||
CREATE TABLE IF NOT EXISTS attributes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
node_id INTEGER NOT NULL,
|
||||
key TEXT NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
FOREIGN KEY(node_id) REFERENCES nodes(id) ON DELETE CASCADE,
|
||||
UNIQUE(node_id, key)
|
||||
);`
|
||||
}
|
||||
|
||||
func createNetworksTable() string {
|
||||
return `
|
||||
CREATE TABLE IF NOT EXISTS networks (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
description TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
}
|
||||
|
||||
func createSubnetsTable() string {
|
||||
return `
|
||||
CREATE TABLE IF NOT EXISTS subnets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
network_id INTEGER NOT NULL,
|
||||
cidr TEXT NOT NULL,
|
||||
gateway TEXT,
|
||||
vlan INTEGER,
|
||||
FOREIGN KEY(network_id) REFERENCES networks(id) ON DELETE CASCADE,
|
||||
UNIQUE(network_id, cidr)
|
||||
);`
|
||||
}
|
||||
|
||||
func createSoftwareTable() string {
|
||||
return `
|
||||
CREATE TABLE IF NOT EXISTS software (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
version TEXT NOT NULL,
|
||||
installed_on INTEGER,
|
||||
FOREIGN KEY(installed_on) REFERENCES nodes(id) ON DELETE SET NULL,
|
||||
UNIQUE(name, version, installed_on)
|
||||
);`
|
||||
}
|
||||
Reference in New Issue
Block a user