add basic versions of retrieving answers by question or completion

This commit is contained in:
Вячеслав 2025-05-31 01:24:48 +05:00
parent 637e6c9824
commit d73e0a104f
7 changed files with 95 additions and 16 deletions

View file

@ -0,0 +1,37 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SurveyBackend.Mappers;
using SurveyLib.Core.Services;
namespace SurveyBackend.Controllers;
[ApiController]
public class AnswerController : ControllerBase
{
private readonly IAnswerService _answerService;
public AnswerController(IAnswerService answerService)
{
_answerService = answerService;
}
[Authorize]
[HttpGet]
[Route("api/questions/{id:int}/answers")]
public async Task<IActionResult> GetAnswersByQuestionId(int id)
{
var models = await _answerService.GetAnswersByQuestionIdAsync(id);
var result = models.Select(AnswerMapper.ModelToOutputDto);
return Ok(result);
}
[Authorize]
[HttpGet]
[Route("api/completions/{id:int}/answers")]
public async Task<IActionResult> GetAnswersByCompletionId(int id)
{
var models = await _answerService.GetAnswersByCompletionIdAsync(id);
var result = models.Select(AnswerMapper.ModelToOutputDto);
return Ok(result);
}
}

View file

@ -52,16 +52,15 @@ public class AnswerVariantsController : ControllerBase
/// <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)
[HttpPut]
[Route("/api/answerVariants/{id:int}")]
public async Task<IActionResult> Update(int id, [FromBody] AnswerVariantUpdateDto dto)
{
var model = AnswerVariantMapper.UpdateDtoToModel(dto, questionId, id);
var model = AnswerVariantMapper.UpdateDtoToModel(dto, id);
await _answerVariantsService.UpdateAnswerVariantAsync(model);
var result = AnswerVariantMapper.ModelToOutputDto(model);
return Ok(result);
@ -70,13 +69,12 @@ public class AnswerVariantsController : ControllerBase
/// <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)
[HttpDelete]
[Route("/api/answerVariants/{id:int}")]
public async Task<IActionResult> Delete(int id)
{
await _answerVariantsService.DeleteAnswerVariantAsync(id);
return Ok();

View file

@ -11,10 +11,9 @@ public static class AnswerVariantMapper
Text = dto.Text
};
public static AnswerVariant UpdateDtoToModel(AnswerVariantUpdateDto dto, int questionId, int answerVariantId) =>
public static AnswerVariant UpdateDtoToModel(AnswerVariantUpdateDto dto, int answerVariantId) =>
new AnswerVariant
{
QuestionId = questionId,
Id = answerVariantId,
Text = dto.Text
};

View file

@ -69,21 +69,16 @@ public static class QuestionMapper
{
Id = questionId,
Title = dto.Title,
SurveyId = 0, // bad logic, need to do something
},
"singleanswerquestion" => new SingleAnswerQuestion
{
Id = questionId,
Title = dto.Title,
SurveyId = 0,
AnswerVariants = [],
},
"multipleanswerquestion" => new MultipleAnswerQuestion
{
Id = questionId,
Title = dto.Title,
SurveyId = 0,
AnswerVariants = []
},
_ => throw new BadRequestException("Unknown question type")
};

View file

@ -51,11 +51,13 @@ public class Program
builder.Services.AddScoped<IQuestionRepository, QuestionRepository>();
builder.Services.AddScoped<IAnswerVariantsRepository, AnswerVariantsRepository>();
builder.Services.AddScoped<ICompletionRepository, CompletionRepository>();
builder.Services.AddScoped<IAnswerRepository, AnswerRepository>();
builder.Services.AddScoped<ISurveyService, SurveyService>();
builder.Services.AddScoped<IQuestionService, QuestionService>();
builder.Services.AddScoped<IAnswerVariantsService, AnswerVariantsService>();
builder.Services.AddScoped<ICompletionService, CompletionService>();
builder.Services.AddScoped<IAnswerService, AnswerService>();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)