71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package models
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
"screenmark/screenmark/.gen/haystack/haystack/model"
|
|
. "screenmark/screenmark/.gen/haystack/haystack/table"
|
|
|
|
. "github.com/go-jet/jet/v2/postgres"
|
|
"github.com/go-jet/jet/v2/qrm"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type ImageModel struct {
|
|
dbPool *sql.DB
|
|
}
|
|
|
|
func (m ImageModel) Save(ctx context.Context, name string, image []byte, userID uuid.UUID) (model.Image, error) {
|
|
saveImageStmt := Image.INSERT(Image.ImageName, Image.Image, Image.Description, Image.UserID).
|
|
VALUES(name, image, "", userID).
|
|
RETURNING(Image.AllColumns)
|
|
|
|
newImage := model.Image{}
|
|
err := saveImageStmt.QueryContext(ctx, m.dbPool, &newImage)
|
|
|
|
return newImage, err
|
|
}
|
|
|
|
func (m ImageModel) Get(ctx context.Context, imageID uuid.UUID) (model.Image, bool, error) {
|
|
getImageStmt := Image.SELECT(Image.AllColumns.Except(Image.Image)).WHERE(Image.ID.EQ(UUID(imageID)))
|
|
|
|
image := model.Image{}
|
|
err := getImageStmt.QueryContext(ctx, m.dbPool, &image)
|
|
|
|
return image, err != qrm.ErrNoRows, err
|
|
}
|
|
|
|
func (m ImageModel) Update(ctx context.Context, image model.Image) (model.Image, error) {
|
|
updateImageStmt := Image.UPDATE(Image.MutableColumns.Except(Image.Image)).
|
|
MODEL(image).
|
|
WHERE(Image.ID.EQ(UUID(image.ID))).
|
|
RETURNING(Image.AllColumns.Except(Image.Image))
|
|
|
|
updatedImage := model.Image{}
|
|
err := updateImageStmt.QueryContext(ctx, m.dbPool, &updatedImage)
|
|
|
|
return updatedImage, err
|
|
}
|
|
|
|
func (m ImageModel) Delete(ctx context.Context, imageID, userID uuid.UUID) (bool, error) {
|
|
deleteImageStmt := Image.DELETE().WHERE(Image.ID.EQ(UUID(imageID)).AND(Image.UserID.EQ(UUID(userID))))
|
|
|
|
r, err := deleteImageStmt.ExecContext(ctx, m.dbPool)
|
|
if err != nil {
|
|
return false, fmt.Errorf("deleting image: %w", err)
|
|
}
|
|
|
|
rowsAffected, err := r.RowsAffected()
|
|
if err != nil {
|
|
return false, fmt.Errorf("unreachable: %w", err)
|
|
}
|
|
|
|
return rowsAffected > 0, nil
|
|
}
|
|
|
|
func NewImageModel(db *sql.DB) ImageModel {
|
|
return ImageModel{dbPool: db}
|
|
}
|