summaryrefslogtreecommitdiff
path: root/database
diff options
context:
space:
mode:
authorLizzy Hunt <lizzy.hunt@usu.edu>2024-03-29 16:35:04 -0600
committerLizzy Hunt <lizzy.hunt@usu.edu>2024-03-29 16:35:04 -0600
commit5080c566ac31ec622986c04f1812a1e88c88210e (patch)
treed8dbaa766ef21b098c5740880facc2989c750295 /database
parent7cc13887eae7dd2a61900751e038d273313d077f (diff)
downloadhatecomputers.club-5080c566ac31ec622986c04f1812a1e88c88210e.tar.gz
hatecomputers.club-5080c566ac31ec622986c04f1812a1e88c88210e.zip
guestbook!
Diffstat (limited to 'database')
-rw-r--r--database/dns.go14
-rw-r--r--database/guestbook.go50
-rw-r--r--database/migrate.go19
-rw-r--r--database/users.go33
4 files changed, 115 insertions, 1 deletions
diff --git a/database/dns.go b/database/dns.go
index 568653d..fc01347 100644
--- a/database/dns.go
+++ b/database/dns.go
@@ -20,6 +20,18 @@ type DNSRecord struct {
CreatedAt time.Time `json:"created_at"`
}
+func CountUserDNSRecords(db *sql.DB, userID string) (int, error) {
+ log.Println("counting dns records for user", userID)
+
+ row := db.QueryRow("SELECT COUNT(*) FROM dns_records WHERE user_id = ?", userID)
+ var count int
+ err := row.Scan(&count)
+ if err != nil {
+ return 0, err
+ }
+ return count, nil
+}
+
func GetUserDNSRecords(db *sql.DB, userID string) ([]DNSRecord, error) {
log.Println("getting dns records for user", userID)
@@ -43,7 +55,7 @@ func GetUserDNSRecords(db *sql.DB, userID string) ([]DNSRecord, error) {
}
func SaveDNSRecord(db *sql.DB, record *DNSRecord) (*DNSRecord, error) {
- log.Println("saving dns record", record)
+ log.Println("saving dns record", record.ID)
record.CreatedAt = time.Now()
_, err := db.Exec("INSERT OR REPLACE INTO dns_records (id, user_id, name, type, content, ttl, internal, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", record.ID, record.UserID, record.Name, record.Type, record.Content, record.TTL, record.Internal, record.CreatedAt)
diff --git a/database/guestbook.go b/database/guestbook.go
new file mode 100644
index 0000000..2d4d8c9
--- /dev/null
+++ b/database/guestbook.go
@@ -0,0 +1,50 @@
+package database
+
+import (
+ "database/sql"
+ "log"
+ "time"
+
+ _ "github.com/mattn/go-sqlite3"
+)
+
+type GuestbookEntry struct {
+ ID string `json:"id"`
+ Name string `json:"name"`
+ Message string `json:"message"`
+ CreatedAt time.Time `json:"created_at"`
+}
+
+func GetGuestbookEntries(db *sql.DB) ([]GuestbookEntry, error) {
+ log.Println("getting guest_book entries")
+
+ rows, err := db.Query("SELECT * FROM guest_book ORDER BY created_at DESC LIMIT 200")
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ var entries []GuestbookEntry
+ for rows.Next() {
+ var entry GuestbookEntry
+ err := rows.Scan(&entry.ID, &entry.Name, &entry.Message, &entry.CreatedAt)
+ if err != nil {
+ return nil, err
+ }
+ entries = append(entries, entry)
+ }
+
+ return entries, nil
+}
+
+func SaveGuestbookEntry(db *sql.DB, entry *GuestbookEntry) (*GuestbookEntry, error) {
+ log.Println("saving guest_book entry", entry.ID)
+
+ entry.CreatedAt = time.Now()
+ _, err := db.Exec("INSERT OR REPLACE INTO guest_book (id, name, message, created_at) VALUES (?, ?, ?, ?)", entry.ID, entry.Name, entry.Message, entry.CreatedAt)
+
+ if err != nil {
+ return nil, err
+ }
+ return entry, nil
+}
diff --git a/database/migrate.go b/database/migrate.go
index de1db4c..1609bc2 100644
--- a/database/migrate.go
+++ b/database/migrate.go
@@ -102,6 +102,24 @@ func MigrateUserSessions(dbConn *sql.DB) (*sql.DB, error) {
return dbConn, nil
}
+func MigrateGuestBook(dbConn *sql.DB) (*sql.DB, error) {
+ log.Println("migrating guest_book table")
+
+ _, err := dbConn.Exec(`CREATE TABLE IF NOT EXISTS guest_book (
+ id TEXT PRIMARY KEY,
+ name TEXT NOT NULL,
+ message TEXT NOT NULL,
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+ );`)
+ if err != nil {
+ return dbConn, err
+ }
+
+ _, err = dbConn.Exec(`CREATE INDEX IF NOT EXISTS idx_guest_book_created_at ON guest_book (created_at);`)
+
+ return dbConn, nil
+}
+
func Migrate(dbConn *sql.DB) (*sql.DB, error) {
log.Println("migrating database")
@@ -111,6 +129,7 @@ func Migrate(dbConn *sql.DB) (*sql.DB, error) {
MigrateApiKeys,
MigrateDomainOwners,
MigrateDNSRecords,
+ MigrateGuestBook,
}
for _, migration := range migrations {
diff --git a/database/users.go b/database/users.go
index f9e4436..ab48699 100644
--- a/database/users.go
+++ b/database/users.go
@@ -33,6 +33,8 @@ type UserSession struct {
}
func GetUser(dbConn *sql.DB, id string) (*User, error) {
+ log.Println("getting user", id)
+
row := dbConn.QueryRow(`SELECT id, mail, username, display_name, created_at FROM users WHERE id = ?;`, id)
var user User
@@ -46,6 +48,8 @@ func GetUser(dbConn *sql.DB, id string) (*User, error) {
}
func FindOrSaveUser(dbConn *sql.DB, user *User) (*User, error) {
+ log.Println("finding or saving user", user.ID)
+
_, err := dbConn.Exec(`INSERT OR REPLACE INTO users (id, mail, username, display_name) VALUES (?, ?, ?, ?);`, user.ID, user.Mail, user.Username, user.DisplayName)
if err != nil {
return nil, err
@@ -55,6 +59,8 @@ func FindOrSaveUser(dbConn *sql.DB, user *User) (*User, error) {
}
func MakeUserSessionFor(dbConn *sql.DB, user *User) (*UserSession, error) {
+ log.Println("making session for user", user.ID)
+
expireAt := time.Now().Add(time.Hour * 12)
_, err := dbConn.Exec(`INSERT OR REPLACE INTO user_sessions (id, user_id, expire_at) VALUES (?, ?, ?);`, user.ID, user.ID, time.Now().Add(ExpiryDuration))
@@ -72,6 +78,8 @@ func MakeUserSessionFor(dbConn *sql.DB, user *User) (*UserSession, error) {
}
func GetSession(dbConn *sql.DB, sessionId string) (*UserSession, error) {
+ log.Println("getting session", sessionId)
+
row := dbConn.QueryRow(`SELECT id, user_id, expire_at FROM user_sessions WHERE id = ?;`, sessionId)
var id, userId string
@@ -90,6 +98,8 @@ func GetSession(dbConn *sql.DB, sessionId string) (*UserSession, error) {
}
func DeleteSession(dbConn *sql.DB, sessionId string) error {
+ log.Println("deleting session", sessionId)
+
_, err := dbConn.Exec(`DELETE FROM user_sessions WHERE id = ?;`, sessionId)
if err != nil {
log.Println(err)
@@ -126,7 +136,24 @@ func DeleteExpiredSessions(dbConn *sql.DB) error {
return nil
}
+func CountUserAPIKeys(dbConn *sql.DB, userId string) (int, error) {
+ log.Println("counting api keys for user", userId)
+
+ row := dbConn.QueryRow(`SELECT COUNT(*) FROM api_keys WHERE user_id = ?;`, userId)
+
+ var count int
+ err := row.Scan(&count)
+ if err != nil {
+ log.Println(err)
+ return 0, err
+ }
+
+ return count, nil
+}
+
func ListUserAPIKeys(dbConn *sql.DB, userId string) ([]*UserApiKey, error) {
+ log.Println("listing api keys for user", userId)
+
rows, err := dbConn.Query(`SELECT key, user_id, created_at FROM api_keys WHERE user_id = ?;`, userId)
if err != nil {
log.Println(err)
@@ -150,6 +177,8 @@ func ListUserAPIKeys(dbConn *sql.DB, userId string) ([]*UserApiKey, error) {
}
func SaveAPIKey(dbConn *sql.DB, apiKey *UserApiKey) (*UserApiKey, error) {
+ log.Println("saving api key", apiKey.Key)
+
_, err := dbConn.Exec(`INSERT OR REPLACE INTO api_keys (key, user_id) VALUES (?, ?);`, apiKey.Key, apiKey.UserID)
if err != nil {
log.Println(err)
@@ -161,6 +190,8 @@ func SaveAPIKey(dbConn *sql.DB, apiKey *UserApiKey) (*UserApiKey, error) {
}
func GetAPIKey(dbConn *sql.DB, key string) (*UserApiKey, error) {
+ log.Println("getting api key", key)
+
row := dbConn.QueryRow(`SELECT key, user_id, created_at FROM api_keys WHERE key = ?;`, key)
var apiKey UserApiKey
@@ -174,6 +205,8 @@ func GetAPIKey(dbConn *sql.DB, key string) (*UserApiKey, error) {
}
func DeleteAPIKey(dbConn *sql.DB, key string) error {
+ log.Println("deleting api key", key)
+
_, err := dbConn.Exec(`DELETE FROM api_keys WHERE key = ?;`, key)
if err != nil {
log.Println(err)