using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Vegasco.Server.Api.Persistence; namespace Vegasco.Server.Api.Consumptions; public static class GetConsumptions { public class ApiResponse { public IEnumerable Consumptions { get; set; } = []; } public record ResponseDto( Guid Id, DateTimeOffset DateTime, double Distance, double Amount, bool IgnoreInCalculation, Guid CarId); 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("consumptions", Endpoint) .WithDescription("Returns all consumption entries") .WithTags("Consumptions"); } private static async Task> Endpoint( [AsParameters] Request request, ApplicationDbContext dbContext, CancellationToken cancellationToken) { List consumptions = await dbContext.Consumptions .Select(x => new ResponseDto(x.Id.Value, x.DateTime, x.Distance, x.Amount, x.IgnoreInCalculation, x.CarId.Value)) .ToListAsync(cancellationToken); var apiResponse = new ApiResponse { Consumptions = consumptions }; return TypedResults.Ok(apiResponse); } }