From 2786530c54619e6f004f2a59428d2985a0981fbb Mon Sep 17 00:00:00 2001 From: Leon <147289645+LeoninCS@users.noreply.github.com> Date: Tue, 16 Dec 2025 18:52:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A0=E5=85=A5=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E8=BE=B9=E7=95=8C=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/video/like_entity.go | 8 ++++---- internal/video/like_service.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 6 deletions(-) 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 {