mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 18:19:11 +00:00
restructure user <-> albums relations in database
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"github.com/photoview/photoview/api/scanner"
|
||||
"github.com/pkg/errors"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
func (r *queryResolver) MyMedia(ctx context.Context, filter *models.Filter) ([]*models.Media, error) {
|
||||
@@ -182,20 +183,45 @@ func (r *mediaResolver) VideoWeb(ctx context.Context, media *models.Media) (*mod
|
||||
return &url, nil
|
||||
}
|
||||
|
||||
func (r *mediaResolver) Favorite(ctx context.Context, media *models.Media) (bool, error) {
|
||||
user := auth.UserFromContext(ctx)
|
||||
if user == nil {
|
||||
return false, auth.ErrUnauthorized
|
||||
}
|
||||
|
||||
userMediaData := models.UserMediaData{
|
||||
UserID: user.ID,
|
||||
MediaID: media.ID,
|
||||
Favorite: false,
|
||||
}
|
||||
|
||||
if err := r.Database.FirstOrInit(&userMediaData).Error; err != nil {
|
||||
return false, errors.Wrapf(err, "get user media data from database (user: %d, media: %d)", user.ID, media.ID)
|
||||
}
|
||||
|
||||
return userMediaData.Favorite, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) FavoriteMedia(ctx context.Context, mediaID int, favorite bool) (*models.Media, error) {
|
||||
|
||||
user := auth.UserFromContext(ctx)
|
||||
|
||||
var media models.Media
|
||||
|
||||
if err := r.Database.Joins("Album").Where("Album.owner_id = ?", user.ID).First(&media, mediaID).Error; err != nil {
|
||||
return nil, err
|
||||
if user == nil {
|
||||
return nil, auth.ErrUnauthorized
|
||||
}
|
||||
|
||||
media.Favorite = favorite
|
||||
userMediaData := models.UserMediaData{
|
||||
UserID: user.ID,
|
||||
MediaID: mediaID,
|
||||
Favorite: favorite,
|
||||
}
|
||||
|
||||
if err := r.Database.Save(&media).Error; err != nil {
|
||||
return nil, errors.Wrap(err, "failed to update media favorite on database")
|
||||
if err := r.Database.Clauses(clause.OnConflict{UpdateAll: true}).Create(&userMediaData).Error; err != nil {
|
||||
return nil, errors.Wrapf(err, "update user favorite media in database")
|
||||
}
|
||||
|
||||
var media models.Media
|
||||
if err := r.Database.First(&media, mediaID).Error; err != nil {
|
||||
return nil, errors.Wrap(err, "get media from database after favorite update")
|
||||
}
|
||||
|
||||
return &media, nil
|
||||
|
||||
Reference in New Issue
Block a user