mirror of
https://github.com/azaion/satellite-provider.git
synced 2026-04-22 07:16:39 +00:00
route in progress, region stitching is disabled by default
This commit is contained in:
@@ -25,6 +25,7 @@ builder.Services.Configure<ProcessingConfig>(builder.Configuration.GetSection("P
|
||||
|
||||
builder.Services.AddSingleton<ITileRepository>(sp => new TileRepository(connectionString));
|
||||
builder.Services.AddSingleton<IRegionRepository>(sp => new RegionRepository(connectionString));
|
||||
builder.Services.AddSingleton<IRouteRepository>(sp => new RouteRepository(connectionString));
|
||||
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddSingleton<GoogleMapsDownloaderV2>();
|
||||
@@ -34,6 +35,7 @@ var processingConfig = builder.Configuration.GetSection("ProcessingConfig").Get<
|
||||
builder.Services.AddSingleton<IRegionRequestQueue>(sp => new RegionRequestQueue(processingConfig.QueueCapacity));
|
||||
builder.Services.AddSingleton<IRegionService, RegionService>();
|
||||
builder.Services.AddHostedService<RegionProcessingService>();
|
||||
builder.Services.AddSingleton<IRouteService, RouteService>();
|
||||
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen(c =>
|
||||
@@ -103,6 +105,12 @@ app.MapPost("/api/satellite/request", RequestRegion)
|
||||
app.MapGet("/api/satellite/region/{id:guid}", GetRegionStatus)
|
||||
.WithOpenApi(op => new(op) { Summary = "Get region status and file paths" });
|
||||
|
||||
app.MapPost("/api/satellite/route", CreateRoute)
|
||||
.WithOpenApi(op => new(op) { Summary = "Create a route with intermediate points" });
|
||||
|
||||
app.MapGet("/api/satellite/route/{id:guid}", GetRoute)
|
||||
.WithOpenApi(op => new(op) { Summary = "Get route information with calculated points" });
|
||||
|
||||
app.Run();
|
||||
|
||||
IResult GetSatelliteTilesByLatLon(double lat, double lon, double squareSideMeters)
|
||||
@@ -187,15 +195,16 @@ async Task<IResult> RequestRegion([FromBody] RequestRegionRequest request, IRegi
|
||||
return Results.BadRequest(new { error = "Size must be between 100 and 10000 meters" });
|
||||
}
|
||||
|
||||
logger.LogInformation("Region request received: ID={Id}, Lat={Lat}, Lon={Lon}, Size={Size}m, Zoom={Zoom}",
|
||||
request.Id, request.Latitude, request.Longitude, request.SizeMeters, request.ZoomLevel);
|
||||
logger.LogInformation("Region request received: ID={Id}, Lat={Lat}, Lon={Lon}, Size={Size}m, Zoom={Zoom}, Stitch={Stitch}",
|
||||
request.Id, request.Latitude, request.Longitude, request.SizeMeters, request.ZoomLevel, request.StitchTiles);
|
||||
|
||||
var status = await regionService.RequestRegionAsync(
|
||||
request.Id,
|
||||
request.Latitude,
|
||||
request.Longitude,
|
||||
request.SizeMeters,
|
||||
request.ZoomLevel);
|
||||
request.ZoomLevel,
|
||||
request.StitchTiles);
|
||||
|
||||
return Results.Ok(status);
|
||||
}
|
||||
@@ -226,6 +235,48 @@ async Task<IResult> GetRegionStatus(Guid id, IRegionService regionService, ILogg
|
||||
}
|
||||
}
|
||||
|
||||
async Task<IResult> CreateRoute([FromBody] CreateRouteRequest request, IRouteService routeService, ILogger<Program> logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
logger.LogInformation("Route creation request: ID={Id}, Name={Name}, Points={PointCount}, RegionSize={RegionSize}m, Zoom={Zoom}",
|
||||
request.Id, request.Name, request.Points.Count, request.RegionSizeMeters, request.ZoomLevel);
|
||||
|
||||
var route = await routeService.CreateRouteAsync(request);
|
||||
return Results.Ok(route);
|
||||
}
|
||||
catch (ArgumentException ex)
|
||||
{
|
||||
logger.LogWarning(ex, "Invalid route request");
|
||||
return Results.BadRequest(new { error = ex.Message });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Failed to create route");
|
||||
return Results.Problem(detail: ex.Message, statusCode: 500);
|
||||
}
|
||||
}
|
||||
|
||||
async Task<IResult> GetRoute(Guid id, IRouteService routeService, ILogger<Program> logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
var route = await routeService.GetRouteAsync(id);
|
||||
|
||||
if (route == null)
|
||||
{
|
||||
return Results.NotFound(new { error = $"Route {id} not found" });
|
||||
}
|
||||
|
||||
return Results.Ok(route);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Failed to get route");
|
||||
return Results.Problem(detail: ex.Message, statusCode: 500);
|
||||
}
|
||||
}
|
||||
|
||||
public record GetSatelliteTilesResponse
|
||||
{
|
||||
public List<SatelliteTile> Tiles { get; set; } = new();
|
||||
@@ -317,6 +368,8 @@ public record RequestRegionRequest
|
||||
|
||||
[Required]
|
||||
public int ZoomLevel { get; set; } = 18;
|
||||
|
||||
public bool StitchTiles { get; set; } = false;
|
||||
}
|
||||
|
||||
public class ParameterDescriptionFilter : IOperationFilter
|
||||
|
||||
Reference in New Issue
Block a user