fix(backend): order listening history by recency and cap to 15 tracks

This commit is contained in:
2026-07-14 13:26:04 +02:00
parent 2abca7f08d
commit 5fe0f6ff32
@@ -10,19 +10,19 @@ namespace Musify.Application.Tracks
IDatabase database) IDatabase database)
: IQueryHandler<GetListeningHistoryQuery, IEnumerable<TrackApplicationResponse>> : IQueryHandler<GetListeningHistoryQuery, IEnumerable<TrackApplicationResponse>>
{ {
public const int ListSize = 15;
public ValueTask<IEnumerable<TrackApplicationResponse>> Handle(GetListeningHistoryQuery query, CancellationToken cancellationToken) public ValueTask<IEnumerable<TrackApplicationResponse>> Handle(GetListeningHistoryQuery query, CancellationToken cancellationToken)
{ {
var listeningHistory = database.ListeningHistories var listeningHistory = database.ListeningHistories
.Where(l => l.UserId == query.UserId) .Where(l => l.UserId == query.UserId)
.Select(l => l.TrackId) .OrderByDescending(l => l.ListenedAt)
.ToList(); .Select(t => TrackApplicationResponse.FromEntity(t.Track))
.Take(ListSize)
var tracks = database.Tracks .DistinctBy(t => t.Id)
.Where(t => listeningHistory.Contains(t.Id))
.Select(TrackApplicationResponse.FromEntity)
.AsEnumerable(); .AsEnumerable();
return ValueTask.FromResult(tracks); return ValueTask.FromResult(listeningHistory);
} }
} }
} }