diff --git a/internal/database/database.go b/internal/database/database.go index 25f2740..1b8a1aa 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -8,15 +8,18 @@ import ( migrate "github.com/rubenv/sql-migrate" ) +var db *sql.DB + //go:embed migrations/* var dbMigrations embed.FS -func Connect(path string) (*sql.DB, error) { +func Open(path string) error { + var err error dbOptions := "?_fk=on&_journal=WAL&sync=normal" - db, err := sql.Open("sqlite3", path+dbOptions) + db, err = sql.Open("sqlite3", path+dbOptions) if err != nil { - return nil, err + return err } migrations := migrate.EmbedFileSystemMigrationSource{ @@ -24,9 +27,13 @@ func Connect(path string) (*sql.DB, error) { Root: "migrations", } - if _, err := migrate.Exec(db, "sqlite3", migrations, migrate.Up); err != nil { - return nil, err + if _, migrateErr := migrate.Exec(db, "sqlite3", migrations, migrate.Up); migrateErr != nil { + return migrateErr } - return db, nil + if pingErr := db.Ping(); pingErr != nil { + return pingErr + } + + return nil } diff --git a/internal/database/feed.go b/internal/database/feed.go new file mode 100644 index 0000000..48c74a2 --- /dev/null +++ b/internal/database/feed.go @@ -0,0 +1,29 @@ +package database + +type FeedType string + +const ( + RSS FeedType = "RSS" +) + +type Feed struct { + Name string + Url string + FeedType FeedType +} + +func (f Feed) Insert() (int64, error) { + result, err := db.Exec("INSERT INTO feed (name, url, type) VALUES (?,?,?)", f.Name, f.Url, f.FeedType) + + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + + if err != nil { + return 0, err + } + + return id, nil +} diff --git a/main.go b/main.go index 01c938c..9396a14 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,9 @@ along with this program. If not, see . */ package main -import "freed/cmd" +import ( + "freed/cmd" +) func main() { cmd.Execute()