using DamageAssesment.Api.SurveyResponses.Interfaces;
using DamageAssesment.Api.SurveyResponses.Models;
using Microsoft.AspNetCore.Mvc;
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.
///
[Route("Responses/{employeeid:int}")]
[Route("Responses")]
[HttpGet]
public async Task GetSurveyResponsesAsync(int? employeeid)
{
var result = await this.surveyResponseProvider.GetSurveyResponsesAsync(employeeid ?? 0);
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.
///
[Route("Responses/BySurvey/{surveyid:int}/{employeeid:int}")]
[Route("Responses/BySurvey/{surveyid:int}")]
[HttpGet]
public async Task GetSurveyResponsesAsync(int surveyid, int? employeeid)
{
var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAsync(surveyid, employeeid ?? 0);
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.
[Route("Responses/{surveyid:int}/{locationid:int}/{employeeid:int}")]
[Route("Responses/{surveyid:int}/{locationid:int}")]
[HttpGet]
public async Task GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid,int? employeeid)
{
var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid,employeeid ?? 0);
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.
[Route("Responses/ByAnswer/{surveyid:int}/{questionid:int}/{answer:alpha}/{employeeid:int}")]
[Route("Responses/ByAnswer/{surveyid:int}/{questionid:int}/{answer:alpha}")]
[HttpGet]
public async Task GetSurveyResponsesByAnswerAsyncAsync(int surveyid, int questionid, string answer, int? employeeid)
{
var result = await surveyResponseProvider.GetResponsesByAnswerAsync(surveyid, questionid, answer, employeeid ?? 0);
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.
[Route("Responses/ByRegion/{surveyid:int}")]
[Route("Responses/ByRegion/{surveyid:int}/{employeeid}")]
[HttpGet]
public async Task GetAnswersByRegionAsync(int surveyid, int? employeeid)
{
var result = await this.surveyResponseProvider.GetAnswersByRegionAsync(surveyid, employeeid ?? 0);
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.
[Route("Responses/ByMaintenanceCenter/{surveyid:int}/{employeeid:int}")]
[Route("Responses/ByMaintenanceCenter/{surveyid:int}")]
[HttpGet]
public async Task GetAnswersByMaintenaceCentersync(int surveyid, int? employeeid)
{
var result = await this.surveyResponseProvider.GetSurveyResponsesByMaintenanceCenterAsync(surveyid, employeeid ?? 0);
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);
}
[Route("Responses/Surveys/active/{employeeid:int}")]
[Route("Responses/Surveys/active/{employeeid:int}/{language:alpha}")]
[HttpGet]
public async Task GetActiveSurveysAsync(int employeeid, string? language)
{
var result = await this.surveyResponseProvider.GetActiveSurveysAsync(employeeid, language);
if (result.IsSuccess)
{
return Ok(result.Surveys);
}
return NoContent();
}
[Route("Responses/Surveys/historic/{employeeid:int}")]
[Route("Responses/Surveys/historic/{employeeid:int}/{language:alpha}")]
[HttpGet]
public async Task GetHistoricSurveysAsync(int employeeid, string? language)
{
var result = await this.surveyResponseProvider.GetHistoricSurveysAsync(employeeid, language);
if (result.IsSuccess)
{
return Ok(result.Surveys);
}
return NoContent();
}
}
}