77 lines
2.6 KiB
C#
77 lines
2.6 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using RobotNet10.MapManager.Data;
|
|
|
|
namespace RobotNet10.MapManager.Services;
|
|
|
|
/// <summary>
|
|
/// Service implementation for querying map data (nodes and edges) by VehicleType
|
|
/// </summary>
|
|
public class MapQueryService(MapDbContext context) : IMapQueryService
|
|
{
|
|
private readonly MapDbContext _context = context;
|
|
|
|
public async Task<List<Node>> GetNodesByVehicleTypeAsync(Guid vehicleTypeId)
|
|
{
|
|
var filteredNodes = await _context.Nodes
|
|
.Include(n => n.VehicleProperties)
|
|
.ThenInclude(vp => vp.VehicleType)
|
|
.Where(n => n.VehicleProperties.Any(vp => vp.VehicleTypeId == vehicleTypeId))
|
|
.OrderBy(n => n.NodeId)
|
|
.ToListAsync();
|
|
|
|
return filteredNodes;
|
|
}
|
|
|
|
public async Task<List<Edge>> GetEdgesByVehicleTypeAsync(Guid vehicleTypeId)
|
|
{
|
|
var filteredEdges = await _context.Edges
|
|
.Include(e => e.VehicleProperties)
|
|
.ThenInclude(vp => vp.VehicleType)
|
|
.Include(e => e.StartNode)
|
|
.Include(e => e.EndNode)
|
|
.Where(e => e.VehicleProperties.Any(vp => vp.VehicleTypeId == vehicleTypeId))
|
|
.OrderBy(e => e.EdgeId)
|
|
.ToListAsync();
|
|
|
|
return filteredEdges;
|
|
}
|
|
|
|
public async Task<List<Node>> GetNodesByVehicleTypeAndLevelAsync(Guid vehicleTypeId, Guid levelId)
|
|
{
|
|
var filteredNodes = await _context.Nodes
|
|
.Include(n => n.VehicleProperties)
|
|
.ThenInclude(vp => vp.VehicleType)
|
|
.Where(n => n.LevelId == levelId &&
|
|
n.VehicleProperties.Any(vp => vp.VehicleTypeId == vehicleTypeId))
|
|
.OrderBy(n => n.NodeId)
|
|
.ToListAsync();
|
|
|
|
return filteredNodes;
|
|
}
|
|
|
|
public async Task<List<Edge>> GetEdgesByVehicleTypeAndLevelAsync(Guid vehicleTypeId, Guid levelId)
|
|
{
|
|
var filteredEdges = await _context.Edges
|
|
.Include(e => e.VehicleProperties)
|
|
.ThenInclude(vp => vp.VehicleType)
|
|
.Include(e => e.StartNode)
|
|
.Include(e => e.EndNode)
|
|
.Where(e => e.LevelId == levelId &&
|
|
e.VehicleProperties.Any(vp => vp.VehicleTypeId == vehicleTypeId))
|
|
.OrderBy(e => e.EdgeId)
|
|
.ToListAsync();
|
|
|
|
return filteredEdges;
|
|
}
|
|
|
|
public async Task<int> GetTotalNodesCountAsync()
|
|
{
|
|
return await _context.Nodes.CountAsync();
|
|
}
|
|
|
|
public async Task<int> GetTotalEdgesCountAsync()
|
|
{
|
|
return await _context.Edges.CountAsync();
|
|
}
|
|
}
|