Skip to content
Snippets Groups Projects
Commit 00b0fe08 authored by esantangelo's avatar esantangelo
Browse files

add complete survey

parent 178b7c69
Branches
No related tags found
2 merge requests!26Develop,!23Feature/survey
Showing with 139 additions and 7 deletions
...@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc; ...@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc;
using Tsi1.BusinessLayer.Dtos; using Tsi1.BusinessLayer.Dtos;
using Tsi1.BusinessLayer.Helpers; using Tsi1.BusinessLayer.Helpers;
using Tsi1.BusinessLayer.Interfaces; using Tsi1.BusinessLayer.Interfaces;
using Tsi1.DataLayer.Entities;
namespace Tsi1.Api.Controllers namespace Tsi1.Api.Controllers
{ {
...@@ -83,11 +84,13 @@ namespace Tsi1.Api.Controllers ...@@ -83,11 +84,13 @@ namespace Tsi1.Api.Controllers
return Ok(result.Data); return Ok(result.Data);
} }
[Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin)] [Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin + ", " + UserTypes.Student)]
[HttpGet("Get/{surveyId}")] [HttpGet("Get/{surveyId}")]
public async Task<IActionResult> Get(int surveyId) public async Task<IActionResult> Get(int surveyId)
{ {
var result = await _surveyService.GetGlobalSurvey(surveyId); var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
var result = await _surveyService.Get(surveyId, userId);
if (result.HasError) if (result.HasError)
{ {
...@@ -97,5 +100,24 @@ namespace Tsi1.Api.Controllers ...@@ -97,5 +100,24 @@ namespace Tsi1.Api.Controllers
return Ok(result.Data); return Ok(result.Data);
} }
[Authorize(Roles = UserTypes.Student)]
[HttpPost("Complete")]
public async Task<IActionResult> Complete(SurveyResponseCreateDto surveyResponse)
{
var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
surveyResponse.UserId = userId;
var result = await _surveyService.Complete(surveyResponse);
if (result.HasError)
{
return NotFound(result.Message);
}
return Ok(result.Data);
}
} }
} }
...@@ -11,5 +11,6 @@ namespace Tsi1.BusinessLayer.Dtos ...@@ -11,5 +11,6 @@ namespace Tsi1.BusinessLayer.Dtos
public int SectionItemTypeId { get; set; } public int SectionItemTypeId { get; set; }
public ForumPreviewDto Forum { get; set; } public ForumPreviewDto Forum { get; set; }
public FileDetailDto File { get; set; } public FileDetailDto File { get; set; }
public SurveyDetailDto Survey { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json.Serialization;
namespace Tsi1.BusinessLayer.Dtos
{
public class SurveyAnswerCreateDto
{
public int AnswerOptionId { get; set; }
public int SurveyQuestionId { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Tsi1.BusinessLayer.Dtos
{
public class SurveyAnswerDetailDto
{
public int Id { get; set; }
public int AnswerOptionId { get; set; }
public int SurveyResponseId { get; set; }
public int SurveyQuestionId { get; set; }
}
}
...@@ -11,6 +11,9 @@ namespace Tsi1.BusinessLayer.Dtos ...@@ -11,6 +11,9 @@ namespace Tsi1.BusinessLayer.Dtos
public bool IsGlobal { get; set; } public bool IsGlobal { get; set; }
public int TenantId { get; set; } public int TenantId { get; set; }
public ICollection<SurveyQuestionPreviewDto> SurveyQuestions { get; set; } public List<SurveyQuestionPreviewDto> SurveyQuestions { get; set; }
public SurveyResponseDetailDto SurveyResponse { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json.Serialization;
namespace Tsi1.BusinessLayer.Dtos
{
public class SurveyResponseCreateDto
{
[JsonIgnore]
public int UserId { get; set; }
public int SurveyId { get; set; }
public List<SurveyAnswerCreateDto> SurveyAnswers { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Tsi1.BusinessLayer.Dtos
{
public class SurveyResponseDetailDto
{
public int Id { get; set; }
public int UserId { get; set; }
public int SurveyId { get; set; }
public List<SurveyAnswerDetailDto> SurveyAnswers { get; set; }
}
}
...@@ -45,6 +45,10 @@ namespace Tsi1.BusinessLayer.Helpers ...@@ -45,6 +45,10 @@ namespace Tsi1.BusinessLayer.Helpers
CreateMap<Survey, SurveyDetailDto>(); CreateMap<Survey, SurveyDetailDto>();
CreateMap<SurveyQuestion, SurveyQuestionCreateDto>(); CreateMap<SurveyQuestion, SurveyQuestionCreateDto>();
CreateMap<SurveyQuestion, SurveyQuestionPreviewDto>(); CreateMap<SurveyQuestion, SurveyQuestionPreviewDto>();
CreateMap<SurveyResponse, SurveyResponseCreateDto>();
CreateMap<SurveyResponse, SurveyResponseDetailDto>();
CreateMap<SurveyAnswer, SurveyAnswerDetailDto>();
CreateMap<SurveyAnswer, SurveyAnswerCreateDto>();
CreateMap<ForumCreateDto, Forum>(); CreateMap<ForumCreateDto, Forum>();
CreateMap<ForumPreviewDto, Forum>(); CreateMap<ForumPreviewDto, Forum>();
...@@ -79,6 +83,10 @@ namespace Tsi1.BusinessLayer.Helpers ...@@ -79,6 +83,10 @@ namespace Tsi1.BusinessLayer.Helpers
CreateMap<SurveyPreviewDto, Survey>(); CreateMap<SurveyPreviewDto, Survey>();
CreateMap<SurveyQuestionCreateDto, SurveyQuestion>(); CreateMap<SurveyQuestionCreateDto, SurveyQuestion>();
CreateMap<SurveyQuestionPreviewDto, SurveyQuestion>(); CreateMap<SurveyQuestionPreviewDto, SurveyQuestion>();
CreateMap<SurveyResponseCreateDto, SurveyResponse>();
CreateMap<SurveyResponseDetailDto, SurveyResponse>();
CreateMap<SurveyAnswerDetailDto, SurveyAnswer>();
CreateMap<SurveyAnswerCreateDto, SurveyAnswer>();
} }
} }
......
...@@ -12,6 +12,7 @@ namespace Tsi1.BusinessLayer.Interfaces ...@@ -12,6 +12,7 @@ namespace Tsi1.BusinessLayer.Interfaces
Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey); Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey);
Task<ServiceResult<bool>> DeleteGlobalSurvey(int surveyId, string userType, int tenantId); Task<ServiceResult<bool>> DeleteGlobalSurvey(int surveyId, string userType, int tenantId);
Task<ServiceResult<List<SurveyPreviewDto>>> GetAllGlobalSurvey(int tenantId, string userType); Task<ServiceResult<List<SurveyPreviewDto>>> GetAllGlobalSurvey(int tenantId, string userType);
Task<ServiceResult<SurveyDetailDto>> GetGlobalSurvey(int surveyId); Task<ServiceResult<SurveyDetailDto>> Get(int surveyId, int userId);
Task<ServiceResult<bool>> Complete(SurveyResponseCreateDto surveyResponse);
} }
} }
...@@ -103,7 +103,7 @@ namespace Tsi1.BusinessLayer.Services ...@@ -103,7 +103,7 @@ namespace Tsi1.BusinessLayer.Services
return result; return result;
} }
public async Task<ServiceResult<SurveyDetailDto>> GetGlobalSurvey(int surveyId) public async Task<ServiceResult<SurveyDetailDto>> Get(int surveyId, int userId)
{ {
var result = new ServiceResult<SurveyDetailDto>(); var result = new ServiceResult<SurveyDetailDto>();
...@@ -118,7 +118,48 @@ namespace Tsi1.BusinessLayer.Services ...@@ -118,7 +118,48 @@ namespace Tsi1.BusinessLayer.Services
return result; return result;
} }
result.Data = _mapper.Map<SurveyDetailDto>(survey); var surveyResponse = await _context.SurveyResponses
.Include(x => x.SurveyAnswers)
.FirstOrDefaultAsync(x => x.SurveyId == surveyId && x.UserId == userId);
var surveyResponseDto = _mapper.Map<SurveyResponseDetailDto>(surveyResponse);
var surveyDto = _mapper.Map<SurveyDetailDto>(survey);
surveyDto.SurveyResponse = surveyResponseDto;
result.Data = surveyDto;
return result;
}
public async Task<ServiceResult<bool>> Complete(SurveyResponseCreateDto surveyResponse)
{
var result = new ServiceResult<bool>();
var survey = await _context.Surveys
.FirstOrDefaultAsync(x => x.Id == surveyResponse.SurveyId);
if (survey == null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.SurveyDoesNotExist, surveyResponse.SurveyId));
return result;
}
var existingSurveyResponse = await _context.SurveyResponses
.Include(x => x.SurveyAnswers)
.FirstOrDefaultAsync(x => x.SurveyId == surveyResponse.SurveyId && x.UserId == surveyResponse.UserId);
if (existingSurveyResponse != null)
{
_mapper.Map(surveyResponse, existingSurveyResponse);
}
else
{
var newSurveyResponse = _mapper.Map<SurveyResponse>(surveyResponse);
_context.Add(newSurveyResponse);
}
await _context.SaveChangesAsync();
return result; return result;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment