using Microsoft.EntityFrameworkCore; using RobotNet10.MapManager.Data; namespace RobotNet10.MapManager.Services; /// /// Service implementation for querying map data (nodes and edges) by VehicleType /// public class MapQueryService(MapDbContext context) : IMapQueryService { private readonly MapDbContext _context = context; public async Task> 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> 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> 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> 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 GetTotalNodesCountAsync() { return await _context.Nodes.CountAsync(); } public async Task GetTotalEdgesCountAsync() { return await _context.Edges.CountAsync(); } }