summaryrefslogtreecommitdiff
path: root/database/migrate.go
diff options
context:
space:
mode:
authorLizzy Hunt <lizzy.hunt@usu.edu>2024-03-26 16:00:05 -0600
committerLizzy Hunt <lizzy.hunt@usu.edu>2024-03-26 16:00:05 -0600
commitfe22956d5dbdeb2b80a9e56b46abe2be9f2bfcdb (patch)
tree6111f03c2da4eb42aff03cda72157a8961da27e8 /database/migrate.go
parent27aab70386c68f3a0f22c52e72b91cf16b289100 (diff)
downloadhatecomputers.club-fe22956d5dbdeb2b80a9e56b46abe2be9f2bfcdb.tar.gz
hatecomputers.club-fe22956d5dbdeb2b80a9e56b46abe2be9f2bfcdb.zip
initial commit
Diffstat (limited to 'database/migrate.go')
-rw-r--r--database/migrate.go84
1 files changed, 84 insertions, 0 deletions
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
+}