add AnswerVariant

This commit is contained in:
Вячеслав 2025-05-20 17:35:43 +05:00
parent 8a80013c94
commit ae43e8c74c
10 changed files with 139 additions and 5 deletions

View file

@ -0,0 +1,84 @@
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;
}
/// <summary>
/// Получить варианты ответа на вопрос
/// </summary>
/// <param name="surveyId"></param>
/// <param name="questionId"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpGet]
public async Task<IActionResult> Get(int surveyId, int questionId)
{
var answerVariants = await _answerVariantsService.GetAnswerVariantsByQuestionIdAsync(questionId);
var result = answerVariants.Select(AnswerVariantMapper.ModelToOutputDto);
return Ok(result);
}
/// <summary>
/// Добавить новый вариант ответа для вопроса
/// </summary>
/// <param name="surveyId">Идентификатор опроса</param>
/// <param name="questionId">Идентификатор вопроса</param>
/// <param name="dto">Объект с данными для создания варианта ответа</param>
/// <returns>Результат операции добавления</returns>
[Authorize]
[HttpPost]
public async Task<IActionResult> 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);
}
/// <summary>
/// Обновить вариант ответа на вопрос
/// </summary>
/// <param name="surveyId">Идентификатор опроса</param>
/// <param name="questionId">Идентификатор вопроса</param>
/// <param name="id">Идентификатор варианта ответа</param>
/// <param name="dto">Объект с данными для обновления варианта ответа</param>
/// <returns>Результат обновленного варианта ответа</returns>
[Authorize]
[HttpPut("{id}")]
public async Task<IActionResult> Update(int surveyId, int questionId, int id, [FromBody] AnswerVariantUpdateDto dto)
{
var model = AnswerVariantMapper.UpdateDtoToModel(dto, questionId, id);
await _answerVariantsService.UpdateAnswerVariantAsync(model);
var result = AnswerVariantMapper.ModelToOutputDto(model);
return Ok(result);
}
/// <summary>
/// Удалить вариант ответа на вопрос
/// </summary>
/// <param name="surveyId">Идентификатор опроса</param>
/// <param name="questionId">Идентификатор вопроса</param>
/// <param name="id">Идентификатор варианта ответа</param>
/// <returns>Результат операции удаления</returns>
[Authorize]
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int surveyId, int questionId, int id)
{
await _answerVariantsService.DeleteAnswerVariantAsync(id);
return Ok();
}
}