using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SurveyBackend.DTOs.AnswerVariant;
using SurveyBackend.Mappers;
using SurveyLib.Core.Services;
namespace SurveyBackend.Controllers;
[ApiController]
[Route("api/surveys/{surveyId}/questions/{questionId}/answerVariants")]
public class AnswerVariantsController : ControllerBase
{
private readonly IAnswerVariantsService _answerVariantsService;
public AnswerVariantsController(IAnswerVariantsService answerVariantsService)
{
_answerVariantsService = answerVariantsService;
}
///
/// Получить варианты ответа на вопрос
///
///
///
///
[AllowAnonymous]
[HttpGet]
public async Task Get(int surveyId, int questionId)
{
var answerVariants = await _answerVariantsService.GetAnswerVariantsByQuestionIdAsync(questionId);
var result = answerVariants.Select(AnswerVariantMapper.ModelToOutputDto);
return Ok(result);
}
///
/// Добавить новый вариант ответа для вопроса
///
/// Идентификатор опроса
/// Идентификатор вопроса
/// Объект с данными для создания варианта ответа
/// Результат операции добавления
[Authorize]
[HttpPost]
public async Task Add(int surveyId, int questionId, [FromBody] AnswerVariantCreateDto dto)
{
var model = AnswerVariantMapper.CreateDtoToModel(dto, questionId);
await _answerVariantsService.AddAnswerVariantAsync(model);
var result = AnswerVariantMapper.ModelToOutputDto(model);
return Ok(result);
}
///
/// Обновить вариант ответа на вопрос
///
/// Идентификатор варианта ответа
/// Объект с данными для обновления варианта ответа
/// Результат обновленного варианта ответа
[Authorize]
[HttpPut]
[Route("/api/answerVariants/{id:int}")]
public async Task Update(int id, [FromBody] AnswerVariantUpdateDto dto)
{
var model = AnswerVariantMapper.UpdateDtoToModel(dto, id);
await _answerVariantsService.UpdateAnswerVariantAsync(model);
var result = AnswerVariantMapper.ModelToOutputDto(model);
return Ok(result);
}
///
/// Удалить вариант ответа на вопрос
///
/// Идентификатор варианта ответа
/// Результат операции удаления
[Authorize]
[HttpDelete]
[Route("/api/answerVariants/{id:int}")]
public async Task Delete(int id)
{
await _answerVariantsService.DeleteAnswerVariantAsync(id);
return Ok();
}
}