this repo has no description
0
fork

Configure Feed

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

refactor the db stuff

+62 -29
+21
OLDDockerfile
··· 1 + # # Use the Go 1.23 alpine official image 2 + # # https://hub.docker.com/_/golang 3 + # FROM golang:1.23-alpine 4 + 5 + # # Create and change to the app directory. 6 + # WORKDIR /app 7 + 8 + # # Copy go mod and sum files 9 + # COPY go.mod go.sum ./ 10 + 11 + # # Copy local code to the container image. 12 + # COPY . ./ 13 + 14 + # # Install project dependencies 15 + # RUN CGO_ENABLED=1 go mod download 16 + 17 + # # Build the app 18 + # RUN go build -o app 19 + 20 + # # Run the service on container startup. 21 + # ENTRYPOINT ["./app"]
+21 -25
database.go
··· 6 6 "fmt" 7 7 "log/slog" 8 8 "os" 9 - "path" 10 9 11 10 "github.com/bugsnag/bugsnag-go/v2" 12 11 _ "github.com/glebarez/go-sqlite" 13 12 ) 14 13 15 - func db() { 16 - mountPath := os.Getenv("RAILWAY_VOLUME_MOUNT_PATH") 17 - if mountPath == "" { 18 - bugsnag.Notify(fmt.Errorf("RAILWAY_VOLUME_MOUNT_PATH env not set")) 19 - return 14 + func NewDatabase(dbPath string) (*sql.DB, error) { 15 + err := createDbFile(dbPath) 16 + if err != nil { 17 + return nil, fmt.Errorf("create db file: %w", err) 20 18 } 21 - dbFilename := path.Join(mountPath, "database.db") 22 - err := createDbFile(dbFilename) 19 + 20 + db, err := sql.Open("sqlite", dbPath) 23 21 if err != nil { 24 - slog.Error("create db file", "error", err) 25 - bugsnag.Notify(err) 26 - return 22 + return nil, fmt.Errorf("open database: %w", err) 27 23 } 28 24 29 - sqliteDatabase, _ := sql.Open("sqlite", dbFilename) // Open the created SQLite File 30 - defer sqliteDatabase.Close() 25 + err = db.Ping() 26 + if err != nil { 27 + return nil, fmt.Errorf("ping db: %w", err) 28 + } 31 29 32 - createTable(sqliteDatabase) 33 - read(sqliteDatabase) 30 + err = createFeedTable(db) 31 + if err != nil { 32 + return nil, fmt.Errorf("creating feed table: %w", err) 33 + } 34 + 35 + return db, nil 34 36 } 35 37 36 38 func createDbFile(dbFilename string) error { ··· 46 48 return nil 47 49 } 48 50 49 - func createTable(db *sql.DB) { 51 + func createFeedTable(db *sql.DB) error { 50 52 createFeedTableSQL := `CREATE TABLE IF NOT EXISTS feed ( 51 53 "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 52 54 "uri" TEXT, ··· 56 58 slog.Info("Create feed table...") 57 59 statement, err := db.Prepare(createFeedTableSQL) 58 60 if err != nil { 59 - bugsnag.Notify(fmt.Errorf("prepare DB statement: %w", err)) 60 - return 61 + return fmt.Errorf("prepare DB statement to create table: %w", err) 61 62 } 62 63 _, err = statement.Exec() 63 64 if err != nil { 64 - bugsnag.Notify(fmt.Errorf("exec sql statement: %w", err)) 65 - return 65 + return fmt.Errorf("exec sql statement to create table: %w", err) 66 66 } 67 67 slog.Info("feed table created") 68 68 69 - _, err = db.Exec("INSERT INTO feed(uri, userDID) VALUES(?,?)", "hello", "world") 70 - if err != nil { 71 - bugsnag.Notify(fmt.Errorf("insert into table: %w", err)) 72 - return 73 - } 69 + return nil 74 70 } 75 71 76 72 type feedItem struct {
+4 -1
feed.go
··· 2 2 3 3 import ( 4 4 "context" 5 + "database/sql" 5 6 "sync" 6 7 ) 7 8 8 9 type FeedGenerator struct { 10 + db *sql.DB 9 11 mu sync.Mutex 10 12 posts map[string][]string 11 13 } 12 14 13 - func NewFeedGenerator() *FeedGenerator { 15 + func NewFeedGenerator(db *sql.DB) *FeedGenerator { 14 16 return &FeedGenerator{ 17 + db: db, 15 18 posts: make(map[string][]string), 16 19 } 17 20 }
+16 -3
main.go
··· 7 7 "log/slog" 8 8 "os" 9 9 "os/signal" 10 + "path" 10 11 "syscall" 11 12 "time" 12 13 ··· 24 25 ctx, cancel := context.WithCancel(context.Background()) 25 26 defer cancel() 26 27 27 - db() 28 - 29 28 bugsnagAPIKey := os.Getenv("BUGSNAG_API_KEY") 30 29 if bugsnagAPIKey != "" { 31 30 bugsnag.Configure(bugsnag.Configuration{ ··· 37 36 }) 38 37 } 39 38 40 - feeder := NewFeedGenerator() 39 + dbMountPath := os.Getenv("RAILWAY_VOLUME_MOUNT_PATH") 40 + if dbMountPath == "" { 41 + bugsnag.Notify(fmt.Errorf("RAILWAY_VOLUME_MOUNT_PATH env not set")) 42 + return 43 + } 44 + dbFilename := path.Join(dbMountPath, "database.db") 45 + db, err := NewDatabase(dbFilename) 46 + if err != nil { 47 + slog.Error("create new database", "error", err) 48 + bugsnag.Notify(err) 49 + return 50 + } 51 + defer db.Close() 52 + 53 + feeder := NewFeedGenerator(db) 41 54 42 55 feedDidBase := os.Getenv("FEED_DID_BASE") 43 56 if feedDidBase == "" {