Include necessary info directly in get consumption entries response dto
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-06-22 11:51:38 +02:00
parent a997a3b825
commit cb3c8c0d18
10 changed files with 114 additions and 107 deletions

View File

@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Vegasco.Server.Api.Cars;
using Vegasco.Server.Api.Persistence;
namespace Vegasco.Server.Api.Consumptions;
@@ -17,7 +18,18 @@ public static class GetConsumptions
DateTimeOffset DateTime,
double Distance,
double Amount,
Guid CarId);
CarDto Car,
double? LiterPer100Km);
public record CarDto(
Guid Id,
string Name)
{
public static CarDto FromCar(Car car)
{
return new CarDto(car.Id.Value, car.Name);
}
}
public class Request
{
@@ -39,16 +51,37 @@ public static class GetConsumptions
ApplicationDbContext dbContext,
CancellationToken cancellationToken)
{
List<ResponseDto> consumptions = await dbContext.Consumptions
List<Consumption> consumptions = await dbContext.Consumptions
.OrderByDescending(x => x.DateTime)
.Select(x =>
new ResponseDto(x.Id.Value, x.DateTime, x.Distance, x.Amount, x.CarId.Value))
.Include(x => x.Car)
.ToListAsync(cancellationToken);
ApiResponse apiResponse = new()
List<ResponseDto> responses = [];
for (int i = 0; i < consumptions.Count; i++)
{
Consumptions = consumptions
};
Consumption consumption = consumptions[i];
double? literPer100Km = null;
bool isLast = i == consumptions.Count - 1;
if (!isLast)
{
Consumption previousConsumption = consumptions[i + 1];
double distanceDiff = consumption.Distance - previousConsumption.Distance;
literPer100Km = consumption.Amount / (distanceDiff / 100);
}
responses.Add(new ResponseDto(
consumption.Id.Value,
consumption.DateTime,
consumption.Distance,
consumption.Amount,
CarDto.FromCar(consumption.Car),
literPer100Km));
}
ApiResponse apiResponse = new() { Consumptions = responses };
return TypedResults.Ok(apiResponse);
}
}