package models import ( "context" "database/sql" "log" "screenmark/screenmark/.gen/haystack/haystack/model" . "screenmark/screenmark/.gen/haystack/haystack/table" "github.com/google/uuid" ) type LocationModel struct { dbPool *sql.DB } // This looks stupid func getValues(location model.Locations) []any { arr := make([]any, 0) if location.Address != nil { arr = append(arr, *location.Address) } else { arr = append(arr, nil) } if location.Coordinates != nil { arr = append(arr, *location.Coordinates) } else { arr = append(arr, nil) } if location.Description != nil { arr = append(arr, *location.Description) } else { arr = append(arr, nil) } return arr } func (m LocationModel) Save(ctx context.Context, locations []model.Locations) (model.Locations, error) { insertLocationStmt := Locations. INSERT(Locations.Name, Locations.Address, Locations.Coordinates, Locations.Description) for _, location := range locations { insertLocationStmt = insertLocationStmt.VALUES(location.Name, getValues(location)...) } insertLocationStmt = insertLocationStmt.RETURNING(Locations.AllColumns) log.Println(insertLocationStmt.DebugSql()) insertedLocation := model.Locations{} err := insertLocationStmt.QueryContext(ctx, m.dbPool, &insertedLocation) return insertedLocation, err } func (m LocationModel) SaveToImage(ctx context.Context, imageId uuid.UUID, locations []model.Locations) error { location, err := m.Save(ctx, locations) if err != nil { return err } insertImageLocationStmt := ImageLocations. INSERT(ImageLocations.ImageID, ImageLocations.LocationID). VALUES(imageId, location.ID) _, err = insertImageLocationStmt.ExecContext(ctx, m.dbPool) return err } func NewLocationModel(db *sql.DB) LocationModel { return LocationModel{dbPool: db} }