82 lines
No EOL
3.3 KiB
C#
82 lines
No EOL
3.3 KiB
C#
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="id">Идентификатор варианта ответа</param>
|
||
/// <param name="dto">Объект с данными для обновления варианта ответа</param>
|
||
/// <returns>Результат обновленного варианта ответа</returns>
|
||
[Authorize]
|
||
[HttpPut]
|
||
[Route("/api/answerVariants/{id:int}")]
|
||
public async Task<IActionResult> Update(int id, [FromBody] AnswerVariantUpdateDto dto)
|
||
{
|
||
var model = AnswerVariantMapper.UpdateDtoToModel(dto, id);
|
||
await _answerVariantsService.UpdateAnswerVariantAsync(model);
|
||
var result = AnswerVariantMapper.ModelToOutputDto(model);
|
||
return Ok(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Удалить вариант ответа на вопрос
|
||
/// </summary>
|
||
/// <param name="id">Идентификатор варианта ответа</param>
|
||
/// <returns>Результат операции удаления</returns>
|
||
[Authorize]
|
||
[HttpDelete]
|
||
[Route("/api/answerVariants/{id:int}")]
|
||
public async Task<IActionResult> Delete(int id)
|
||
{
|
||
await _answerVariantsService.DeleteAnswerVariantAsync(id);
|
||
return Ok();
|
||
}
|
||
} |