using DamageAssesment.Api.Questions.Db; using DamageAssesment.Api.Questions.Interfaces; using DamageAssesment.Api.Questions.Models; using DamageAssesment.Api.Questions.Providers; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace DamageAssesment.Api.Questions.Controllers { [Route("api")] [ApiController] public class QuestionsController : ControllerBase { private readonly IQuestionsProvider questionsProvider; public QuestionsController(IQuestionsProvider questionsProvider) { this.questionsProvider = questionsProvider; } // get all questions [HttpGet("Questions")] public async Task GetQuestionsAsync() { var result = await this.questionsProvider.GetQuestionsAsync(); if (result.IsSuccess) { return Ok(result.Questions); } return NoContent(); } //Get questions based on question id [HttpGet("Questions/{id}")] public async Task GetQuestionAsync(int id) { var result = await this.questionsProvider.GetQuestionAsync(id); if (result.IsSuccess) { return Ok(result.Question); } return NotFound(); } //get all questions based on survey id [HttpGet("GetSurveyQuestions/{surveyId}")] public async Task GetSurveyQuestions(int surveyId,string? Language) { if (string.IsNullOrEmpty(Language)) Language = "en"; var result = await this.questionsProvider.GetSurveyQuestionAsync(surveyId, Language); if (result.IsSuccess) { return Ok(result.SurveyQuestions); } return NotFound(); } //update existing question [HttpPut("Questions")] public async Task UpdateQuestion(Models.Question question) { if (question != null) { var result = await this.questionsProvider.UpdateQuestionAsync(question); if (result.IsSuccess) { return Ok(result.Question); } if (result.ErrorMessage == "Not Found") return NotFound(result.ErrorMessage); return BadRequest(result.ErrorMessage); } return CreatedAtRoute("DefaultApi", new { id = question.Id }, question); } //save new question [HttpPost("Questions")] public async Task CreateQuestion(Models.Question question) { if (question != null) { var result = await this.questionsProvider.PostQuestionAsync(question); if (result.IsSuccess) { return Ok(result.Question); } return BadRequest(result.ErrorMessage); } return CreatedAtRoute("DefaultApi", new { id = question.Id }, question); } // delete existing question [HttpDelete("Questions/{id}")] public async Task DeleteQuestion(int id) { var result = await this.questionsProvider.DeleteQuestionAsync(id); if (result.IsSuccess) { return Ok(result.Question); } return NotFound(); } // get all questions [HttpGet("QuestionCategories")] public async Task GetQuestionCategoriesAsync() { var result = await this.questionsProvider.GetQuestionCategoriesAsync(); if (result.IsSuccess) { return Ok(result.QuestionCategories); } return NoContent(); } //Get questions based on question id [HttpGet("QuestionCategories/{id}")] public async Task GetQuestionCategoryAsync(int id) { var result = await this.questionsProvider.GetQuestionCategoryAsync(id); if (result.IsSuccess) { return Ok(result.QuestionCategory); } return NotFound(); } //update existing question [HttpPut("QuestionCategories")] public async Task UpdateQuestionCategory(Models.QuestionCategory questionCategory) { if (questionCategory != null) { var result = await this.questionsProvider.UpdateQuestionCategoryAsync(questionCategory); if (result.IsSuccess) { return Ok(result.QuestionCategory); } if (result.ErrorMessage == "Not Found") return NotFound(result.ErrorMessage); return BadRequest(result.ErrorMessage); } return CreatedAtRoute("DefaultApi", new { id = questionCategory.Id }, questionCategory); } //save new question [HttpPost("QuestionCategories")] public async Task CreateQuestionCategory(Models.QuestionCategory questionCategory) { if (questionCategory != null) { var result = await this.questionsProvider.PostQuestionCategoryAsync(questionCategory); if (result.IsSuccess) { return Ok(result.QuestionCategory); } return BadRequest(result.ErrorMessage); } return CreatedAtRoute("DefaultApi", new { id = questionCategory.Id }, questionCategory); } // delete existing question [HttpDelete("QuestionCategories/{id}")] public async Task DeleteQuestionCategory(int id) { var result = await this.questionsProvider.DeleteQuestionCategoryAsync(id); if (result.IsSuccess) { return Ok(result.QuestionCategory); } return NotFound(); } } }