aboutsummaryrefslogtreecommitdiff
path: root/models/image.go
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-07-18 17:07:23 +0530
committerBobby <[email protected]>2025-07-18 17:07:23 +0530
commitaa0405ee98c45a9bb25dd9959d899bbd56bc1b02 (patch)
treec6b75124708f3a3ab5fecbdb454eb5f530dd2ffa /models/image.go
parent821773b12c07a4bc23628e7d98ac4b34da1eb9e1 (diff)
downloadimageboard-aa0405ee98c45a9bb25dd9959d899bbd56bc1b02.tar.xz
imageboard-aa0405ee98c45a9bb25dd9959d899bbd56bc1b02.zip
favourite system and ∂etails on single page
Diffstat (limited to 'models/image.go')
-rw-r--r--models/image.go57
1 files changed, 32 insertions, 25 deletions
diff --git a/models/image.go b/models/image.go
index 17f369d..35b407e 100644
--- a/models/image.go
+++ b/models/image.go
@@ -175,31 +175,6 @@ func (i *Image) GetAspectRatio() string {
return "Unknown"
}
-func (i *Image) AddSize(tx *gorm.DB, sizeType config.ImageSizeType, width, height int, fileSize int64) (*ImageSize, error) {
- if width <= 0 || height <= 0 {
- return nil, fmt.Errorf("image dimensions must be greater than zero")
- }
-
- if fileSize <= 0 {
- return nil, fmt.Errorf("file size must be greater than zero")
- }
-
- size := &ImageSize{
- ImageID: i.ID,
- SizeType: sizeType,
- Width: width,
- Height: height,
- FileSize: fileSize,
- }
-
- if err := tx.Create(size).Error; err != nil {
- return nil, fmt.Errorf("failed to create image size: %v", err)
- }
-
- i.Sizes = append(i.Sizes, *size)
- return size, nil
-}
-
func (i *Image) AddRelatedImage(tx *gorm.DB, relatedImage *Image) error {
if relatedImage.ID == 0 {
return fmt.Errorf("related image must be saved before adding relationship")
@@ -319,3 +294,35 @@ func (i *Image) DeleteImage(tx *gorm.DB) error {
i.IsDeleted = true
return tx.Save(i).Error
}
+
+func (i *Image) ToggleFavourite(tx *gorm.DB, user *User) error {
+ if i.IsDeleted {
+ return fmt.Errorf("cannot favourite deleted image")
+ }
+
+ var count int64
+ if err := tx.Table("user_favorites").Where("user_id = ? AND image_id = ?", user.ID, i.ID).Count(&count).Error; err != nil {
+ return err
+ }
+
+ if count > 0 {
+ if err := tx.Model(user).Association("FavoritedImages").Delete(i); err != nil {
+ return err
+ }
+ return tx.Model(i).UpdateColumn("favourite_count", gorm.Expr("GREATEST(favourite_count - ?, 0)", 1)).Error
+ } else {
+ if err := tx.Model(user).Association("FavoritedImages").Append(i); err != nil {
+ return err
+ }
+ return tx.Model(i).UpdateColumn("favourite_count", gorm.Expr("favourite_count + ?", 1)).Error
+ }
+}
+
+func (i *Image) IsUserFavourited(tx *gorm.DB, user *User) bool {
+ if user == nil {
+ return false
+ }
+ var count int64
+ tx.Table("user_favorites").Where("user_id = ? AND image_id = ?", user.ID, i.ID).Count(&count)
+ return count > 0
+}