From 3a5d6ed2cdaa57de8ea7335e05b548317118c3ee Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 17 Mar 2024 12:35:10 +0100 Subject: [PATCH] Add deleted events --- .../Controllers/IWatchStatusRepository.cs | 29 +++++++++++++------ .../Repositories/WatchStatusRepository.cs | 6 ++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/back/src/Kyoo.Abstractions/Controllers/IWatchStatusRepository.cs b/back/src/Kyoo.Abstractions/Controllers/IWatchStatusRepository.cs index 8b666bd2..23d6e6c6 100644 --- a/back/src/Kyoo.Abstractions/Controllers/IWatchStatusRepository.cs +++ b/back/src/Kyoo.Abstractions/Controllers/IWatchStatusRepository.cs @@ -30,6 +30,7 @@ namespace Kyoo.Abstractions.Controllers; public interface IWatchStatusRepository { public delegate Task ResourceEventHandler(T resource); + public delegate Task WatchStatusDeletedEventHandler(Guid resourceId, Guid userId); Task> GetAll( Filter? filter = default, @@ -47,24 +48,30 @@ public interface IWatchStatusRepository int? percent ); - static event ResourceEventHandler OnMovieStatusChangedHandler; - - protected static Task OnMovieStatusChanged(Movie obj) => + static event ResourceEventHandler OnMovieStatusChangedHandler; + protected static Task OnMovieStatusChanged(MovieWatchStatus obj) => OnMovieStatusChangedHandler?.Invoke(obj) ?? Task.CompletedTask; Task DeleteMovieStatus(Guid movieId, Guid userId); + static event WatchStatusDeletedEventHandler OnMovieStatusDeletedHandler; + protected static Task OnMovieStatusDeleted(Guid movieId, Guid userId) => + OnMovieStatusDeletedHandler?.Invoke(movieId, userId) ?? Task.CompletedTask; + Task GetShowStatus(Guid showId, Guid userId); Task SetShowStatus(Guid showId, Guid userId, WatchStatus status); - static event ResourceEventHandler OnShowStatusChangedHandler; - - protected static Task OnShowStatusChanged(Show obj) => + static event ResourceEventHandler OnShowStatusChangedHandler; + protected static Task OnShowStatusChanged(ShowWatchStatus obj) => OnShowStatusChangedHandler?.Invoke(obj) ?? Task.CompletedTask; Task DeleteShowStatus(Guid showId, Guid userId); + static event WatchStatusDeletedEventHandler OnShowStatusDeletedHandler; + protected static Task OnShowStatusDeleted(Guid showId, Guid userId) => + OnShowStatusDeletedHandler?.Invoke(showId, userId) ?? Task.CompletedTask; + Task GetEpisodeStatus(Guid episodeId, Guid userId); /// Where the user has stopped watching. Only usable if Status @@ -77,10 +84,14 @@ public interface IWatchStatusRepository int? percent ); - static event ResourceEventHandler OnEpisodeStatusChangedHandler; - - protected static Task OnEpisodeStatusChanged(Episode obj) => + static event ResourceEventHandler OnEpisodeStatusChangedHandler; + protected static Task OnEpisodeStatusChanged(EpisodeWatchStatus obj) => OnEpisodeStatusChangedHandler?.Invoke(obj) ?? Task.CompletedTask; Task DeleteEpisodeStatus(Guid episodeId, Guid userId); + + static event WatchStatusDeletedEventHandler OnEpisodeStatusDeletedHandler; + protected static Task OnEpisodeStatusDeleted(Guid episodeId, Guid userId) => + OnEpisodeStatusDeletedHandler?.Invoke(episodeId, userId) ?? Task.CompletedTask; + } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/WatchStatusRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/WatchStatusRepository.cs index 25c69bc6..1465d938 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/WatchStatusRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/WatchStatusRepository.cs @@ -265,6 +265,7 @@ public class WatchStatusRepository( .MovieWatchStatus.Upsert(ret) .UpdateIf(x => status != Watching || x.Status != Completed) .RunAsync(); + await IWatchStatusRepository.OnMovieStatusChanged(ret); return ret; } @@ -274,6 +275,7 @@ public class WatchStatusRepository( await database .MovieWatchStatus.Where(x => x.MovieId == movieId && x.UserId == userId) .ExecuteDeleteAsync(); + await IWatchStatusRepository.OnMovieStatusDeleted(movieId, userId); } /// @@ -403,6 +405,7 @@ public class WatchStatusRepository( .ShowWatchStatus.Upsert(ret) .UpdateIf(x => status != Watching || x.Status != Completed || newEpisode) .RunAsync(); + await IWatchStatusRepository.OnShowStatusChanged(ret); return ret; } @@ -416,6 +419,7 @@ public class WatchStatusRepository( await database .EpisodeWatchStatus.Where(x => x.Episode.ShowId == showId && x.UserId == userId) .ExecuteDeleteAsync(); + await IWatchStatusRepository.OnShowStatusDeleted(showId, userId); } /// @@ -475,6 +479,7 @@ public class WatchStatusRepository( .EpisodeWatchStatus.Upsert(ret) .UpdateIf(x => status != Watching || x.Status != Completed) .RunAsync(); + await IWatchStatusRepository.OnEpisodeStatusChanged(ret); await SetShowStatus(episode.ShowId, userId, WatchStatus.Watching); return ret; } @@ -485,5 +490,6 @@ public class WatchStatusRepository( await database .EpisodeWatchStatus.Where(x => x.EpisodeId == episodeId && x.UserId == userId) .ExecuteDeleteAsync(); + await IWatchStatusRepository.OnEpisodeStatusDeleted(episodeId, userId); } }