Include necessary info directly in get consumption entries response dto
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user