using DamageAssesment.Api.Surveys.Interfaces; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace DamageAssesment.Api.Surveys.Controllers { [ApiController] public class SurveysController : ControllerBase { private ISurveyProvider surveyProvider; public SurveysController(ISurveyProvider surveyProvider) { this.surveyProvider = surveyProvider; } /// /// GET request for retrieving surveys. /// [Authorize(Roles ="admin,survey,user,report")] [Route("surveys")] [Route("surveys/{language:alpha}")] [HttpGet] public async Task GetSurveysAsync(string? language) { var result = await this.surveyProvider.GetSurveysAsync(language); if (result.IsSuccess) { return Ok(result.Surveys); } return NoContent(); } /// /// GET request for retrieving all active surveys. /// [Authorize(Roles = "admin,survey,user,report")] [Route("surveys/active")] [Route("surveys/active/{language:alpha}")] [HttpGet] public async Task GetActiveSurveysAsync(string? language) { var result = await this.surveyProvider.GetActiveSurveysAsync(true,language); if (result.IsSuccess) { return Ok(result.Surveys); } return NoContent(); } /// /// GET request for retrieving all inactive surveys. /// [Authorize(Roles = "admin,survey,user,report")] [Route("surveys/inactive")] [Route("surveys/inactive/{language:alpha}")] [HttpGet] public async Task GetInActiveSurveysAsync(string? language) { var result = await this.surveyProvider.GetActiveSurveysAsync(false, language); if (result.IsSuccess) { return Ok(result.Surveys); } return NoContent(); } /// /// GET request for retrieving surveys by ID. /// [Authorize(Roles = "admin,survey,user,report")] [Route("surveys/{id:int}")] [Route("surveys/{id:int}/{language:alpha}")] [HttpGet] public async Task GetSurveysAsync(int id, string? language) { var result = await this.surveyProvider.GetSurveysAsync(id, language); if (result.IsSuccess) { return Ok(result.Surveys); } return NotFound(); } /// /// POST request for creating a new survey. /// [Authorize(Roles = "admin,survey,user,report")] [HttpPost("surveys")] public async Task PostSurveysAsync(Models.Survey survey) { var result = await this.surveyProvider.PostSurveyAsync(survey); if (result.IsSuccess) { return Ok(result.Survey); } return BadRequest(result.ErrorMessage); } /// /// PUT request for updating an existing survey (surveyId,Updated Survey data). /// [Authorize(Roles = "admin,survey")] [HttpPut("surveys/{id}")] public async Task PutSurveysAsync(int id, Models.Survey survey) { var result = await this.surveyProvider.PutSurveyAsync(id, survey); if (result.IsSuccess) { return Ok(result.Survey); } if (result.ErrorMessage == "Not Found") return NotFound(result.ErrorMessage); return BadRequest(result.ErrorMessage); } /// /// DELETE request for deleting a survey by ID. /// [Authorize(Roles = "admin,survey")] [HttpDelete("surveys/{id}")] public async Task DeleteSurveysAsync(int id) { var result = await this.surveyProvider.DeleteSurveyAsync(id); if (result.IsSuccess) { return Ok(result.Survey); } return NotFound(); } } }