summaryrefslogtreecommitdiff
path: root/database
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
parent27aab70386c68f3a0f22c52e72b91cf16b289100 (diff)
downloadhatecomputers.club-fe22956d5dbdeb2b80a9e56b46abe2be9f2bfcdb.tar.gz
hatecomputers.club-fe22956d5dbdeb2b80a9e56b46abe2be9f2bfcdb.zip
initial commit
Diffstat (limited to 'database')
-rw-r--r--database/conn.go17
-rw-r--r--database/migrate.go84
-rw-r--r--database/users.go5
3 files changed, 106 insertions, 0 deletions
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() {
+
+}