diff --git a/main.go b/main.go index 674aa17..1687a45 100644 --- a/main.go +++ b/main.go @@ -5,20 +5,17 @@ import ( _ "github.com/mattn/go-sqlite3" "lewisdale.dev/oopsie/data" + "lewisdale.dev/oopsie/ping" "lewisdale.dev/oopsie/sites" ) -const createSitesTable = `CREATE TABLE IF NOT EXISTS sites ( -id INTEGER NOT NULL PRIMARY KEY, -created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -name TEXT NOT NULL, -url TEXT NOT NULL -);` - func main() { db := data.Connect("test.sqlite3") + db.Exec("PRAGMA foreign_keys = ON;") + sites.CreateTable(db) + ping.CreateTable(db) site := sites.Site{Name: "Lewisdale.dev", Url: "https://lewisdale.dev"} site.Save(db) diff --git a/ping/ping.go b/ping/ping.go new file mode 100644 index 0000000..791c2c2 --- /dev/null +++ b/ping/ping.go @@ -0,0 +1,58 @@ +package ping + +import ( + "database/sql" + + "lewisdale.dev/oopsie/sites" +) + +type Status int16 + +const ( + Success Status = iota + Failure +) + +type Ping struct { + Site sites.Site + Timestamp string + Status Status +} + +const createQuery = `CREATE TABLE IF NOT EXISTS statuses ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL +); + +CREATE TABLE IF NOT EXISTS ping ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + site TEXT NOT NULL, + timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + status INTEGER NOT NULL, + FOREIGN KEY (site) REFERENCES sites(url), + FOREIGN KEY (status) REFERENCES statuses(id) +);` + +const seedStatusQuery = `INSERT INTO statuses (id, name) VALUES (?, ?) +ON CONFLICT (id) DO NOTHING` + +func CreateTable(db *sql.DB) { + if _, err := db.Exec(createQuery); err != nil { + panic(err) + } + + seedStatuses(db) +} + +func seedStatuses(db *sql.DB) { + if _, err := db.Exec(seedStatusQuery, Success, "Success"); err != nil { + panic(err) + } + if _, err := db.Exec(seedStatusQuery, Failure, "Failure"); err != nil { + panic(err) + } +} + +func (p *Ping) Save(db *sql.DB) { + +} diff --git a/test.sqlite3 b/test.sqlite3 deleted file mode 100644 index bd24f75..0000000 Binary files a/test.sqlite3 and /dev/null differ