Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update car and oilmark #45

Merged
merged 9 commits into from
Mar 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public async Task<ActionResult<List<OilMarkDto>>> GetAsync([FromQuery] OilMarkQu
return Ok(oilMarks);
}

[HttpGet("{id:int}", Name = "GetOilMarkById")]
public async Task<ActionResult<OilMarkDto>> GetByIdAsync(int id)
[HttpGet("{id:int}", Name = "GetOilMarkByIdAsync")]
public async Task<ActionResult<OilMarkDto>> GetOilMarkByIdAsync(int id)
{
var oilMark = await oilMarkService.GetByIdAsync(id);

Expand All @@ -30,7 +30,7 @@ public async Task<ActionResult<OilMarkDto>> CreateAsync(CreateOilMarkDto oilMark
{
var createdOilMark = await oilMarkService.CreateAsync(oilMark);

return CreatedAtAction("GetOilMarkById", oilMark, new { id = createdOilMark.Id });
return CreatedAtAction(nameof(GetOilMarkByIdAsync), new { id = createdOilMark.Id }, createdOilMark);
}

[HttpPut("{id:int}")]
Expand Down
2 changes: 1 addition & 1 deletion CheckDrive.Api/CheckDrive.Application/DTOs/Car/CarDto.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using CheckDrive.Domain.Enums;
using System;

namespace CheckDrive.Application.DTOs.Car;

public record CarDto(
int Id,
int OilMarkId,
string OilMarkName,
string Model,
string Number,
int ManufacturedYear,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,8 @@ public record CreateCarDto(
string Number,
int ManufacturedYear,
decimal Mileage,
decimal CurrentMonthMileage,
decimal CurrentYearMileage,
decimal MonthlyDistanceLimit,
decimal YearlyDistanceLimit,
decimal CurrentMonthFuelConsumption,
decimal CurrentYearFuelConsumption,
decimal MonthlyFuelConsumptionLimit,
decimal YearlyFuelConsumptionLimit,
decimal AverageFuelConsumption,
Expand Down
25 changes: 13 additions & 12 deletions CheckDrive.Api/CheckDrive.Application/Mappings/CarMappings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,39 @@ public CarMappings()
CreateMap<Car, CarDto>()
.ForCtorParam(nameof(CarDto.Id), cfg => cfg.MapFrom(c => c.Id))
.ForCtorParam(nameof(CarDto.OilMarkId), cfg => cfg.MapFrom(c => c.OilMarkId))
.ForCtorParam(nameof(CarDto.OilMarkName), cfg => cfg.MapFrom(c => c.OilMark!.Name))
.ForCtorParam(nameof(CarDto.Model), cfg => cfg.MapFrom(c => c.Model))
.ForCtorParam(nameof(CarDto.Number), cfg => cfg.MapFrom(c => c.Number))
.ForCtorParam(nameof(CarDto.ManufacturedYear), cfg => cfg.MapFrom(c => c.ManufacturedYear))
.ForCtorParam(nameof(CarDto.Mileage), cfg => cfg.MapFrom(c => c.Mileage))
.ForCtorParam(nameof(CarDto.CurrentMonthFuelConsumption), cfg => cfg.MapFrom(c => c.UsageSummary.CurrentMonthFuelConsumption))
.ForCtorParam(nameof(CarDto.CurrentYearFuelConsumption), cfg => cfg.MapFrom(c => c.UsageSummary.CurrentYearFuelConsumption))
.ForCtorParam(nameof(CarDto.CurrentMonthFuelConsumption), cfg => cfg.MapFrom(c => c.UsageSummary != null ? c.UsageSummary.CurrentMonthFuelConsumption : default))
.ForCtorParam(nameof(CarDto.CurrentYearFuelConsumption), cfg => cfg.MapFrom(c => c.UsageSummary != null ? c.UsageSummary.CurrentYearFuelConsumption : default))
.ForCtorParam(nameof(CarDto.MonthlyFuelConsumptionLimit), cfg => cfg.MapFrom(c => c.Limits.MonthlyFuelConsumptionLimit))
.ForCtorParam(nameof(CarDto.YearlyFuelConsumptionLimit), cfg => cfg.MapFrom(c => c.Limits.YearlyFuelConsumptionLimit))
.ForCtorParam(nameof(CarDto.CurrentMonthMileage), cfg => cfg.MapFrom(c => c.UsageSummary.CurrentMonthDistance))
.ForCtorParam(nameof(CarDto.CurrentYearMileage), cfg => cfg.MapFrom(c => c.UsageSummary.CurrentYearDistance))
.ForCtorParam(nameof(CarDto.CurrentMonthMileage), cfg => cfg.MapFrom(c => c.UsageSummary != null ? c.UsageSummary.CurrentMonthDistance : default))
.ForCtorParam(nameof(CarDto.CurrentYearMileage), cfg => cfg.MapFrom(c => c.UsageSummary != null ? c.UsageSummary.CurrentYearDistance : default))
.ForCtorParam(nameof(CarDto.MonthlyDistanceLimit), cfg => cfg.MapFrom(c => c.Limits.MonthlyDistanceLimit))
.ForCtorParam(nameof(CarDto.YearlyDistanceLimit), cfg => cfg.MapFrom(c => c.Limits.YearlyDistanceLimit));

CreateMap<CreateCarDto, Car>()
.ForPath(dest => dest.OilMarkId, opt => opt.MapFrom(src => src.OilMarkId))
.ForPath(dest => dest.UsageSummary.CurrentMonthDistance, opt => opt.MapFrom(src => src.CurrentYearMileage))
.ForPath(dest => dest.UsageSummary.CurrentYearDistance, opt => opt.MapFrom(src => src.CurrentYearMileage))
.ForPath(dest => dest.Limits.MonthlyDistanceLimit, opt => opt.MapFrom(src => src.MonthlyDistanceLimit))
.ForPath(dest => dest.Limits.YearlyDistanceLimit, opt => opt.MapFrom(src => src.YearlyDistanceLimit))
.ForPath(dest => dest.UsageSummary.CurrentMonthFuelConsumption, opt => opt.MapFrom(src => src.CurrentMonthFuelConsumption))
.ForPath(dest => dest.UsageSummary.CurrentYearFuelConsumption, opt => opt.MapFrom(src => src.CurrentYearFuelConsumption))
.ForPath(dest => dest.Limits.MonthlyFuelConsumptionLimit, opt => opt.MapFrom(src => src.MonthlyFuelConsumptionLimit))
.ForPath(dest => dest.Limits.YearlyFuelConsumptionLimit, opt => opt.MapFrom(src => src.YearlyFuelConsumptionLimit));

CreateMap<UpdateCarDto, Car>()
.ForPath(dest => dest.OilMarkId, opt => opt.MapFrom(src => src.OilMarkId))
.ForPath(dest => dest.UsageSummary.CurrentMonthDistance, opt => opt.MapFrom(src => src.CurrentYearMileage))
.ForPath(dest => dest.UsageSummary.CurrentYearDistance, opt => opt.MapFrom(src => src.CurrentYearMileage))
.ForPath(dest => dest.UsageSummary, opt => opt.MapFrom(src =>
new CarUsageSummary
{
CurrentMonthDistance = src.CurrentMonthMileage,
CurrentYearDistance = src.CurrentYearMileage,
CurrentMonthFuelConsumption = src.CurrentMonthFuelConsumption,
CurrentYearFuelConsumption = src.CurrentYearFuelConsumption
}))
.ForPath(dest => dest.Limits.MonthlyDistanceLimit, opt => opt.MapFrom(src => src.MonthlyDistanceLimit))
.ForPath(dest => dest.Limits.YearlyDistanceLimit, opt => opt.MapFrom(src => src.YearlyDistanceLimit))
.ForPath(dest => dest.UsageSummary.CurrentMonthFuelConsumption, opt => opt.MapFrom(src => src.CurrentMonthFuelConsumption))
.ForPath(dest => dest.UsageSummary.CurrentYearFuelConsumption, opt => opt.MapFrom(src => src.CurrentYearFuelConsumption))
.ForPath(dest => dest.Limits.MonthlyFuelConsumptionLimit, opt => opt.MapFrom(src => src.MonthlyFuelConsumptionLimit))
.ForPath(dest => dest.Limits.YearlyFuelConsumptionLimit, opt => opt.MapFrom(src => src.YearlyFuelConsumptionLimit));
}
Expand Down
7 changes: 5 additions & 2 deletions CheckDrive.Api/CheckDrive.Application/Services/CarService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public async Task<List<CarDto>> GetAllAsync(CarQueryParameters queryParameters)
ArgumentNullException.ThrowIfNull(queryParameters);

var query = context.Cars
.Include(c => c.OilMark)
.AsNoTracking()
.AsQueryable();

Expand All @@ -52,7 +53,9 @@ public async Task<List<CarDto>> GetAllAsync(CarQueryParameters queryParameters)

public async Task<CarDto> GetByIdAsync(int id)
{
var car = await context.Cars.FirstOrDefaultAsync(x => x.Id == id);
var car = await context.Cars
.Include(c => c.OilMark)
.FirstOrDefaultAsync(x => x.Id == id);

if (car is null)
{
Expand Down Expand Up @@ -187,4 +190,4 @@ private static bool IsCarExceededYearlyLimit(Car car)

return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,6 @@ public CreateCarValidator()
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid mileage valule {x.Mileage}.");

RuleFor(x => x.CurrentMonthMileage)
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid current month mileage: {x.CurrentMonthMileage}.");

RuleFor(x => x.CurrentYearMileage)
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid current year mileage: {x.CurrentYearMileage}.");

RuleFor(x => x.MonthlyDistanceLimit)
.GreaterThan(0)
.WithMessage(x => $"Invalid monthly distance limit: {x.MonthlyDistanceLimit}.");
Expand All @@ -40,14 +32,6 @@ public CreateCarValidator()
.GreaterThan(0)
.WithMessage(x => $"Invalid yearly distance limit: {x.YearlyDistanceLimit}.");

RuleFor(x => x.CurrentMonthFuelConsumption)
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid current month fuel consumption: {x.CurrentMonthFuelConsumption}.");

RuleFor(x => x.CurrentYearMileage)
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid current year fuel consumption: {x.CurrentYearFuelConsumption}.");

RuleFor(x => x.MonthlyFuelConsumptionLimit)
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid monthly fuel consumption limit: {x.MonthlyFuelConsumptionLimit}.");
Expand All @@ -67,6 +51,5 @@ public CreateCarValidator()
RuleFor(x => x.RemainingFuel)
.GreaterThanOrEqualTo(0)
.WithMessage(x => $"Invalid remaining fuel value: {x.RemainingFuel}.");

}
}
}
7 changes: 4 additions & 3 deletions CheckDrive.Api/CheckDrive.Domain/Entities/Car.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class Car : EntityBase
public CarStatus Status { get; set; }

public required CarLimits Limits { get; set; }
public required CarUsageSummary UsageSummary { get; set; }
public CarUsageSummary? UsageSummary { get; set; }

public int? OilMarkId { get; set; }
public virtual OilMark? OilMark { get; set; }
Expand All @@ -25,6 +25,7 @@ public class Car : EntityBase

public Car()
{
Handovers = [];
Handovers = new HashSet<MechanicHandover>();
AssignedDrivers = new HashSet<Driver>();
}
}
}
Loading
Loading