feat: set status to completed on anime completion
Check existing watchlist status — if already completed, just clear progress and remove from continue watching. Otherwise upsert with status 'completed'.
This commit is contained in:
@@ -35,6 +35,7 @@ type PlaybackRepository interface {
|
|||||||
GetWatchListEntry(ctx context.Context, params db.GetWatchListEntryParams) (db.WatchListEntry, error)
|
GetWatchListEntry(ctx context.Context, params db.GetWatchListEntryParams) (db.WatchListEntry, error)
|
||||||
GetContinueWatchingEntry(ctx context.Context, params db.GetContinueWatchingEntryParams) (db.ContinueWatchingEntry, error)
|
GetContinueWatchingEntry(ctx context.Context, params db.GetContinueWatchingEntryParams) (db.ContinueWatchingEntry, error)
|
||||||
SaveWatchProgress(ctx context.Context, params db.SaveWatchProgressParams) 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)
|
UpsertContinueWatchingEntry(ctx context.Context, params db.UpsertContinueWatchingEntryParams) (db.ContinueWatchingEntry, error)
|
||||||
DeleteContinueWatchingEntry(ctx context.Context, params db.DeleteContinueWatchingEntryParams) error
|
DeleteContinueWatchingEntry(ctx context.Context, params db.DeleteContinueWatchingEntryParams) error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ func (r *playbackRepository) SaveWatchProgress(ctx context.Context, params db.Sa
|
|||||||
return r.queries.SaveWatchProgress(ctx, params)
|
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) {
|
func (r *playbackRepository) UpsertContinueWatchingEntry(ctx context.Context, params db.UpsertContinueWatchingEntryParams) (db.ContinueWatchingEntry, error) {
|
||||||
return r.queries.UpsertContinueWatchingEntry(ctx, params)
|
return r.queries.UpsertContinueWatchingEntry(ctx, params)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
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{
|
_ = s.repo.DeleteContinueWatchingEntry(ctx, db.DeleteContinueWatchingEntryParams{
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
AnimeID: animeID,
|
AnimeID: animeID,
|
||||||
|
|||||||
Reference in New Issue
Block a user