fix: returning whole tag object

This commit is contained in:
2025-03-16 18:29:15 +00:00
parent 7582e4d8d9
commit 4b120982d0
3 changed files with 46 additions and 34 deletions

View File

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

View File

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

View File

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