|
|
@@ -0,0 +1,50 @@
|
|
|
+
|
|
|
+using Microsoft.AspNetCore.Authorization;
|
|
|
+using Microsoft.AspNetCore.Mvc;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
+using RunnersMeet.Server.Domain;
|
|
|
+
|
|
|
+namespace RunnersMeet.Server.Controllers;
|
|
|
+
|
|
|
+[Route("api/[controller]")]
|
|
|
+[ApiController]
|
|
|
+[Authorize("Tracks")]
|
|
|
+public class EventsController : ControllerBase
|
|
|
+{
|
|
|
+ private readonly IRequestRouter _requestRouter;
|
|
|
+ private readonly ApiSettings _settings;
|
|
|
+
|
|
|
+ public EventsController(
|
|
|
+ IOptions<ApiSettings> apiOptions,
|
|
|
+ IRequestRouter requestRouter)
|
|
|
+ {
|
|
|
+ _requestRouter = requestRouter;
|
|
|
+ _settings = apiOptions.Value;
|
|
|
+ }
|
|
|
+
|
|
|
+ [HttpGet]
|
|
|
+ public ActionResult<ResultPage<Event>> GetEvents([FromQuery] EventsRequest eventsRequest)
|
|
|
+ {
|
|
|
+ if (eventsRequest.Owner is "me")
|
|
|
+ {
|
|
|
+ eventsRequest = eventsRequest with { Owner = ApiUser.Current.UserId };
|
|
|
+ }
|
|
|
+
|
|
|
+ var events = _requestRouter
|
|
|
+ .For(eventsRequest)
|
|
|
+ .With(new QueryPagingConfig(PageSize: _settings.PageSize))
|
|
|
+ .Process<IList<Event>>();
|
|
|
+
|
|
|
+ return Ok(new ResultPage<Event>(events, eventsRequest.Page, _settings.PageSize));
|
|
|
+ }
|
|
|
+
|
|
|
+ [HttpPost]
|
|
|
+ public ActionResult<Event> CreateEvent([FromBody] Event newEvent)
|
|
|
+ {
|
|
|
+ var createdEvent = _requestRouter
|
|
|
+ .For(newEvent)
|
|
|
+ .Process<Event>();
|
|
|
+
|
|
|
+ return Ok(createdEvent);
|
|
|
+ }
|
|
|
+}
|