using DamageAssesment.Api.SurveyResponses.Interfaces; using DamageAssesment.Api.SurveyResponses.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace DamageAssesment.Api.SurveyResponses.Controllers { [ApiController] public class SurveyResponsesController : ControllerBase { private readonly ISurveysResponse surveyResponseProvider; public SurveyResponsesController(ISurveysResponse surveyResponseProvider) { this.surveyResponseProvider = surveyResponseProvider; } /// /// GET request for retrieving survey responses. /// [HttpGet("Responses")] public async Task GetSurveyResponsesAsync() { var result = await this.surveyResponseProvider.GetSurveyResponsesAsync(); if (result.IsSuccess) { return Ok(result.surveyResponses); } if (result.ErrorMessage == "No Data Found") return NoContent(); return BadRequest(result.ErrorMessage); } /// /// GET request for retrieving survey responses by survey ID. /// [HttpGet("Responses/BySurvey/{surveyid}")] public async Task GetSurveyResponsesAsync(int surveyid) { var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAsync(surveyid); if (result.IsSuccess) { return Ok(result.SurveyResponses); } return NoContent(); } /// /// GET request for retrieving survey responses by survey and location IDs. /// /// The ID of the survey for which responses are to be retrieved. /// The ID of the location for which responses are to be retrieved. [HttpGet("Responses/{surveyid}/{locationid}")] public async Task GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid) { var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid); if (result.IsSuccess) { return Ok(result.SurveyResponses); } return NoContent(); } /// /// GET request for retrieving survey responses by survey, question, and answer. /// /// The ID of the survey for which responses are to be retrieved. /// The ID of the question for which responses are to be retrieved. /// The answer for which responses are to be retrieved. [HttpGet("Responses/ByAnswer/{surveyid}/{questionid}/{answer}")] public async Task GetSurveyResponsesByAnswerAsyncAsync(int surveyid, int questionid, string answer) { var result = await surveyResponseProvider.GetResponsesByAnswerAsync(surveyid, questionid, answer); if (result.IsSuccess) { return Ok(result.SurveyResponses); } return NoContent(); } /// /// GET request for retrieving answers from survey responses by survey ID and region. /// /// The ID of the survey for which answers are to be retrieved. [HttpGet("Responses/ByRegion/{surveyid}")] public async Task GetAnswersByRegionAsync(int surveyid) { var result = await this.surveyResponseProvider.GetAnswersByRegionAsync(surveyid); if (result.IsSuccess) { return Ok(result.Answers); } return NoContent(); } /// /// GET request for retrieving survey responses by survey ID and maintenance center. /// /// The ID of the survey for which responses are to be retrieved. [HttpGet("Responses/ByMaintenanceCenter/{surveyid}")] public async Task GetAnswersByMaintenaceCentersync(int surveyid) { var result = await this.surveyResponseProvider.GetSurveyResponsesByMaintenanceCenterAsync(surveyid); if (result.IsSuccess) { return Ok(result.SurveyResponses); } return NoContent(); } /// /// GET request for retrieving a survey response by response ID. /// /// The ID of the survey response to be retrieved. [HttpGet("Responses/{id}")] public async Task GetSurveyResponseByIdAsync(int id) { var result = await this.surveyResponseProvider.GetSurveyResponseByIdAsync(id); if (result.IsSuccess) { return Ok(result.SurveyResponse); } return NoContent(); } /// /// POST request for creating a new survey response. /// /// The survey response object to be created. [HttpPost("Responses")] public async Task PostSurveysAsync(Models.SurveyResponse surveyResponse) { var result = await this.surveyResponseProvider.PostSurveyResponseAsync(surveyResponse); if (result.IsSuccess) { return Ok(result.SurveyResponse); } return BadRequest(result.ErrorMessage); } /// /// PUT request for updating an existing survey response. /// /// The ID of the survey response to be updated. /// The updated survey response object. [HttpPut("Responses/{id}")] public async Task PutSurveyResponseAsync(int id, Models.SurveyResponse surveyResponse) { var result = await this.surveyResponseProvider.PutSurveyResponseAsync(id, surveyResponse); if (result.IsSuccess) { return Ok(result.SurveyResponse); } if (result.ErrorMessage == "Not Found") return NotFound(result.ErrorMessage); return BadRequest(result.ErrorMessage); } /// /// DELETE request for deleting an existing survey response. /// [HttpDelete("Responses/{id}")] public async Task DeleteSurveyResponseAsync(int id) { var result = await this.surveyResponseProvider.DeleteSurveyResponseAsync(id); if (result.IsSuccess) { return Ok(result.SurveyResponse); } return NotFound(); } /// /// POST request for submitting survey with multiple answers. /// /// The answers to be submitted for the survey. [HttpPost("Responses/Answers")] public async Task PostSurveyAnswersAsync(Request request) { var result = await this.surveyResponseProvider.PostSurveyAnswersAsync(request); if (result.IsSuccess) return Ok(result.SurveyResponse); else return BadRequest(result.ErrorMessage); } } }