diff --git a/Server/Configurations/MapperInitializer.cs b/Server/Configurations/MapperInitializer.cs
index 82623bb..3be0b46 100644
--- a/Server/Configurations/MapperInitializer.cs
+++ b/Server/Configurations/MapperInitializer.cs
@@ -36,22 +36,50 @@ public class MapperInitializer : Profile
CreateMap
().ReverseMap();
CreateMap().ReverseMap();
- CreateMap().ReverseMap();
+ CreateMap()
+ .ForMember(d => d.AddressName, opt => opt.MapFrom(src => src.Address.Name))
+ .ForMember(d => d.CityName, opt => opt.MapFrom(src => src.Address.City.Name))
+ .ForMember(d => d.StateName, opt => opt.MapFrom(src => src.Address.City.State.Name))
+ .ForMember(d => d.CountryName, opt => opt.MapFrom(src => src.Address.City.State.Country.Name))
+ .ForMember(d => d.FullName, opt => opt.MapFrom(src => src.Address.GetFullName()))
+ .ForMember(d => d.Latitude, opt => opt.MapFrom(src => src.Address.Latitude))
+ .ForMember(d => d.Longitude, opt => opt.MapFrom(src => src.Address.Longitude));
+ CreateMap();
CreateMap().ReverseMap();
CreateMap().ReverseMap();
- CreateMap().ReverseMap();
- CreateMap().ReverseMap();
CreateMap().ReverseMap();
CreateMap().ReverseMap();
CreateMap().ReverseMap();
- CreateMap().ReverseMap();
- CreateMap().ReverseMap();
- CreateMap().ReverseMap();
- CreateMap();
+ CreateMap()
+ .ForMember(d => d.Addresses,
+ opt => opt.MapFrom(src => src.VehicleEnrollment.Route.RouteAddresses.Select(ra => ra.Address)));
- CreateMap().ReverseMap();
+ CreateMap()
+ .ForMember(d => d.DepartureAddressName,
+ opt => opt.MapFrom(src => src.Tickets.First().GetDepartureAddress().Name))
+ .ForMember(d => d.DepartureCityName,
+ opt => opt.MapFrom(src => src.Tickets.First().GetDepartureAddress().City.Name))
+ .ForMember(d => d.DepartureStateName,
+ opt => opt.MapFrom(src => src.Tickets.First().GetDepartureAddress().City.State.Name))
+ .ForMember(d => d.DepartureCountryName,
+ opt => opt.MapFrom(src => src.Tickets.First().GetDepartureAddress().City.State.Country.Name))
+ .ForMember(d => d.DepartureFullName,
+ opt => opt.MapFrom(src => src.Tickets.First().GetDepartureAddress().GetFullName()))
+ .ForMember(d => d.DepartureDateTime,
+ opt => opt.MapFrom(src => src.Tickets.First().GetDepartureTime()))
+ .ForMember(d => d.ArrivalAddressName,
+ opt => opt.MapFrom(src => src.Tickets.Last().GetArrivalAddress().Name))
+ .ForMember(d => d.ArrivalCityName,
+ opt => opt.MapFrom(src => src.Tickets.Last().GetArrivalAddress().City.Name))
+ .ForMember(d => d.ArrivalStateName,
+ opt => opt.MapFrom(src => src.Tickets.Last().GetArrivalAddress().City.State.Name))
+ .ForMember(d => d.ArrivalCountryName,
+ opt => opt.MapFrom(src => src.Tickets.Last().GetArrivalAddress().City.State.Country.Name))
+ .ForMember(d => d.ArrivalFullName,
+ opt =>opt.MapFrom(src => src.Tickets.Last().GetArrivalAddress().GetFullName()))
+ .ForMember(d => d.ArrivalDateTime, opt => opt.MapFrom(src => src.Tickets.Last().GetArrivalTime()));
CreateMap().ReverseMap();
CreateMap().ReverseMap();
@@ -83,9 +111,6 @@ public class MapperInitializer : Profile
CreateMap().ReverseMap();
CreateMap().ReverseMap();
- CreateMap().ReverseMap();
- CreateMap().ReverseMap();
- CreateMap().ReverseMap();
CreateMap().ReverseMap();
CreateMap().ReverseMap();
}
diff --git a/Server/Controllers/RouteAddressController.cs b/Server/Controllers/RouteAddressController.cs
deleted file mode 100644
index 0172fdb..0000000
--- a/Server/Controllers/RouteAddressController.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using Microsoft.AspNetCore.Mvc;
-using Newtonsoft.Json;
-using Server.Services;
-using SharedModels.DataTransferObjects.Model;
-using SharedModels.QueryParameters.Objects;
-
-namespace Server.Controllers;
-
-[Route("api/routeAddresses")]
-[ApiController]
-public class RouteAddressController : ControllerBase
-{
- private readonly IRouteAddressManagementService _routeAddressManagementService;
-
- public RouteAddressController(IRouteAddressManagementService routeAddressManagementService)
- {
- _routeAddressManagementService = routeAddressManagementService;
- }
-
- [HttpPost]
- public async Task AddRouteAddress(CreateRouteAddressDto routeAddress)
- {
- var result = await _routeAddressManagementService.AddRouteAddress(routeAddress);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- return CreatedAtAction(nameof(GetRouteAddress), new {id = result.routeAddress.Id}, result.routeAddress);
- }
-
- [HttpGet]
- public async Task GetRouteAddresses([FromQuery] RouteAddressParameters parameters)
- {
- var result = await _routeAddressManagementService.GetRouteAddresses(parameters);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(result.pagingMetadata));
-
- return Ok(result.routeAddresses);
- }
-
- [HttpGet("{id}")]
- public async Task GetRouteAddress(int id, [FromQuery] string? fields)
- {
- var result = await _routeAddressManagementService.GetRouteAddress(id, fields);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- return Ok(result.routeAddress);
- }
-
- [HttpPut("{id}")]
- public async Task UpdateRouteAddress(int id, UpdateRouteAddressDto routeAddress)
- {
- var result = await _routeAddressManagementService.UpdateRouteAddress(routeAddress);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- return Ok(result.routeAddress);
- }
-
- [HttpDelete("{id}")]
- public async Task DeleteRouteAddress(int id)
- {
- var result = await _routeAddressManagementService.DeleteRouteAddress(id);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- return NoContent();
- }
-}
\ No newline at end of file
diff --git a/Server/Controllers/RouteController.cs b/Server/Controllers/RouteController.cs
index 4644141..458440f 100644
--- a/Server/Controllers/RouteController.cs
+++ b/Server/Controllers/RouteController.cs
@@ -33,20 +33,6 @@ public class RouteController : ControllerBase
return CreatedAtAction(nameof(GetRoute), new {id = result.route.Id}, result.route);
}
- [Authorize(Policy = "CompanyAccess")]
- [HttpPost("withAddresses")]
- public async Task AddRouteWithAddresses(CreateRouteWithAddressesDto route)
- {
- var result = await _routeManagementService.AddRouteWithAddresses(route);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- return CreatedAtAction(nameof(GetRoute), new {id = result.route.Id}, result.route);
- }
-
[Authorize(Policy = "DriverAccess")]
[HttpGet]
public async Task GetRoutes([FromQuery] RouteParameters parameters)
@@ -63,31 +49,10 @@ public class RouteController : ControllerBase
return Ok(result.routes);
}
- [Authorize(Policy = "DriverAccess")]
- [HttpGet("withAddresses")]
- public async Task GetRouteWithAddresses([FromQuery] RouteWithAddressesParameters parameters)
- {
- var result = await _routeManagementService.GetRoutesWithAddresses(parameters);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(result.pagingMetadata));
-
- return Ok(result.routes);
- }
-
[Authorize(Policy = "DriverAccess")]
[HttpGet("{id}")]
public async Task GetRoute(int id, [FromQuery] string? fields)
{
- if (!await _routeManagementService.IsRouteExists(id))
- {
- return NotFound();
- }
-
var result = await _routeManagementService.GetRoute(id, fields);
if (!result.isSucceed)
@@ -97,36 +62,12 @@ public class RouteController : ControllerBase
return Ok(result.route);
}
-
- [Authorize(Policy = "DriverAccess")]
- [HttpGet("withAddresses/{id}")]
- public async Task GetRouteWithAddresses(int id, [FromQuery] string? fields)
- {
- if (!await _routeManagementService.IsRouteExists(id))
- {
- return NotFound();
- }
-
- var result = await _routeManagementService.GetRouteWithAddresses(id, fields);
-
- if (!result.isSucceed)
- {
- return result.actionResult;
- }
-
- return Ok(result.route);
- }
[Authorize(Policy = "CompanyAccess")]
[HttpPut("{id}")]
public async Task UpdateRoute(int id, UpdateRouteDto route)
{
- if (id != route.Id)
- {
- return BadRequest();
- }
-
- var result = await _routeManagementService.UpdateRoute(route);
+ var result = await _routeManagementService.UpdateRoute(id, route);
if (!result.isSucceed)
{
@@ -140,11 +81,6 @@ public class RouteController : ControllerBase
[HttpDelete("{id}")]
public async Task DeleteRoute(int id)
{
- if (!await _routeManagementService.IsRouteExists(id))
- {
- return NotFound();
- }
-
var result = await _routeManagementService.DeleteRoute(id);
if (!result.isSucceed)
diff --git a/Server/Program.cs b/Server/Program.cs
index c0be134..a3894ad 100644
--- a/Server/Program.cs
+++ b/Server/Program.cs
@@ -120,7 +120,6 @@ services.AddScoped();
services.AddScoped();
services.AddScoped();
services.AddScoped();
-services.AddScoped();
services.AddScoped();
services.AddScoped();
@@ -135,7 +134,7 @@ services.AddScoped, DataShaper>();
services.AddScoped, DataShaper>();
services.AddScoped, DataShaper>();
services.AddScoped, DataShaper>();
-services.AddScoped, DataShaper>();
+services.AddScoped, DataShaper>();
services.AddScoped, DataShaper>();
services.AddScoped, DataShaper>();
services.AddScoped, DataShaper>();
diff --git a/Server/Services/IRouteAddressManagementService.cs b/Server/Services/IRouteAddressManagementService.cs
deleted file mode 100644
index d1b7b79..0000000
--- a/Server/Services/IRouteAddressManagementService.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System.Dynamic;
-using Microsoft.AspNetCore.Mvc;
-using SharedModels.DataTransferObjects.Model;
-using SharedModels.QueryParameters;
-using SharedModels.QueryParameters.Objects;
-
-namespace Server.Services;
-
-public interface IRouteAddressManagementService
-{
- Task<(bool isSucceed, IActionResult? actionResult, RouteAddressDto routeAddress)> AddRouteAddress(CreateRouteAddressDto createRouteAddressDto);
- Task<(bool isSucceed, IActionResult? actionResult, IEnumerable routeAddresses,
- PagingMetadata pagingMetadata)> GetRouteAddresses(RouteAddressParameters parameters);
- Task<(bool isSucceed, IActionResult? actionResult, ExpandoObject routeAddress)> GetRouteAddress(int id, string? fields);
- Task<(bool isSucceed, IActionResult? actionResult, RouteAddressDto routeAddress)> UpdateRouteAddress(UpdateRouteAddressDto updateRouteAddressDto);
- Task<(bool isSucceed, IActionResult? actionResult)> DeleteRouteAddress(int id);
- Task IsRouteAddressExists(int id);
-}
\ No newline at end of file
diff --git a/Server/Services/IRouteManagementService.cs b/Server/Services/IRouteManagementService.cs
index 4a8e952..0479c32 100644
--- a/Server/Services/IRouteManagementService.cs
+++ b/Server/Services/IRouteManagementService.cs
@@ -8,15 +8,17 @@ namespace Server.Services;
public interface IRouteManagementService
{
- Task<(bool isSucceed, IActionResult? actionResult, RouteDto route)> AddRoute(CreateRouteDto createRouteDto);
- Task<(bool isSucceed, IActionResult? actionResult, RouteWithAddressesDto route)> AddRouteWithAddresses(CreateRouteWithAddressesDto createRouteWithAddressesDto);
- Task<(bool isSucceed, IActionResult? actionResult, IEnumerable routes,
- PagingMetadata pagingMetadata)> GetRoutes(RouteParameters parameters);
- Task<(bool isSucceed, IActionResult? actionResult, IEnumerable routes,
- PagingMetadata pagingMetadata)> GetRoutesWithAddresses(RouteWithAddressesParameters parameters);
- Task<(bool isSucceed, IActionResult? actionResult, ExpandoObject route)> GetRoute(int id, string? fields);
- Task<(bool isSucceed, IActionResult? actionResult, ExpandoObject route)> GetRouteWithAddresses(int id, string? fields);
- Task<(bool isSucceed, IActionResult? actionResult, UpdateRouteDto route)> UpdateRoute(UpdateRouteDto updateRouteDto);
- Task<(bool isSucceed, IActionResult? actionResult)> DeleteRoute(int id);
- Task IsRouteExists(int id);
+ Task<(bool isSucceed, IActionResult actionResult, RouteDto route)>
+ AddRoute(CreateRouteDto createRouteDto);
+
+ Task<(bool isSucceed, IActionResult actionResult, IEnumerable routes, PagingMetadata pagingMetadata)>
+ GetRoutes(RouteParameters parameters);
+
+ Task<(bool isSucceed, IActionResult actionResult, ExpandoObject route)>
+ GetRoute(int id, string? fields);
+
+ Task<(bool isSucceed, IActionResult actionResult, UpdateRouteDto route)>
+ UpdateRoute(int id, UpdateRouteDto updateRouteDto);
+
+ Task<(bool isSucceed, IActionResult actionResult)> DeleteRoute(int id);
}
diff --git a/Server/Services/RouteAddressManagementService.cs b/Server/Services/RouteAddressManagementService.cs
deleted file mode 100644
index 7be22b9..0000000
--- a/Server/Services/RouteAddressManagementService.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-using System.Dynamic;
-using AutoMapper;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.EntityFrameworkCore;
-using Server.Data;
-using Server.Helpers;
-using Server.Models;
-using SharedModels.DataTransferObjects.Model;
-using SharedModels.QueryParameters;
-using SharedModels.QueryParameters.Objects;
-
-namespace Server.Services;
-
-public class RouteAddressManagementService : IRouteAddressManagementService
-{
- private readonly ApplicationDbContext _dbContext;
- private readonly IMapper _mapper;
- private readonly ISortHelper _routeAddressSortHelper;
- private readonly IDataShaper _routeAddressDataShaper;
- private readonly IPager _pager;
-
- public RouteAddressManagementService(ApplicationDbContext dbContext,
- IMapper mapper, ISortHelper routeAddressSortHelper,
- IDataShaper routeAddressDataShaper, IPager pager)
- {
- _dbContext = dbContext;
- _mapper = mapper;
- _routeAddressSortHelper = routeAddressSortHelper;
- _routeAddressDataShaper = routeAddressDataShaper;
- _pager = pager;
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, RouteAddressDto routeAddress)> AddRouteAddress(CreateRouteAddressDto createRouteAddressDto)
- {
- var routeAddress = _mapper.Map(createRouteAddressDto);
-
- await _dbContext.RouteAddresses.AddAsync(routeAddress);
- await _dbContext.SaveChangesAsync();
-
- return (true, null, _mapper.Map(routeAddress));
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, IEnumerable routeAddresses,
- PagingMetadata pagingMetadata)> GetRouteAddresses(RouteAddressParameters parameters)
- {
- var dbRouteAddresses = _dbContext.RouteAddresses
- .Include(ra => ra.Route)
- .Include(ra => ra.Address)
- .ThenInclude(a => a.City).ThenInclude(c => c.State)
- .ThenInclude(s => s.Country)
- .AsQueryable();
-
- FilterByRouteAddressRouteId(ref dbRouteAddresses, parameters.RouteId);
- FilterByRouteAddressAddressId(ref dbRouteAddresses, parameters.AddressId);
-
- var routeAddressDtos = _mapper.ProjectTo(dbRouteAddresses);
- var shapedData = _routeAddressDataShaper.ShapeData(routeAddressDtos, parameters.Fields).AsQueryable();
-
- try
- {
- shapedData = _routeAddressSortHelper.ApplySort(shapedData, parameters.Sort);
- }
- catch (Exception)
- {
- return (false, new BadRequestObjectResult("Invalid sorting string"), null!, null!);
- }
-
- var pagingMetadata = _pager.ApplyPaging(ref shapedData, parameters.PageNumber,
- parameters.PageSize);
-
- return (true, null, shapedData, pagingMetadata);
-
- void FilterByRouteAddressRouteId(ref IQueryable routeAddresses,
- int? routeId)
- {
- if (!routeAddresses.Any() || routeId == null)
- {
- return;
- }
-
- routeAddresses = routeAddresses.Where(ra => ra.RouteId == routeId);
- }
-
- void FilterByRouteAddressAddressId(ref IQueryable routeAddresses,
- int? addressId)
- {
- if (!routeAddresses.Any() || addressId == null)
- {
- return;
- }
-
- routeAddresses = routeAddresses.Where(ra => ra.AddressId == addressId);
- }
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, ExpandoObject routeAddress)> GetRouteAddress(int id, string? fields)
- {
- if (!await IsRouteAddressExists(id))
- {
- return (false, new NotFoundResult(), null!);
- }
-
- var dbRouteAddress = await _dbContext.RouteAddresses.Where(ra => ra.Id == id)
- .Include(ra => ra.Route)
- .Include(ra => ra.Address)
- .ThenInclude(a => a.City).ThenInclude(c => c.State)
- .ThenInclude(s => s.Country)
- .FirstAsync();
-
- if (String.IsNullOrWhiteSpace(fields))
- {
- fields = RouteAddressParameters.DefaultFields;
- }
-
- var routeAddressDto = _mapper.Map(dbRouteAddress);
- var shapedData = _routeAddressDataShaper.ShapeData(routeAddressDto, fields);
-
- return (true, null, shapedData);
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, RouteAddressDto routeAddress)> UpdateRouteAddress(UpdateRouteAddressDto updateRouteAddressDto)
- {
- var routeAddress = _mapper.Map(updateRouteAddressDto);
- _dbContext.Entry(routeAddress).State = EntityState.Modified;
-
- try
- {
- await _dbContext.SaveChangesAsync();
- }
- catch (DbUpdateConcurrencyException)
- {
- if (!await IsRouteAddressExists(updateRouteAddressDto.Id))
- {
- return (false, new NotFoundResult(), null!);
- }
-
- throw;
- }
-
- var dbRouteAddress = await _dbContext.RouteAddresses.FirstAsync(ra => ra.Id == routeAddress.Id);
-
- return (true, null, _mapper.Map(dbRouteAddress));
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult)> DeleteRouteAddress(int id)
- {
- var dbRouteAddress = await _dbContext.RouteAddresses.FirstOrDefaultAsync(ra => ra.Id == id);
-
- if (dbRouteAddress == null)
- {
- return (false, new NotFoundResult());
- }
-
- _dbContext.RouteAddresses.Remove(dbRouteAddress);
- await _dbContext.SaveChangesAsync();
-
- return (true, null);
- }
-
- public async Task IsRouteAddressExists(int id)
- {
- return await _dbContext.RouteAddresses.AnyAsync(ra => ra.Id == id);
- }
-}
\ No newline at end of file
diff --git a/Server/Services/RouteManagementService.cs b/Server/Services/RouteManagementService.cs
index b90c193..913c289 100644
--- a/Server/Services/RouteManagementService.cs
+++ b/Server/Services/RouteManagementService.cs
@@ -1,6 +1,5 @@
using System.Dynamic;
using AutoMapper;
-using AutoMapper.QueryableExtensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Server.Data;
@@ -18,36 +17,23 @@ public class RouteManagementService : IRouteManagementService
private readonly IMapper _mapper;
private readonly ISortHelper _routeSortHelper;
private readonly IDataShaper _routeDataShaper;
- private readonly IDataShaper _routeWithAddressesDataShaper;
private readonly IPager _pager;
- public RouteManagementService(ApplicationDbContext dbContext,
- IMapper mapper, ISortHelper routeSortHelper,
- IDataShaper routeDataShaper,
- IDataShaper routeWithAddressesDataShaper,
+ public RouteManagementService(ApplicationDbContext dbContext, IMapper mapper,
+ ISortHelper routeSortHelper, IDataShaper routeDataShaper,
IPager pager)
{
_dbContext = dbContext;
_mapper = mapper;
_routeSortHelper = routeSortHelper;
_routeDataShaper = routeDataShaper;
- _routeWithAddressesDataShaper = routeWithAddressesDataShaper;
_pager = pager;
}
- public async Task<(bool isSucceed, IActionResult? actionResult, RouteDto route)> AddRoute(CreateRouteDto createRouteDto)
+ public async Task<(bool isSucceed, IActionResult actionResult, RouteDto route)>
+ AddRoute(CreateRouteDto createRouteDto)
{
var route = _mapper.Map(createRouteDto);
-
- await _dbContext.Routes.AddAsync(route);
- await _dbContext.SaveChangesAsync();
-
- return (true, null, _mapper.Map(route));
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, RouteWithAddressesDto route)> AddRouteWithAddresses(CreateRouteWithAddressesDto createRouteWithAddressesDto)
- {
- var route = _mapper.Map(createRouteWithAddressesDto);
await _dbContext.Routes.AddAsync(route);
await _dbContext.SaveChangesAsync();
@@ -57,61 +43,11 @@ public class RouteManagementService : IRouteManagementService
.ThenInclude(a => a.City).ThenInclude(c => c.State)
.ThenInclude(s => s.Country).FirstAsync(r => r.Id == route.Id);
- return (true, null, _mapper.Map(route));
+ return (true, null!, _mapper.Map(route));
}
- public async Task<(bool isSucceed, IActionResult? actionResult, IEnumerable routes,
- PagingMetadata pagingMetadata)> GetRoutes(RouteParameters parameters)
- {
- var dbRoutes = _dbContext.Routes
- .AsQueryable();
-
- SearchByAllRouteFields(ref dbRoutes, parameters.Search);
- FilterByRouteType(ref dbRoutes, parameters.Type);
-
- var routeDtos = _mapper.ProjectTo(dbRoutes);
- var shapedData = _routeDataShaper.ShapeData(routeDtos, parameters.Fields).AsQueryable();
-
- try
- {
- shapedData = _routeSortHelper.ApplySort(shapedData, parameters.Sort);
- }
- catch (Exception)
- {
- return (false, new BadRequestObjectResult("Invalid sorting string"), null!, null!);
- }
-
- var pagingMetadata = _pager.ApplyPaging(ref shapedData, parameters.PageNumber,
- parameters.PageSize);
-
- return (true, null, shapedData, pagingMetadata);
-
- void SearchByAllRouteFields(ref IQueryable route,
- string? search)
- {
- if (!route.Any() || String.IsNullOrWhiteSpace(search))
- {
- return;
- }
-
- route = route.Where(c =>
- c.Type.ToLower().Contains(search.ToLower()));
- }
-
- void FilterByRouteType(ref IQueryable routes,
- string? type)
- {
- if (!routes.Any() || String.IsNullOrWhiteSpace(type))
- {
- return;
- }
-
- routes = routes.Where(r => r.Type == type);
- }
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, IEnumerable routes,
- PagingMetadata pagingMetadata)> GetRoutesWithAddresses(RouteWithAddressesParameters parameters)
+ public async Task<(bool isSucceed, IActionResult actionResult, IEnumerable routes, PagingMetadata pagingMetadata)>
+ GetRoutes(RouteParameters parameters)
{
var dbRoutes = _dbContext.Routes
.Include(r => r.RouteAddresses.OrderBy(ra => ra.Order))
@@ -121,11 +57,9 @@ public class RouteManagementService : IRouteManagementService
SearchByAllRouteFields(ref dbRoutes, parameters.Search);
FilterByRouteType(ref dbRoutes, parameters.Type);
- FilterByFromAddressName(ref dbRoutes, parameters.FromAddressName);
- FilterByToAddressName(ref dbRoutes, parameters.ToAddressName);
- var routeDtos = _mapper.ProjectTo(dbRoutes);
- var shapedData = _routeWithAddressesDataShaper.ShapeData(routeDtos, parameters.Fields).AsQueryable();
+ var routeDtos = _mapper.ProjectTo(dbRoutes);
+ var shapedData = _routeDataShaper.ShapeData(routeDtos, parameters.Fields).AsQueryable();
try
{
@@ -139,10 +73,9 @@ public class RouteManagementService : IRouteManagementService
var pagingMetadata = _pager.ApplyPaging(ref shapedData, parameters.PageNumber,
parameters.PageSize);
- return (true, null, shapedData, pagingMetadata);
+ return (true, null!, shapedData, pagingMetadata);
- void SearchByAllRouteFields(ref IQueryable route,
- string? search)
+ void SearchByAllRouteFields(ref IQueryable route, string? search)
{
if (!route.Any() || String.IsNullOrWhiteSpace(search))
{
@@ -152,15 +85,11 @@ public class RouteManagementService : IRouteManagementService
// TODO Optimize (remove client evaluation)
route = route.ToArray().Where(r =>
r.Type.ToLower().Contains(search.ToLower()) ||
- r.RouteAddresses.OrderBy(ra => ra.Order).First().Address
- .GetFullName().ToLower().Contains(search.ToLower()) ||
- r.RouteAddresses.OrderBy(ra => ra.Order).Last().Address
- .GetFullName().ToLower().Contains(search.ToLower()))
+ r.RouteAddresses.Any(ra => ra.Address.GetFullName().ToLower().Contains(search.ToLower())))
.AsQueryable();
}
- void FilterByRouteType(ref IQueryable routes,
- string? type)
+ void FilterByRouteType(ref IQueryable routes, string? type)
{
if (!routes.Any() || String.IsNullOrWhiteSpace(type))
{
@@ -169,60 +98,10 @@ public class RouteManagementService : IRouteManagementService
routes = routes.Where(r => r.Type.ToLower().Contains(type.ToLower()));
}
-
- void FilterByFromAddressName(ref IQueryable routes,
- string? addressName)
- {
- if (!routes.Any() || String.IsNullOrWhiteSpace(addressName))
- {
- return;
- }
-
- // TODO Optimize (remove client evaluation)
- routes = routes.ToArray().Where(r =>
- r.RouteAddresses.First().Address
- .GetFullName().ToLower().Contains(addressName.ToLower()))
- .AsQueryable();
- }
-
- void FilterByToAddressName(ref IQueryable routes,
- string? addressName)
- {
- if (!routes.Any() || String.IsNullOrWhiteSpace(addressName))
- {
- return;
- }
-
- // TODO Optimize (remove client evaluation)
- routes = routes.ToArray().Where(r =>
- r.RouteAddresses.Last().Address.
- GetFullName().ToLower().Contains(addressName.ToLower()))
- .AsQueryable();
- }
}
- public async Task<(bool isSucceed, IActionResult? actionResult, ExpandoObject route)> GetRoute(int id, string? fields)
- {
- if (!await IsRouteExists(id))
- {
- return (false, new NotFoundResult(), null)!;
- }
-
- var dbRoute = await _dbContext.Routes.Where(r => r.Id == id)
- .FirstAsync();
-
- if (String.IsNullOrWhiteSpace(fields))
- {
- fields = RouteParameters.DefaultFields;
- }
-
- var routeDto = _mapper.Map(dbRoute);
- var shapedRouteData = _routeDataShaper.ShapeData(routeDto, fields);
-
- return (true, null, shapedRouteData);
- }
-
- public async Task<(bool isSucceed, IActionResult? actionResult, ExpandoObject route)> GetRouteWithAddresses(int id, string? fields)
+ public async Task<(bool isSucceed, IActionResult actionResult, ExpandoObject route)>
+ GetRoute(int id, string? fields)
{
if (!await IsRouteExists(id))
{
@@ -236,19 +115,25 @@ public class RouteManagementService : IRouteManagementService
if (String.IsNullOrWhiteSpace(fields))
{
- fields = RouteWithAddressesParameters.DefaultFields;
+ fields = RouteParameters.DefaultFields;
}
- var routeDto = _mapper.Map(dbRoute);
- var shapedData = _routeWithAddressesDataShaper.ShapeData(routeDto, fields);
+ var routeDto = _mapper.Map(dbRoute);
+ var shapedData = _routeDataShaper.ShapeData(routeDto, fields);
- return (true, null, shapedData);
+ return (true, null!, shapedData);
}
- public async Task<(bool isSucceed, IActionResult? actionResult, UpdateRouteDto route)> UpdateRoute(UpdateRouteDto updateRouteDto)
+ public async Task<(bool isSucceed, IActionResult actionResult, UpdateRouteDto route)>
+ UpdateRoute(int id, UpdateRouteDto updateRouteDto)
{
+ if (id != updateRouteDto.Id)
+ {
+ return (false, new BadRequestObjectResult("Query id must match object id"), null!);
+ }
+
var route = _mapper.Map(updateRouteDto);
- _dbContext.Entry(route).State = EntityState.Modified;
+ _dbContext.Routes.Update(route);
try
{
@@ -262,12 +147,15 @@ public class RouteManagementService : IRouteManagementService
}
}
- var dbRoute = await _dbContext.Routes.FirstAsync(r => r.Id == route.Id);
+ var dbRoute = await _dbContext.Routes
+ .Include(r => r.RouteAddresses).ThenInclude(ra => ra.Address)
+ .ThenInclude(a => a.City).ThenInclude(c => c.State)
+ .ThenInclude(s => s.Country).FirstAsync(r => r.Id == route.Id);
- return (true, null, _mapper.Map(dbRoute));
+ return (true, null!, _mapper.Map(dbRoute));
}
- public async Task<(bool isSucceed, IActionResult? actionResult)> DeleteRoute(int id)
+ public async Task<(bool isSucceed, IActionResult actionResult)> DeleteRoute(int id)
{
var dbRoute = await _dbContext.Routes.FirstOrDefaultAsync(r => r.Id == id);
@@ -279,10 +167,10 @@ public class RouteManagementService : IRouteManagementService
_dbContext.Routes.Remove(dbRoute);
await _dbContext.SaveChangesAsync();
- return (true, null);
+ return (true, null!);
}
- public async Task IsRouteExists(int id)
+ private async Task IsRouteExists(int id)
{
return await _dbContext.Routes.AnyAsync(r => r.Id == id);
}
diff --git a/Server/Services/TicketGroupManagementService.cs b/Server/Services/TicketGroupManagementService.cs
index 47016d9..56752df 100644
--- a/Server/Services/TicketGroupManagementService.cs
+++ b/Server/Services/TicketGroupManagementService.cs
@@ -212,7 +212,7 @@ public class TicketGroupManagementService : ITicketGroupManagementService
return ticketGroupDto;
}
- public async Task IsTicketGroupExist(int id)
+ private async Task IsTicketGroupExist(int id)
{
return await _dbContext.TicketGroups.AnyAsync(tg => tg.Id == id);
}
diff --git a/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDetailsDto.cs b/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDetailsDto.cs
index 88f0723..e0c52a3 100644
--- a/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDetailsDto.cs
+++ b/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDetailsDto.cs
@@ -2,35 +2,6 @@ using System.ComponentModel.DataAnnotations;
namespace SharedModels.DataTransferObjects.Model;
-public class RouteAddressDetailsDto : CreateRouteAddressDetailsDto
-{
- public int Id { get; set; }
-}
-
-public class CreateRouteAddressDetailsDto
-{
- [Required]
- public int VehicleEnrollmentId { get; set; }
-
- [Required]
- public int RouteAddressId { get; set; }
-
- [Required]
- public TimeSpan TimeSpanToNextCity { get; set; }
-
- [Required]
- public TimeSpan WaitTimeSpan { get; set; }
-
- [Required]
- public double CostToNextCity { get; set; }
-}
-
-public class UpdateRouteAddressDetailsDto : CreateRouteAddressDetailsDto
-{
- [Required]
- public int Id { get; set; }
-}
-
public class CreateRouteAddressDetailsInVehicleEnrollmentDto
{
[Required]
diff --git a/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDto.cs b/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDto.cs
index 464e43b..de36649 100644
--- a/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDto.cs
+++ b/SharedModels/DataTransferObjects/DatabaseModels/RouteAddressDto.cs
@@ -5,17 +5,19 @@ namespace SharedModels.DataTransferObjects.Model;
public class RouteAddressDto : CreateRouteAddressDto
{
public int Id { get; set; }
+
+ public string AddressName { get; set; } = null!;
+ public string CityName { get; set; } = null!;
+ public string StateName { get; set; } = null!;
+ public string CountryName { get; set; } = null!;
+ public string FullName { get; set; } = null!;
- public RouteDto Route { get; set; } = null!;
-
- public AddressDto Address { get; set; } = null!;
+ public double Latitude { get; set; }
+ public double Longitude { get; set; }
}
public class CreateRouteAddressDto
{
- [Required]
- public int RouteId { get; set; }
-
[Required]
public int AddressId { get; set; }
@@ -24,29 +26,8 @@ public class CreateRouteAddressDto
public int Order { get; set; }
}
-public class UpdateRouteAddressDto : CreateRouteAddressDto
+public class UpdateRouteAddressDto : CreateRouteDto
{
[Required]
public int Id { get; set; }
-}
-
-public class CreateRouteAddressWithAddressDto
-{
- [Range(0, Int32.MaxValue)]
- public int Order { get; set; }
-
- public CreateAddressInRouteAddress? Address { get; set; }
-
- public int? AddressId { get; set; }
-}
-
-public class RouteAddressWithAddressDto
-{
- public int Id { get; set; }
-
- public int Order { get; set; }
-
- public AddressInRouteAddress Address { get; set; } = null!;
-
- public int AddressId { get; set; }
}
\ No newline at end of file
diff --git a/SharedModels/DataTransferObjects/DatabaseModels/RouteDto.cs b/SharedModels/DataTransferObjects/DatabaseModels/RouteDto.cs
index 00d5d25..09343db 100644
--- a/SharedModels/DataTransferObjects/DatabaseModels/RouteDto.cs
+++ b/SharedModels/DataTransferObjects/DatabaseModels/RouteDto.cs
@@ -4,29 +4,23 @@ namespace SharedModels.DataTransferObjects.Model;
public class RouteDto : CreateRouteDto
{
+ [Required]
public int Id { get; set; }
+
+ public new IList RouteAddresses { get; set; } = null!;
}
public class CreateRouteDto
{
[Required]
public string Type { get; set; } = null!;
-}
-
-public class UpdateRouteDto : CreateRouteDto
-{
- [Required]
- public int Id { get; set; }
-}
-
-public class CreateRouteWithAddressesDto : CreateRouteDto
-{
+
[Required]
[MinLength(2)]
- public IList RouteAddresses { get; set; } = null!;
+ public IList RouteAddresses { get; set; } = null!;
}
-public class RouteWithAddressesDto : RouteDto
+public class UpdateRouteDto : RouteDto
{
- public IList RouteAddresses { get; set; } = null!;
+ public new IList RouteAddresses { get; set; } = null!;
}
\ No newline at end of file
diff --git a/SharedModels/QueryParameters/Objects/RouteAddressParameters.cs b/SharedModels/QueryParameters/Objects/RouteAddressParameters.cs
deleted file mode 100644
index 08441a2..0000000
--- a/SharedModels/QueryParameters/Objects/RouteAddressParameters.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace SharedModels.QueryParameters.Objects;
-
-public class RouteAddressParameters : ParametersBase
-{
- public const string DefaultFields = "id,routeId,route,addressId,address,order" +
- ",timeSpanToNextCity,waitTimeSpan,costToNextCity";
-
- public RouteAddressParameters()
- {
- Fields = DefaultFields;
- }
-
- public int? RouteId { get; set; }
- public int? AddressId { get; set; }
-}
\ No newline at end of file
diff --git a/SharedModels/QueryParameters/Objects/RouteParameters.cs b/SharedModels/QueryParameters/Objects/RouteParameters.cs
index caea91d..1a85349 100644
--- a/SharedModels/QueryParameters/Objects/RouteParameters.cs
+++ b/SharedModels/QueryParameters/Objects/RouteParameters.cs
@@ -2,7 +2,7 @@ namespace SharedModels.QueryParameters.Objects;
public class RouteParameters : ParametersBase
{
- public const string DefaultFields = "id,type";
+ public const string DefaultFields = "id,type,routeAddresses";
public RouteParameters()
{
diff --git a/SharedModels/QueryParameters/Objects/RouteWithAddressesParameters.cs b/SharedModels/QueryParameters/Objects/RouteWithAddressesParameters.cs
deleted file mode 100644
index 2ece76a..0000000
--- a/SharedModels/QueryParameters/Objects/RouteWithAddressesParameters.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace SharedModels.QueryParameters.Objects;
-
-public class RouteWithAddressesParameters : ParametersBase
-{
- public const string DefaultFields = "id,type,routeAddresses";
-
- public RouteWithAddressesParameters()
- {
- Fields = DefaultFields;
- }
-
- public string? Type { get; set; }
- public string? FromAddressName { get; set; }
- public string? ToAddressName { get; set; }
-}
\ No newline at end of file