|
|
@@ -16,37 +16,37 @@ public class TracksController : ControllerBase
|
|
|
private readonly IFileStorage _fileStorage;
|
|
|
private readonly GpxParser _gpxParser;
|
|
|
private readonly QueryFactory _queryFactory;
|
|
|
+ private readonly IRequestRouter _requestRouter;
|
|
|
private readonly ApiSettings _settings;
|
|
|
|
|
|
- public TracksController(IFileStorage fileStorage, GpxParser gpxParser, QueryFactory queryFactory, IOptions<ApiSettings> apiOptions)
|
|
|
+ public TracksController(
|
|
|
+ IFileStorage fileStorage,
|
|
|
+ GpxParser gpxParser,
|
|
|
+ QueryFactory queryFactory,
|
|
|
+ IOptions<ApiSettings> apiOptions,
|
|
|
+ IRequestRouter requestRouter)
|
|
|
{
|
|
|
_fileStorage = fileStorage;
|
|
|
_gpxParser = gpxParser;
|
|
|
_queryFactory = queryFactory;
|
|
|
+ _requestRouter = requestRouter;
|
|
|
_settings = apiOptions.Value;
|
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
|
- public ActionResult<ResultPage<Track>> GetTracks([FromQuery] int? page, [FromQuery] string? owner, [FromQuery] string? filter)
|
|
|
+ public ActionResult<ResultPage<Track>> GetTracks([FromQuery] TracksRequest tracksRequest)
|
|
|
{
|
|
|
- var query = _queryFactory.TracksQuery();
|
|
|
- if (owner != null)
|
|
|
+ if (tracksRequest.Owner is "me")
|
|
|
{
|
|
|
- if (owner == "me")
|
|
|
- {
|
|
|
- owner = ApiUser.Current.UserId;
|
|
|
- }
|
|
|
- query.ForOwner(owner);
|
|
|
+ tracksRequest = tracksRequest with { Owner = ApiUser.Current.UserId };
|
|
|
}
|
|
|
|
|
|
- if (filter != null)
|
|
|
- {
|
|
|
- query.FilterByName(filter);
|
|
|
- }
|
|
|
-
|
|
|
- query.Paging((page ?? 0) * _settings.PageSize, _settings.PageSize);
|
|
|
+ var tracks = _requestRouter
|
|
|
+ .For(tracksRequest)
|
|
|
+ .With(new QueryPagingConfig(PageSize: _settings.PageSize))
|
|
|
+ .Process<IList<Track>>();
|
|
|
|
|
|
- return Ok(new ResultPage<Track>(query.Get(), page ?? 0, _settings.PageSize));
|
|
|
+ return Ok(new ResultPage<Track>(tracks, tracksRequest.Page, _settings.PageSize));
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|