using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Azaion.Missions.DTOs; using Azaion.Missions.Services; namespace Azaion.Missions.Controllers; [ApiController] [Route("missions")] [Authorize(Policy = "FL")] public class MissionsController(MissionService missionService, WaypointService waypointService) : ControllerBase { [HttpPost] public async Task Create([FromBody] CreateMissionRequest request) { var mission = await missionService.CreateMission(request); return Created($"/missions/{mission.Id}", mission); } [HttpPut("{id:guid}")] public async Task Update(Guid id, [FromBody] UpdateMissionRequest request) { var mission = await missionService.UpdateMission(id, request); return Ok(mission); } [HttpGet("{id:guid}")] public async Task Get(Guid id) { var mission = await missionService.GetMission(id); return Ok(mission); } [HttpGet] public async Task GetAll([FromQuery] GetMissionsQuery query) { var result = await missionService.GetMissions(query); return Ok(result); } [HttpDelete("{id:guid}")] public async Task Delete(Guid id) { await missionService.DeleteMission(id); return NoContent(); } [HttpPost("{id:guid}/waypoints")] public async Task CreateWaypoint(Guid id, [FromBody] CreateWaypointRequest request) { var waypoint = await waypointService.CreateWaypoint(id, request); return Created($"/missions/{id}/waypoints/{waypoint.Id}", waypoint); } [HttpPut("{id:guid}/waypoints/{waypointId:guid}")] public async Task UpdateWaypoint(Guid id, Guid waypointId, [FromBody] UpdateWaypointRequest request) { var waypoint = await waypointService.UpdateWaypoint(id, waypointId, request); return Ok(waypoint); } [HttpDelete("{id:guid}/waypoints/{waypointId:guid}")] public async Task DeleteWaypoint(Guid id, Guid waypointId) { await waypointService.DeleteWaypoint(id, waypointId); return NoContent(); } [HttpGet("{id:guid}/waypoints")] public async Task GetWaypoints(Guid id) { var waypoints = await waypointService.GetWaypoints(id); return Ok(waypoints); } }