diff options
| author | Bobby <[email protected]> | 2025-07-18 17:07:23 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-07-18 17:07:23 +0530 |
| commit | aa0405ee98c45a9bb25dd9959d899bbd56bc1b02 (patch) | |
| tree | c6b75124708f3a3ab5fecbdb454eb5f530dd2ffa /models/image.go | |
| parent | 821773b12c07a4bc23628e7d98ac4b34da1eb9e1 (diff) | |
| download | imageboard-aa0405ee98c45a9bb25dd9959d899bbd56bc1b02.tar.xz imageboard-aa0405ee98c45a9bb25dd9959d899bbd56bc1b02.zip | |
favourite system and ∂etails on single page
Diffstat (limited to 'models/image.go')
| -rw-r--r-- | models/image.go | 57 |
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 +} |
