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(); } }