feat(events): also working

This commit is contained in:
2025-03-18 18:37:12 +00:00
parent 28dd02a47d
commit 072eebc0bf
3 changed files with 81 additions and 0 deletions

View File

@ -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
}
}()
}
}

66
backend/models/events.go Normal file
View File

@ -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}
}

View File

@ -20,6 +20,7 @@ type ImageInfo struct {
Links []string `json:"links"`
Locations []model.Locations `json:"locations"`
Events []model.Events `json:"events"`
}
type ResponseFormat struct {