1
0
mirror of synced 2025-03-03 16:43:52 +01:00
TaikoLocalServer/Application/Handlers/Api/User/GetSongHistoryQuery.cs
2024-11-20 01:15:21 +08:00

33 lines
1.2 KiB
C#

using Application.Mappers;
namespace Application.Handlers.Api.User;
public record GetSongHistoryQuery(uint Baid) : IRequest<ApiResult<List<SongHistoryData>>>;
public class GetSongHistoryQueryHandler(ITaikoDbContext context, ILogger<GetSongHistoryQueryHandler> logger)
: IRequestHandler<GetSongHistoryQuery, ApiResult<List<SongHistoryData>>>
{
public async Task<ApiResult<List<SongHistoryData>>> Handle(GetSongHistoryQuery request, CancellationToken cancellationToken)
{
var user = await context.UserData
.FirstOrDefaultAsync(d => d.Baid == request.Baid, cancellationToken);
if (user is null)
{
return ApiResult.Failed<List<SongHistoryData>>("User not found");
}
var playLogs = await context.SongPlayData
.Where(datum => datum.Baid == request.Baid)
.ToListAsync(cancellationToken);
var songHistory = playLogs.Select(SongHistoryDataMapper.ToSongHistoryData).ToList();
var favoriteSongs = user.FavoriteSongsArray.ToHashSet();
foreach (var song in songHistory.Where(song => favoriteSongs.Contains(song.SongId)))
{
song.IsFavorite = true;
}
return ApiResult.Succeed(songHistory);
}
}