feat(events): also working
This commit is contained in:
@ -34,6 +34,7 @@ func GetAiClient() (AiClient, error) {
|
|||||||
mode := os.Getenv("MODE")
|
mode := os.Getenv("MODE")
|
||||||
if mode == "TESTING" {
|
if mode == "TESTING" {
|
||||||
address := "10 Downing Street"
|
address := "10 Downing Street"
|
||||||
|
description := "Cheese and Crackers"
|
||||||
|
|
||||||
return TestAiClient{
|
return TestAiClient{
|
||||||
ImageInfo: ImageInfo{
|
ImageInfo: ImageInfo{
|
||||||
@ -45,6 +46,11 @@ func GetAiClient() (AiClient, error) {
|
|||||||
Name: "London",
|
Name: "London",
|
||||||
Address: &address,
|
Address: &address,
|
||||||
}},
|
}},
|
||||||
|
Events: []model.Events{{
|
||||||
|
ID: uuid.Nil,
|
||||||
|
Name: "Party",
|
||||||
|
Description: &description,
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -71,6 +77,7 @@ func main() {
|
|||||||
tagModel := models.NewTagModel(db)
|
tagModel := models.NewTagModel(db)
|
||||||
textModel := models.NewTextModel(db)
|
textModel := models.NewTextModel(db)
|
||||||
locationModel := models.NewLocationModel(db)
|
locationModel := models.NewLocationModel(db)
|
||||||
|
eventModel := models.NewEventModel(db)
|
||||||
userModel := models.NewUserModel(db)
|
userModel := models.NewUserModel(db)
|
||||||
|
|
||||||
listener := pq.NewListener(os.Getenv("DB_CONNECTION"), time.Second, time.Second, func(event pq.ListenerEventType, err error) {
|
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)
|
log.Println(err)
|
||||||
return
|
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
66
backend/models/events.go
Normal 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}
|
||||||
|
}
|
@ -20,6 +20,7 @@ type ImageInfo struct {
|
|||||||
Links []string `json:"links"`
|
Links []string `json:"links"`
|
||||||
|
|
||||||
Locations []model.Locations `json:"locations"`
|
Locations []model.Locations `json:"locations"`
|
||||||
|
Events []model.Events `json:"events"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ResponseFormat struct {
|
type ResponseFormat struct {
|
||||||
|
Reference in New Issue
Block a user