using Musify.Domain.Entities; using Musify.Domain.ValueObjects; namespace Musify.Application.Albums.Responses { public static class AlbumProjections { public const int CoverTrackCount = 4; public static IQueryable Active(this IQueryable query) => query.Where(album => album.LifeCycleStatus == LifeCycleStatus.Active); public static IQueryable SelectResponse(this IQueryable query) => query.Select(album => new AlbumApplicationResponse( album.Id, album.Title, album.Description, album.ReleaseYear, album.OwnerUserId, album.AlbumTracks.Count(albumTrack => albumTrack.Track.LifeCycleStatus == LifeCycleStatus.Active && albumTrack.Track.IsPublished), album.Pictures!.SmallName, album.Pictures!.MediumName, album.Pictures!.LargeName, album.CreatedAt, album.UpdatedAt, album.AlbumTracks .Where(albumTrack => albumTrack.Track.LifeCycleStatus == LifeCycleStatus.Active && albumTrack.Track.IsPublished) .OrderBy(albumTrack => albumTrack.TrackNumber) .Take(CoverTrackCount) .Select(albumTrack => albumTrack.TrackId) .ToList(), album.Type)); } }