From 993256898671df15edb7f7b6755faa7b82d1b76c Mon Sep 17 00:00:00 2001 From: John Costa Date: Tue, 18 Mar 2025 18:37:12 +0000 Subject: [PATCH] feat(events): also working --- backend/main.go | 14 +++++++++ backend/models/events.go | 66 ++++++++++++++++++++++++++++++++++++++++ backend/openai.go | 1 + 3 files changed, 81 insertions(+) create mode 100644 backend/models/events.go diff --git a/backend/main.go b/backend/main.go index 7d173b9..5d6bbab 100644 --- a/backend/main.go +++ b/backend/main.go @@ -34,6 +34,7 @@ func GetAiClient() (AiClient, error) { mode := os.Getenv("MODE") if mode == "TESTING" { address := "10 Downing Street" + description := "Cheese and Crackers" return TestAiClient{ ImageInfo: ImageInfo{ @@ -45,6 +46,11 @@ func GetAiClient() (AiClient, error) { Name: "London", Address: &address, }}, + Events: []model.Events{{ + ID: uuid.Nil, + Name: "Party", + Description: &description, + }}, }, }, nil } @@ -71,6 +77,7 @@ func main() { tagModel := models.NewTagModel(db) textModel := models.NewTextModel(db) locationModel := models.NewLocationModel(db) + eventModel := models.NewEventModel(db) userModel := models.NewUserModel(db) listener := pq.NewListener(os.Getenv("DB_CONNECTION"), time.Second, time.Second, func(event pq.ListenerEventType, err error) { @@ -150,6 +157,13 @@ func main() { log.Println(err) return } + + err = eventModel.SaveToImage(ctx, userImage.ImageID, imageInfo.Events) + if err != nil { + log.Println("Failed to save events") + log.Println(err) + return + } }() } } diff --git a/backend/models/events.go b/backend/models/events.go new file mode 100644 index 0000000..8b15231 --- /dev/null +++ b/backend/models/events.go @@ -0,0 +1,66 @@ +package models + +import ( + "context" + "database/sql" + "log" + "screenmark/screenmark/.gen/haystack/haystack/model" + . "screenmark/screenmark/.gen/haystack/haystack/table" + + "github.com/google/uuid" +) + +type EventModel struct { + dbPool *sql.DB +} + +// This looks stupid +func getEventValues(event model.Events) []any { + arr := make([]any, 0) + + if event.Description != nil { + arr = append(arr, *event.Description) + } else { + arr = append(arr, nil) + } + + return arr +} + +func (m EventModel) Save(ctx context.Context, events []model.Events) (model.Events, error) { + insertEventStmt := Events. + INSERT(Events.Name, Events.Description) + + for _, event := range events { + insertEventStmt = insertEventStmt.VALUES(event.Name, getEventValues(event)...) + } + + insertEventStmt = insertEventStmt.RETURNING(Events.AllColumns) + + log.Println(insertEventStmt.DebugSql()) + + insertedEvent := model.Events{} + err := insertEventStmt.QueryContext(ctx, m.dbPool, &insertedEvent) + + return insertedEvent, err +} + +func (m EventModel) SaveToImage(ctx context.Context, imageId uuid.UUID, events []model.Events) error { + event, err := m.Save(ctx, events) + + if err != nil { + return err + } + + insertImageEventStmt := ImageEvents. + INSERT(ImageEvents.ImageID, ImageEvents.EventID). + VALUES(imageId, event.ID) + + _, err = insertImageEventStmt.ExecContext(ctx, m.dbPool) + + return err +} + +func NewEventModel(db *sql.DB) EventModel { + return EventModel{dbPool: db} +} diff --git a/backend/openai.go b/backend/openai.go index cca416f..170e493 100644 --- a/backend/openai.go +++ b/backend/openai.go @@ -20,6 +20,7 @@ type ImageInfo struct { Links []string `json:"links"` Locations []model.Locations `json:"locations"` + Events []model.Events `json:"events"` } type ResponseFormat struct {