Ripped out literally everything to simplify the backend as much as possible. Some of the code was so horrifically complicated it's insaneeee
69 lines
1.8 KiB
Go
69 lines
1.8 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) error {
|
|
saveImageStmt := Image.INSERT(Image.ImageName, Image.Image, Image.UserID).
|
|
VALUES(name, image, userID)
|
|
|
|
_, err := saveImageStmt.ExecContext(ctx, m.dbPool)
|
|
|
|
return 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}
|
|
}
|