using Mediator; using Musify.Domain.ValueObjects; namespace Musify.Application.Genres; public record GetAvailableGenresQuery : IQuery>; public record AvailableGenreResponse(Genre Genre, IReadOnlyList IncompatibleWith); public class GetAvailableGenresQueryHandler : IQueryHandler> { public ValueTask> Handle(GetAvailableGenresQuery request, CancellationToken cancellationToken) { var all = Enum.GetValues(); IReadOnlyList result = all .Select(genre => new AvailableGenreResponse( genre, all.Where(other => !GenreCompatibility.AreCompatible(genre, other)).ToList())) .ToList(); return ValueTask.FromResult(result); } }