package database import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) var DB *sql.DB func InitDB(filepath string) (err error) { DB, err = sql.Open("sqlite3", filepath) if err != nil { panic(err) } if DB == nil { panic("DB couldn't be initialized") } handleError(initObjectTable()) handleError(initCollectionTable()) handleError(initActorTable()) handleError(initUserTable()) return } func initObjectTable() (err error) { statement, err := DB.Prepare(`CREATE TABLE IF NOT EXISTS object ( id TEXT PRIMARY KEY, type TEXT, attributedTo TEXT, content TEXT, published INTEGER, toActor TEXT )`) if err != nil { return } statement.Exec() return } func initCollectionTable() (err error) { statement, err := DB.Prepare(`CREATE TABLE IF NOT EXISTS collection ( id TEXT PRIMARY KEY )`) if err != nil { return } statement.Exec() statement, err = DB.Prepare(`CREATE TABLE IF NOT EXISTS collectionObject ( collectionId TEXT, objectId TEXT, PRIMARY KEY (collectionId, objectId) )`) if err != nil { return } statement.Exec() return } func initActorTable() (err error) { statement, err := DB.Prepare(`CREATE TABLE IF NOT EXISTS actor ( id TEXT PRIMARY KEY, type TEXT, name TEXT, preferredUsername TEXT, summary TEXT, inbox TEXT, outbox TEXT, followers TEXT, following TEXT, liked TEXT )`) if err != nil { return } statement.Exec() return } func initUserTable() (err error) { statement, err := DB.Prepare(`CREATE TABLE IF NOT EXISTS user ( id TEXT PRIMARY KEY, password TEXT, actor TEXT )`) if err != nil { return } statement.Exec() statement, err = DB.Prepare(`CREATE TABLE IF NOT EXISTS session ( token TEXT PRIMARY KEY, userId TEXT )`) if err != nil { return } statement.Exec() return } func handleError(err error) { if err != nil { panic(fmt.Sprintf("Could not execute Database Query: %s", err)) } }