diff --git a/.main.go.kate-swp b/.main.go.kate-swp new file mode 100644 index 0000000..a007a45 Binary files /dev/null and b/.main.go.kate-swp differ diff --git a/database/.database.go.kate-swp b/database/.database.go.kate-swp new file mode 100644 index 0000000..6cf8748 Binary files /dev/null and b/database/.database.go.kate-swp differ diff --git a/database/database.go b/database/database.go new file mode 100644 index 0000000..23b20ee --- /dev/null +++ b/database/database.go @@ -0,0 +1,86 @@ +package database + +import ( + "database/sql" + "log" + + _ "github.com/mattn/go-sqlite3" +) + +func Open(path string) *sql.DB { + db, err := sql.Open("sqlite3", path) + if err != nil { + log.Fatal("failed to open database:", err) + } + + if err := db.Ping(); err != nil { + log.Fatal("Failed to connect to database:", err) + } + + createTables(db) + return db +} + +func createTables(db *sql.DB) { + query := ` + CREATE TABLE IF NOT EXISTS project ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + slug TEXT NOT NULL UNIQUE, + description TEXT, + repo_url TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + show_timestamps INTEGER DEFAULT 1 + ); + + CREATE TABLE IF NOT EXISTS release ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + project_id INTEGER NOT NULL, + version TEXT NOT NULL, + title TEXT, + changelog TEXT, + is_latest INTEGER DEFAULT 0, + published_at DATETIME DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (project_id) REFERENCES project(id) + ); + + CREATE TABLE IF NOT EXISTS asset ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + release_id INTEGER NOT NULL, + filename TEXT NOT NULL, + filepath TEXT NOT NULL, + os TEXT, + arch TEXT, + size INTEGER, + sha256 TEXT, + alt_url TEXT, + FOREIGN KEY (release_id) REFERENCES release(id) + ); + + CREATE TABLE IF NOT EXISTS page ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + project_id INTEGER NOT NULL, + slug TEXT NOT NULL, + title TEXT NOT NULL, + body TEXT, + sort_order INTEGER DEFAULT 0, + FOREIGN KEY (project_id) REFERENCES project(id) + ); + + CREATE TABLE IF NOT EXISTS screenshot ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + project_id INTEGER NOT NULL, + filename TEXT NOT NULL, + caption TEXT, + sort_order INTEGER DEFAULT 0, + FOREIGN KEY (project_id) REFERENCES project(id) + ); + ` + + _, err := db.Exec(query) + if err != nil { + log.Fatal("Failed to create tables:", err) + } + + log.Println("Database tables ready") +} diff --git a/go.mod b/go.mod index cf825ad..52ce2c0 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module 192.168.1.180/odonax/filehost-home go 1.26.2 + +require github.com/mattn/go-sqlite3 v1.14.44 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..cf1e561 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= +github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ=