From fe22956d5dbdeb2b80a9e56b46abe2be9f2bfcdb Mon Sep 17 00:00:00 2001 From: Lizzy Hunt Date: Tue, 26 Mar 2024 16:00:05 -0600 Subject: initial commit --- database/conn.go | 17 +++++++++++ database/migrate.go | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++ database/users.go | 5 ++++ 3 files changed, 106 insertions(+) create mode 100644 database/conn.go create mode 100644 database/migrate.go create mode 100644 database/users.go (limited to 'database') diff --git a/database/conn.go b/database/conn.go new file mode 100644 index 0000000..be27586 --- /dev/null +++ b/database/conn.go @@ -0,0 +1,17 @@ +package database + +import ( + "database/sql" + _ "github.com/mattn/go-sqlite3" + "log" +) + +func MakeConn(databasePath *string) *sql.DB { + log.Println("opening database at", *databasePath, "with foreign keys enabled") + dbConn, err := sql.Open("sqlite3", *databasePath+"?_foreign_keys=on") + if err != nil { + panic(err) + } + + return dbConn +} diff --git a/database/migrate.go b/database/migrate.go new file mode 100644 index 0000000..f10e03b --- /dev/null +++ b/database/migrate.go @@ -0,0 +1,84 @@ +package database + +import ( + "log" + + "database/sql" + _ "github.com/mattn/go-sqlite3" +) + +type Migrator func(*sql.DB) (*sql.DB, error) + +func MigrateUsers(dbConn *sql.DB) (*sql.DB, error) { + log.Println("migrating users table") + + _, err := dbConn.Exec(`CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + );`) + if err != nil { + return dbConn, err + } + + log.Println("creating unique index on users table") + _, err = dbConn.Exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_users_username ON users (username);`) + if err != nil { + return dbConn, err + } + + return dbConn, nil +} + +func MigrateApiKeys(dbConn *sql.DB) (*sql.DB, error) { + log.Println("migrating api_keys table") + + _, err := dbConn.Exec(`CREATE TABLE IF NOT EXISTS api_keys ( + key TEXT PRIMARY KEY, + user_id INTEGER NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) + );`) + if err != nil { + return dbConn, err + } + return dbConn, nil +} + +func MigrateDNSRecords(dbConn *sql.DB) (*sql.DB, error) { + log.Println("migrating dns_records table") + + _, err := dbConn.Exec(`CREATE TABLE IF NOT EXISTS dns_records ( + id INTEGER PRIMARY KEY, + user_id INTEGER NOT NULL, + name TEXT NOT NULL, + type TEXT NOT NULL, + content TEXT NOT NULL, + ttl INTEGER NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users (id) + );`) + if err != nil { + return dbConn, err + } + return dbConn, nil +} + +func Migrate(dbConn *sql.DB) (*sql.DB, error) { + log.Println("migrating database") + + migrations := []Migrator{ + MigrateUsers, + MigrateApiKeys, + MigrateDNSRecords, + } + + for _, migration := range migrations { + dbConn, err := migration(dbConn) + if err != nil { + return dbConn, err + } + } + + return dbConn, nil +} diff --git a/database/users.go b/database/users.go new file mode 100644 index 0000000..6fb2601 --- /dev/null +++ b/database/users.go @@ -0,0 +1,5 @@ +package database + +func getUsers() { + +} -- cgit v1.2.3-70-g09d2