package models import ( "errors" "fmt" "screenmark/screenmark/.gen/haystack/haystack/model" . "screenmark/screenmark/.gen/haystack/haystack/table" . "github.com/go-jet/jet/v2/postgres" "github.com/google/uuid" ) func SaveImage(userId string, imageName string, imageData []byte) (model.UserImages, error) { stmt := UserImages.INSERT(UserImages.UserID, UserImages.ImageName, UserImages.Image).VALUES(userId, imageName, imageData).RETURNING(UserImages.ID, UserImages.UserID, UserImages.ImageName) userImage := model.UserImages{} err := stmt.Query(db, &userImage) return userImage, err } func GetImage(imageId string) (model.UserImages, error) { id := uuid.MustParse(imageId) stmt := UserImages.SELECT(UserImages.AllColumns).WHERE(UserImages.ID.EQ(UUID(id))) images := []model.UserImages{} err := stmt.Query(db, &images) if len(images) != 1 { return model.UserImages{}, errors.New(fmt.Sprintf("Expected 1, got %d\n", len(images))) } return images[0], err } type UserImagesWithInfo struct { model.UserImages Tags []model.ImageTags Links []model.ImageLinks Text []model.ImageText } func GetUserImages(userId string) ([]UserImagesWithInfo, error) { id := uuid.MustParse(userId) stmt := SELECT(UserImages.ID, UserImages.ImageName, ImageTags.AllColumns, ImageText.AllColumns, ImageLinks.AllColumns).FROM(UserImages.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(id))) fmt.Println(stmt.DebugSql()) images := []UserImagesWithInfo{} err := stmt.Query(db, &images) return images, err } func SaveImageTags(imageId string, tags []string) ([]model.ImageTags, error) { id := uuid.MustParse(imageId) stmt := ImageTags.INSERT(ImageTags.ImageID, ImageTags.Tag) for _, t := range tags { stmt = stmt.VALUES(id, t) } stmt.RETURNING(ImageTags.AllColumns) imageTags := []model.ImageTags{} err := stmt.Query(db, &imageTags) return imageTags, err } func SaveImageLinks(imageId string, links []string) ([]model.ImageLinks, error) { id := uuid.MustParse(imageId) stmt := ImageTags.INSERT(ImageLinks.ImageID, ImageLinks.Link) for _, t := range links { stmt = stmt.VALUES(id, t) } stmt.RETURNING(ImageLinks.AllColumns) imageLinks := []model.ImageLinks{} err := stmt.Query(db, &imageLinks) return imageLinks, err } func SaveImageTexts(imageId string, texts []string) ([]model.ImageText, error) { id := uuid.MustParse(imageId) stmt := ImageText.INSERT(ImageText.ImageID, ImageText.ImageText) for _, t := range texts { stmt = stmt.VALUES(id, t) } stmt.RETURNING(ImageText.AllColumns) imageTags := []model.ImageText{} err := stmt.Query(db, &imageTags) return imageTags, err }