this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

write and read

+88
+2
.gitignore
··· 1 + # the built binary 2 + bskyfeedgen
+86
database.go
··· 1 + package main 2 + 3 + import ( 4 + "database/sql" 5 + "fmt" 6 + "log" 7 + "log/slog" 8 + "os" 9 + 10 + "github.com/bugsnag/bugsnag-go/v2" 11 + _ "github.com/mattn/go-sqlite3" 12 + ) 13 + 14 + func db() { 15 + os.Remove("sqlite-database.db") // I delete the file to avoid duplicated records. 16 + // SQLite is a file based database. 17 + 18 + log.Println("Creating sqlite-database.db...") 19 + file, err := os.Create("sqlite-database.db") // Create SQLite file 20 + if err != nil { 21 + bugsnag.Notify(fmt.Errorf("create db: %w", err)) 22 + return 23 + } 24 + file.Close() 25 + log.Println("sqlite-database.db created") 26 + 27 + sqliteDatabase, _ := sql.Open("sqlite3", "./sqlite-database.db") // Open the created SQLite File 28 + defer sqliteDatabase.Close() 29 + 30 + createTable(sqliteDatabase) 31 + read(sqliteDatabase) 32 + } 33 + 34 + func createTable(db *sql.DB) { 35 + createFeedTableSQL := `CREATE TABLE feed ( 36 + "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 37 + "uri" TEXT, 38 + "userDID" TEXT 39 + );` 40 + 41 + slog.Info("Create feed table...") 42 + statement, err := db.Prepare(createFeedTableSQL) 43 + if err != nil { 44 + bugsnag.Notify(fmt.Errorf("prepare DB statement: %w", err)) 45 + return 46 + } 47 + _, err = statement.Exec() 48 + if err != nil { 49 + bugsnag.Notify(fmt.Errorf("exec sql statement: %w", err)) 50 + return 51 + } 52 + slog.Info("feed table created") 53 + 54 + _, err = db.Exec("INSERT INTO feed(uri, userDID) VALUES(?,?)", "hello", "world") 55 + if err != nil { 56 + bugsnag.Notify(fmt.Errorf("insert into table: %w", err)) 57 + return 58 + } 59 + } 60 + 61 + type feedItem struct { 62 + ID int 63 + URI string 64 + UserDID string 65 + } 66 + 67 + func read(db *sql.DB) { 68 + rows, err := db.Query("SELECT id, uri, userDID FROM feed") 69 + if err != nil { 70 + bugsnag.Notify(fmt.Errorf("db query: %w", err)) 71 + return 72 + } 73 + defer rows.Close() // Ensure rows are closed after processing 74 + 75 + feedItems := make([]feedItem, 0) // Slice to store todos 76 + for rows.Next() { 77 + var feedItem feedItem 78 + if err := rows.Scan(&feedItem.ID, &feedItem.URI, &feedItem.UserDID); err != nil { 79 + bugsnag.Notify(fmt.Errorf("db scan: %w", err)) 80 + return 81 + } 82 + feedItems = append(feedItems, feedItem) 83 + } 84 + 85 + slog.Info("feed items read", "values", feedItems) 86 + }