diff --git a/internal/video/like_entity.go b/internal/video/like_entity.go index 4f2f62b..9e2c3f6 100644 --- a/internal/video/like_entity.go +++ b/internal/video/like_entity.go @@ -3,10 +3,10 @@ package video import "time" type Like struct { - ID uint `gorm:"primaryKey"` - VideoID uint `gorm:"index;not null"` - AccountID uint `gorm:"index;not null"` - CreatedAt time.Time + ID uint `gorm:"primaryKey" json:"id"` + VideoID uint `gorm:"uniqueIndex:idx_like_video_account;not null" json:"video_id"` + AccountID uint `gorm:"uniqueIndex:idx_like_video_account;not null" json:"account_id"` + CreatedAt time.Time `json:"created_at"` } type LikeRequest struct { diff --git a/internal/video/like_service.go b/internal/video/like_service.go index 51a7e9a..7c911b8 100644 --- a/internal/video/like_service.go +++ b/internal/video/like_service.go @@ -16,7 +16,19 @@ func NewLikeService(repo *LikeRepository, videoRepo *VideoRepository) *LikeServi } func (s *LikeService) Like(ctx context.Context, like *Like) error { - if isLiked, err := s.IsLiked(ctx, like.VideoID, like.AccountID); err == nil && isLiked { + exists, err := s.VideoRepo.IsExist(ctx, like.VideoID) + if err != nil { + return err + } + if !exists { + return errors.New("video not found") + } + + isLiked, err := s.IsLiked(ctx, like.VideoID, like.AccountID) + if err != nil { + return err + } + if isLiked { return errors.New("user has liked this video") } like.CreatedAt = time.Now() @@ -34,7 +46,19 @@ func (s *LikeService) Like(ctx context.Context, like *Like) error { } func (s *LikeService) Unlike(ctx context.Context, like *Like) error { - if isLiked, err := s.IsLiked(ctx, like.VideoID, like.AccountID); err == nil && !isLiked { + exists, err := s.VideoRepo.IsExist(ctx, like.VideoID) + if err != nil { + return err + } + if !exists { + return errors.New("video not found") + } + + isLiked, err := s.IsLiked(ctx, like.VideoID, like.AccountID) + if err != nil { + return err + } + if !isLiked { return errors.New("user has not liked this video") } if err := s.repo.Unlike(ctx, like); err != nil {