Clear        


                
                    using CORE.APP.Models;
using CORE.APP.Services;
using Locations.APP.Domain;
using Locations.APP.Features.Cities;
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace Locations.APP.Features.Countries
{
    public class CountryQueryRequest : Request, IRequest<IQueryable<CountryQueryResponse>>
    {
    }

    public class CountryQueryResponse : Response
    {
        public string CountryName { get; set; }
        public List<CityQueryResponse> Cities { get; set; }
    }

    public class CountryQueryHandler : Service<Country>, IRequestHandler<CountryQueryRequest, IQueryable<CountryQueryResponse>>
    {
        protected override IQueryable<Country> Query(bool isNoTracking = true)
        {
            return base.Query(isNoTracking).Include(country => country.Cities).OrderBy(country => country.CountryName);
        }

        public CountryQueryHandler(DbContext db) : base(db)
        {
        }

        public Task<IQueryable<CountryQueryResponse>> Handle(CountryQueryRequest request, CancellationToken cancellationToken)
        {
            var query = Query().Select(country => new CountryQueryResponse
            {
                Id = country.Id,
                Guid = country.Guid,
                CountryName = country.CountryName,
                Cities = country.Cities.OrderBy(city => city.CityName).Select(city => new CityQueryResponse
                {
                    Id = city.Id,
                    Guid = city.Guid,
                    CityName = city.CityName
                }).ToList()
            });

            return Task.FromResult(query);
        }
    }
}