From 4b120982d071d7bbb3d5422c9fe2a98f20874349 Mon Sep 17 00:00:00 2001 From: John Costa Date: Sun, 16 Mar 2025 18:29:15 +0000 Subject: [PATCH] fix: returning whole tag object --- backend/main.go | 3 ++- backend/models/image.go | 32 ----------------------------- backend/models/user.go | 45 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/backend/main.go b/backend/main.go index 108b29a..7749c84 100644 --- a/backend/main.go +++ b/backend/main.go @@ -63,6 +63,7 @@ func main() { linkModel := models.NewLinkModel(db) tagModel := models.NewTagModel(db) textModel := models.NewTextModel(db) + userModel := models.NewUserModel(db) listener := pq.NewListener(os.Getenv("DB_CONNECTION"), time.Second, time.Second, func(event pq.ListenerEventType, err error) { if err != nil { @@ -149,7 +150,7 @@ func main() { w.Header().Add("Access-Control-Allow-Credentials", "*") w.Header().Add("Access-Control-Allow-Headers", "*") - images, err := imageModel.ListWithProperties(r.Context(), uuid.MustParse(userId)) + images, err := userModel.ListWithProperties(r.Context(), uuid.MustParse(userId)) if err != nil { log.Println(err) w.WriteHeader(http.StatusNotFound) diff --git a/backend/models/image.go b/backend/models/image.go index 6a35fc6..a005954 100644 --- a/backend/models/image.go +++ b/backend/models/image.go @@ -29,16 +29,6 @@ type ProcessingImageData struct { Image model.Image } -type ImageWithProperties struct { - ID uuid.UUID - - Image model.Image - - Tags []model.ImageTags - Links []model.ImageLinks - Text []model.ImageText -} - func (m ImageModel) Process(ctx context.Context, userId uuid.UUID, image model.Image) (model.UserImagesToProcess, error) { tx, err := m.dbPool.BeginTx(ctx, nil) if err != nil { @@ -153,28 +143,6 @@ func (m ImageModel) Get(ctx context.Context, imageId uuid.UUID) (ImageData, erro return images[0], err } -// TODO: move this to `user.go` model file -func (m ImageModel) ListWithProperties(ctx context.Context, userId uuid.UUID) ([]ImageWithProperties, error) { - listWithPropertiesStmt := SELECT( - UserImages.ID.AS("ImageWithProperties.ID"), - Image.ID, - Image.ImageName, - ImageTags.AllColumns, - ImageText.AllColumns, - ImageLinks.AllColumns). - FROM( - UserImages.INNER_JOIN(Image, Image.ID.EQ(UserImages.ImageID)). - LEFT_JOIN(ImageTags, ImageTags.ImageID.EQ(UserImages.ID)). - LEFT_JOIN(ImageText, ImageText.ImageID.EQ(UserImages.ID)). - LEFT_JOIN(ImageLinks, ImageLinks.ImageID.EQ(UserImages.ID))). - WHERE(UserImages.UserID.EQ(UUID(userId))) - - images := []ImageWithProperties{} - err := listWithPropertiesStmt.QueryContext(ctx, m.dbPool, &images) - - return images, err -} - func NewImageModel(db *sql.DB) ImageModel { return ImageModel{dbPool: db} } diff --git a/backend/models/user.go b/backend/models/user.go index 2aacc9e..3085f2f 100644 --- a/backend/models/user.go +++ b/backend/models/user.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "errors" + "fmt" "screenmark/screenmark/.gen/haystack/haystack/model" . "screenmark/screenmark/.gen/haystack/haystack/table" @@ -11,10 +12,23 @@ import ( "github.com/google/uuid" ) -type UserModek struct { +type UserModel struct { dbPool *sql.DB } +type ImageWithProperties struct { + ID uuid.UUID + + Image model.Image + + Tags []struct { + model.ImageTags + Tag model.UserTags + } + Links []model.ImageLinks + Text []model.ImageText +} + func getUserIdFromImage(ctx context.Context, dbPool *sql.DB, imageId uuid.UUID) (uuid.UUID, error) { getUserIdStmt := UserImages.SELECT(UserImages.UserID).WHERE(UserImages.ID.EQ(UUID(imageId))) @@ -30,3 +44,32 @@ func getUserIdFromImage(ctx context.Context, dbPool *sql.DB, imageId uuid.UUID) return user[0].ID, nil } + +func (m UserModel) ListWithProperties(ctx context.Context, userId uuid.UUID) ([]ImageWithProperties, error) { + listWithPropertiesStmt := SELECT( + UserImages.ID.AS("ImageWithProperties.ID"), + Image.ID, + Image.ImageName, + ImageTags.AllColumns, + UserTags.AllColumns, + ImageText.AllColumns, + ImageLinks.AllColumns). + FROM( + UserImages.INNER_JOIN(Image, Image.ID.EQ(UserImages.ImageID)). + LEFT_JOIN(ImageTags, ImageTags.ImageID.EQ(UserImages.ID)). + INNER_JOIN(UserTags, UserTags.ID.EQ(ImageTags.TagID)). + LEFT_JOIN(ImageText, ImageText.ImageID.EQ(UserImages.ID)). + LEFT_JOIN(ImageLinks, ImageLinks.ImageID.EQ(UserImages.ID))). + WHERE(UserImages.UserID.EQ(UUID(userId))) + + fmt.Println(listWithPropertiesStmt.DebugSql()) + + images := []ImageWithProperties{} + err := listWithPropertiesStmt.QueryContext(ctx, m.dbPool, &images) + + return images, err +} + +func NewUserModel(db *sql.DB) UserModel { + return UserModel{dbPool: db} +}