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

add endpoint GetAllResponses, refactor and fixes

parent 00b0fe08
No related branches found
No related tags found
2 merge requests!26Develop,!23Feature/survey
This commit is part of merge request !23. Comments created here will be created in the context of that merge request.
Showing
with 916 additions and 33 deletions
......@@ -33,11 +33,9 @@ namespace Tsi1.Api.Controllers
{
tenantId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "TenantId").Value);
}
newSurvey.TenantId = tenantId;
newSurvey.IsGlobal = true;
var result = await _surveyService.CreateGlobalSurvey(newSurvey);
var result = await _surveyService.CreateGlobalSurvey(newSurvey, tenantId);
if (result.HasError)
{
......@@ -65,8 +63,8 @@ namespace Tsi1.Api.Controllers
}
[Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin)]
[HttpGet("GetAll")]
public async Task<IActionResult> GetAll(int tenantId)
[HttpGet("GetAllGlobalSurvey")]
public async Task<IActionResult> GetAllGlobalSurvey(int tenantId)
{
var userType = HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role).Value;
if (userType == UserTypes.FacultyAdmin)
......@@ -84,13 +82,13 @@ namespace Tsi1.Api.Controllers
return Ok(result.Data);
}
[Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin + ", " + UserTypes.Student)]
[HttpGet("Get/{surveyId}")]
public async Task<IActionResult> Get(int surveyId)
[Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin + ", " + UserTypes.Professor + ", " + UserTypes.Student)]
[HttpGet("GetMySurvey/{surveyId}")]
public async Task<IActionResult> GetMySurvey(int surveyId)
{
var userId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "Id").Value);
var result = await _surveyService.Get(surveyId, userId);
var result = await _surveyService.GetMySurvey(surveyId, userId);
if (result.HasError)
{
......@@ -117,7 +115,22 @@ namespace Tsi1.Api.Controllers
return Ok(result.Data);
}
[Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.UdelarAdmin + ", " + UserTypes.Professor)]
[HttpGet("GetAllResponses/{surveyId}")]
public async Task<IActionResult> GetAllResponses(int surveyId)
{
var userType = HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role).Value;
var tenantId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "TenantId").Value);
var result = await _surveyService.GetAllResponses(surveyId, userType, tenantId);
if (result.HasError)
{
return NotFound(result.Message);
}
return Ok(result.Data);
}
}
}
......@@ -12,9 +12,6 @@ namespace Tsi1.BusinessLayer.Dtos
[JsonIgnore]
public bool IsGlobal { get; set; }
[JsonIgnore]
public int TenantId { get; set; }
public List<SurveyQuestionCreateDto> SurveyQuestions { get; set; }
}
}
......@@ -9,7 +9,6 @@ namespace Tsi1.BusinessLayer.Dtos
public int Id { get; set; }
public string Name { get; set; }
public bool IsGlobal { get; set; }
public int TenantId { get; set; }
public List<SurveyQuestionPreviewDto> SurveyQuestions { get; set; }
......
......@@ -8,7 +8,6 @@ namespace Tsi1.BusinessLayer.Dtos
{
public int Id { get; set; }
public string Name { get; set; }
public int TenantId { get; set; }
}
}
......@@ -58,5 +58,6 @@ namespace Tsi1.BusinessLayer.Helpers
public const string SurveyDoesNotExist = "La encuesta con id '{0}' no existe";
public const string SurveyIsNull = "La encuesta es nula";
public const string SurveyHasNotQuestions = "La encuesta no tiene preguntas";
public const string InvalidSurvey = "La encuesta no pertenece a la facultad con id '{0}'";
}
}
......@@ -9,10 +9,11 @@ namespace Tsi1.BusinessLayer.Interfaces
{
public interface ISurveyService
{
Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey);
Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey, int tenantId);
Task<ServiceResult<bool>> DeleteGlobalSurvey(int surveyId, string userType, int tenantId);
Task<ServiceResult<List<SurveyPreviewDto>>> GetAllGlobalSurvey(int tenantId, string userType);
Task<ServiceResult<SurveyDetailDto>> Get(int surveyId, int userId);
Task<ServiceResult<SurveyDetailDto>> GetMySurvey(int surveyId, int userId);
Task<ServiceResult<bool>> Complete(SurveyResponseCreateDto surveyResponse);
Task<ServiceResult<List<SurveyResponseDetailDto>>> GetAllResponses(int surveyId, string userType, int tenantId);
}
}
......@@ -43,7 +43,7 @@ namespace Tsi1.BusinessLayer.Services
if (sectionItemType.Name == SectionItemTypes.Survey)
{
sectionItem.Survey.TenantId = tenantId;
sectionItem.Survey.Tenant.Id = tenantId;
}
_context.SectionItems.Add(sectionItem);
await _context.SaveChangesAsync();
......
......@@ -24,16 +24,16 @@ namespace Tsi1.BusinessLayer.Services
_mapper = mapper;
}
public async Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey)
public async Task<ServiceResult<bool>> CreateGlobalSurvey(SurveyCreateDto newSurvey, int tenantId)
{
var result = new ServiceResult<bool>();
var tenant = await _context.Tenants.FirstOrDefaultAsync(x => x.Id == newSurvey.TenantId);
var tenant = await _context.Tenants.FirstOrDefaultAsync(x => x.Id == tenantId);
if (tenant == null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.TenantDoesNotExist, newSurvey.TenantId));
result.AddMessage(string.Format(ErrorMessages.TenantDoesNotExist, tenantId));
return result;
}
......@@ -46,6 +46,7 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
survey.Tenant = tenant;
_context.Surveys.Add(survey);
await _context.SaveChangesAsync();
......@@ -57,7 +58,9 @@ namespace Tsi1.BusinessLayer.Services
{
var result = new ServiceResult<bool>();
var survey = await _context.Surveys.FirstOrDefaultAsync(x => x.Id == surveyId);
var survey = await _context.Surveys
.Include(x => x.Tenant)
.FirstOrDefaultAsync(x => x.Id == surveyId);
if (survey == null)
{
......@@ -66,7 +69,7 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
if (userType == UserTypes.FacultyAdmin && survey.TenantId != tenantId)
if (userType == UserTypes.FacultyAdmin && survey.Tenant.Id != tenantId)
{
result.HasError = true;
result.AddMessage("No se puede borrar una encuesta de otra facultad");
......@@ -95,7 +98,8 @@ namespace Tsi1.BusinessLayer.Services
}
var surveys = await _context.Surveys
.Where(x => x.TenantId == tenantId && x.IsGlobal)
.Include(x => x.Tenant)
.Where(x => x.IsGlobal && x.Tenant.Id == tenantId)
.ToListAsync();
result.Data = _mapper.Map<List<SurveyPreviewDto>>(surveys);
......@@ -103,7 +107,7 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
public async Task<ServiceResult<SurveyDetailDto>> Get(int surveyId, int userId)
public async Task<ServiceResult<SurveyDetailDto>> GetMySurvey(int surveyId, int userId)
{
var result = new ServiceResult<SurveyDetailDto>();
......@@ -162,5 +166,45 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
public async Task<ServiceResult<List<SurveyResponseDetailDto>>> GetAllResponses(int surveyId, string userType, int tenantId)
{
var result = new ServiceResult<List<SurveyResponseDetailDto>>();
var tenant = await _context.Tenants.FirstOrDefaultAsync(x => x.Id == tenantId);
var tenantAdmin = await _context.Tenants.FirstOrDefaultAsync(x => x.Name == TenantAdmin.Name);
if (tenant == null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.TenantDoesNotExist, tenantId));
return result;
}
var survey = await _context.Surveys.FirstOrDefaultAsync(x => x.Id == surveyId);
if (survey == null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.SurveyDoesNotExist, surveyId));
return result;
}
if (userType == UserTypes.Professor)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.InvalidSurvey, surveyId));
return result;
}
var surveyResponses = await _context.SurveyResponses
.Include(x => x.SurveyAnswers)
.Where(x => x.SurveyId == surveyId)
.ToListAsync();
result.Data = _mapper.Map<List<SurveyResponseDetailDto>>(surveyResponses);
return result;
}
}
}
......@@ -14,7 +14,6 @@ namespace Tsi1.DataLayer.Entities
public int Id { get; set; }
public string Name { get; set; }
public bool IsGlobal { get; set; }
public int TenantId { get; set; }
public SectionItem SectionItem { get; set; }
public Tenant Tenant { get; set; }
......
......@@ -19,10 +19,6 @@ namespace Tsi1.DataLayer.EntityConfiguration
.IsRequired()
.HasColumnType("character varying(255)");
builder.HasOne(x => x.Tenant)
.WithMany(x => x.Surveys)
.HasForeignKey(x => x.TenantId);
}
}
}
This diff is collapsed.
using Microsoft.EntityFrameworkCore.Migrations;
namespace Tsi1.DataLayer.Migrations
{
public partial class fixsurvey : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Surveys_Tenants_TenantId",
table: "Surveys");
migrationBuilder.AlterColumn<int>(
name: "TenantId",
table: "Surveys",
nullable: true,
oldClrType: typeof(int),
oldType: "integer");
migrationBuilder.AddForeignKey(
name: "FK_Surveys_Tenants_TenantId",
table: "Surveys",
column: "TenantId",
principalTable: "Tenants",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_Surveys_Tenants_TenantId",
table: "Surveys");
migrationBuilder.AlterColumn<int>(
name: "TenantId",
table: "Surveys",
type: "integer",
nullable: false,
oldClrType: typeof(int),
oldNullable: true);
migrationBuilder.AddForeignKey(
name: "FK_Surveys_Tenants_TenantId",
table: "Surveys",
column: "TenantId",
principalTable: "Tenants",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
}
}
......@@ -380,7 +380,7 @@ namespace Tsi1.DataLayer.Migrations
.IsRequired()
.HasColumnType("character varying(255)");
b.Property<int>("TenantId")
b.Property<int?>("TenantId")
.HasColumnType("integer");
b.HasKey("Id");
......@@ -706,9 +706,7 @@ namespace Tsi1.DataLayer.Migrations
{
b.HasOne("Tsi1.DataLayer.Entities.Tenant", "Tenant")
.WithMany("Surveys")
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.HasForeignKey("TenantId");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.SurveyAnswer", b =>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment