Files
vegasco/src/Vegasco.Server.Api/Consumptions/GetConsumptions.cs

54 lines
1.4 KiB
C#
Raw Normal View History

using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Vegasco.Server.Api.Persistence;
2024-08-23 18:02:18 +02:00
namespace Vegasco.Server.Api.Consumptions;
2024-08-23 18:02:18 +02:00
public static class GetConsumptions
{
public class ApiResponse
{
public IEnumerable<ResponseDto> Consumptions { get; set; } = [];
}
2024-08-23 18:02:18 +02:00
public record ResponseDto(
Guid Id,
DateTimeOffset DateTime,
double Distance,
double Amount,
Guid CarId);
2024-08-23 18:02:18 +02:00
public class Request
{
[FromQuery(Name = "page")] public int? Page { get; set; }
[FromQuery(Name = "pageSize")] public int? PageSize { get; set; }
}
2024-08-23 18:02:18 +02:00
public static RouteHandlerBuilder MapEndpoint(IEndpointRouteBuilder builder)
{
return builder
.MapGet("consumptions", Endpoint)
.WithDescription("Returns all consumption entries")
2025-06-16 20:28:37 +02:00
.WithTags("Consumptions")
.Produces<ApiResponse>();
}
private static async Task<Ok<ApiResponse>> Endpoint(
[AsParameters] Request request,
ApplicationDbContext dbContext,
CancellationToken cancellationToken)
{
List<ResponseDto> consumptions = await dbContext.Consumptions
.OrderByDescending(x => x.DateTime)
.Select(x =>
2025-06-22 11:07:02 +02:00
new ResponseDto(x.Id.Value, x.DateTime, x.Distance, x.Amount, x.CarId.Value))
.ToListAsync(cancellationToken);
2025-06-16 20:28:37 +02:00
ApiResponse apiResponse = new()
{
Consumptions = consumptions
};
return TypedResults.Ok(apiResponse);
}
2024-08-23 18:02:18 +02:00
}