73 lines
3.1 KiB
C#
73 lines
3.1 KiB
C#
using Distribution.Data;
|
|
using Distribution.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Distribution.Features.Ride;
|
|
|
|
public class RideRepository(AppDBContext context) : IRideRepository
|
|
{
|
|
public async Task<DeliveryRun?> GetByIdAsync(Guid id) =>
|
|
await context.DeliveryRuns
|
|
.Include(r => r.Vehicle)
|
|
.Include(r => r.DriverProfile).ThenInclude(dp => dp.User)
|
|
.Include(r => r.Route)
|
|
.Include(r => r.SourceWarehouse)
|
|
.FirstOrDefaultAsync(r => r.Id == id);
|
|
|
|
public async Task<List<DeliveryRun>> GetAllAsync(RideStatus? status, RideType? type, Guid? driverProfileId, Guid? vehicleId, int page, int pageSize) =>
|
|
await context.DeliveryRuns
|
|
.Include(r => r.Vehicle)
|
|
.Include(r => r.DriverProfile).ThenInclude(dp => dp.User)
|
|
.Include(r => r.Route)
|
|
.Include(r => r.SourceWarehouse)
|
|
.Where(r =>
|
|
(status == null || r.Status == status) &&
|
|
(type == null || r.RideType == type) &&
|
|
(driverProfileId == null || r.FK_DriverProfileId == driverProfileId) &&
|
|
(vehicleId == null || r.FK_VehicleId == vehicleId))
|
|
.Skip((page - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
|
|
public async Task<int> GetCountAsync(RideStatus? status, RideType? type, Guid? driverProfileId, Guid? vehicleId) =>
|
|
await context.DeliveryRuns
|
|
.CountAsync(r =>
|
|
(status == null || r.Status == status) &&
|
|
(type == null || r.RideType == type) &&
|
|
(driverProfileId == null || r.FK_DriverProfileId == driverProfileId) &&
|
|
(vehicleId == null || r.FK_VehicleId == vehicleId));
|
|
|
|
public async Task<bool> HasOpenOrActiveRideForVehicleAsync(Guid vehicleId, Guid? excludeRideId = null) =>
|
|
await context.DeliveryRuns.AnyAsync(r =>
|
|
r.FK_VehicleId == vehicleId &&
|
|
r.Id != excludeRideId &&
|
|
(r.Status == RideStatus.Open || r.Status == RideStatus.Active));
|
|
|
|
public async Task<List<DeliveryRun>> GetActiveRidesAsync(Guid? excludeRideId = null) =>
|
|
await context.DeliveryRuns
|
|
.Include(r => r.Vehicle)
|
|
.Include(r => r.DriverProfile).ThenInclude(dp => dp.User)
|
|
.Include(r => r.Route)
|
|
.Where(r => r.Id != excludeRideId && r.Status == RideStatus.Active)
|
|
.ToListAsync();
|
|
|
|
public async Task<List<OrderSummaryModel>> GetActiveOrdersByRouteIdAsync(Guid routeId) =>
|
|
await context.Orders
|
|
.Include(o => o.Store)
|
|
.Where(o => o.IsActive && o.Store.FK_RouteId == routeId)
|
|
.OrderByDescending(o => o.OrderDate)
|
|
.Select(o => new OrderSummaryModel(
|
|
o.Id,
|
|
o.FK_StoreId,
|
|
o.Store.StoreName,
|
|
o.OrderDate,
|
|
o.TotalAmount))
|
|
.ToListAsync();
|
|
|
|
public async Task AddAsync(DeliveryRun ride) =>
|
|
await context.DeliveryRuns.AddAsync(ride);
|
|
|
|
public void Update(DeliveryRun ride) =>
|
|
context.DeliveryRuns.Update(ride);
|
|
}
|