using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Vegasco.Server.Api.Persistence; namespace Vegasco.Server.Api.Cars; public static class GetCars { public class ApiResponse { public IEnumerable Cars { get; set; } = []; } public record ResponseDto(Guid Id, string Name); public class Request { [FromQuery(Name = "page")] public int? Page { get; set; } [FromQuery(Name = "pageSize")] public int? PageSize { get; set; } } public static RouteHandlerBuilder MapEndpoint(IEndpointRouteBuilder builder) { return builder .MapGet("cars", Endpoint) .WithDescription("Returns all cars") .WithTags("Cars") .Produces(); } private static async Task Endpoint( [AsParameters] Request request, ApplicationDbContext dbContext, CancellationToken cancellationToken) { List cars = await dbContext.Cars .Select(x => new ResponseDto(x.Id.Value, x.Name)) .ToListAsync(cancellationToken); var response = new ApiResponse { Cars = cars }; return TypedResults.Ok(response); } }