From efbce87d5cfd19ac9adfaf552d5daab945d645de Mon Sep 17 00:00:00 2001 From: mkelvers Date: Wed, 13 May 2026 18:28:33 +0200 Subject: [PATCH] feat: set status to completed on anime completion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Check existing watchlist status — if already completed, just clear progress and remove from continue watching. Otherwise upsert with status 'completed'. --- internal/domain/playback.go | 1 + internal/playback/repository/repository.go | 4 ++++ internal/playback/service/service.go | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/internal/domain/playback.go b/internal/domain/playback.go index 27cc0db..3dadb18 100644 --- a/internal/domain/playback.go +++ b/internal/domain/playback.go @@ -35,6 +35,7 @@ type PlaybackRepository interface { GetWatchListEntry(ctx context.Context, params db.GetWatchListEntryParams) (db.WatchListEntry, error) GetContinueWatchingEntry(ctx context.Context, params db.GetContinueWatchingEntryParams) (db.ContinueWatchingEntry, error) SaveWatchProgress(ctx context.Context, params db.SaveWatchProgressParams) error + UpsertWatchListEntry(ctx context.Context, params db.UpsertWatchListEntryParams) (db.WatchListEntry, error) UpsertContinueWatchingEntry(ctx context.Context, params db.UpsertContinueWatchingEntryParams) (db.ContinueWatchingEntry, error) DeleteContinueWatchingEntry(ctx context.Context, params db.DeleteContinueWatchingEntryParams) error } diff --git a/internal/playback/repository/repository.go b/internal/playback/repository/repository.go index 423df11..4951de4 100644 --- a/internal/playback/repository/repository.go +++ b/internal/playback/repository/repository.go @@ -26,6 +26,10 @@ func (r *playbackRepository) SaveWatchProgress(ctx context.Context, params db.Sa return r.queries.SaveWatchProgress(ctx, params) } +func (r *playbackRepository) UpsertWatchListEntry(ctx context.Context, params db.UpsertWatchListEntryParams) (db.WatchListEntry, error) { + return r.queries.UpsertWatchListEntry(ctx, params) +} + func (r *playbackRepository) UpsertContinueWatchingEntry(ctx context.Context, params db.UpsertContinueWatchingEntryParams) (db.ContinueWatchingEntry, error) { return r.queries.UpsertContinueWatchingEntry(ctx, params) } diff --git a/internal/playback/service/service.go b/internal/playback/service/service.go index 7ed986a..9913627 100644 --- a/internal/playback/service/service.go +++ b/internal/playback/service/service.go @@ -323,6 +323,24 @@ func (s *playbackService) BuildWatchData(ctx context.Context, animeID int, title } func (s *playbackService) CompleteAnime(ctx context.Context, userID string, animeID int64) error { + entry, err := s.repo.GetWatchListEntry(ctx, db.GetWatchListEntryParams{ + UserID: userID, + AnimeID: animeID, + }) + if err != nil || entry.Status != "completed" { + _, err = s.repo.UpsertWatchListEntry(ctx, db.UpsertWatchListEntryParams{ + ID: uuid.New().String(), + UserID: userID, + AnimeID: animeID, + Status: "completed", + CurrentEpisode: sql.NullInt64{Valid: false}, + CurrentTimeSeconds: 0, + }) + if err != nil { + return err + } + } + _ = s.repo.DeleteContinueWatchingEntry(ctx, db.DeleteContinueWatchingEntryParams{ UserID: userID, AnimeID: animeID,