diff --git a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
index 4a8d4b838b69c414438d9802c0ded5433fa78b0a..5469334a34225ac449c54dc52e9e4cfe9f9ca849 100644
--- a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
+++ b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
@@ -21,12 +21,9 @@ namespace Tsi1.Api.Controllers
{
private readonly ICourseService _courseService;
- private readonly IFileService _fileService;
-
- public CourseController(ICourseService courseService, IFileService fileService)
+ public CourseController(ICourseService courseService)
{
_courseService = courseService;
- _fileService = fileService;
}
[Authorize(Roles = UserTypes.Student + ", " + UserTypes.Professor)]
diff --git a/Tsi1.Api/Tsi1.Api/Controllers/SectionItemController.cs b/Tsi1.Api/Tsi1.Api/Controllers/SectionItemController.cs
index 4e278ca49c8c101e03e2c593a2cc5a895c3196d1..1a1a7c5e582cf3d7caf234e21ccf243de7bb0c8b 100644
--- a/Tsi1.Api/Tsi1.Api/Controllers/SectionItemController.cs
+++ b/Tsi1.Api/Tsi1.Api/Controllers/SectionItemController.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -25,7 +26,9 @@ namespace Tsi1.Api.Controllers
[HttpPost("Create")]
public async Task<IActionResult> Create(SectionItemCreateDto sectionItem)
{
- var result = await _sectionItemService.Create(sectionItem);
+ var tenantId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "TenantId").Value);
+
+ var result = await _sectionItemService.Create(sectionItem, tenantId);
if (result.HasError)
{
return BadRequest(result.Message);
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/DataLoad/DataLoad.cs b/Tsi1.Api/Tsi1.BusinessLayer/DataLoad/DataLoad.cs
index 531c3ddb99ebef6b6e5483525ea8ef9a7855db45..db3a8af45db895fce706b8f731064675f59f73d5 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/DataLoad/DataLoad.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/DataLoad/DataLoad.cs
@@ -13,29 +13,23 @@ namespace Tsi1.BusinessLayer.DataLoad
public class DataLoad : IDataLoad
{
private readonly Tsi1Context _context;
- private readonly IUserTypeService _userTypeService;
private readonly ITenantService _tenantService;
private readonly IUserService _userService;
private readonly ICourseService _courseService;
- private readonly ISectionItemTypeService _sectionItemTypeService;
private readonly ISectionService _sectionService;
private readonly ISectionItemService _sectionItemService;
public DataLoad(Tsi1Context context,
- IUserTypeService userTypeService,
ITenantService tenantService,
IUserService userService,
ICourseService courseService,
- ISectionItemTypeService sectionItemTypeService,
ISectionService sectionService,
ISectionItemService sectionItemService)
{
_context = context;
- _userTypeService = userTypeService;
_tenantService = tenantService;
_userService = userService;
_courseService = courseService;
- _sectionItemTypeService = sectionItemTypeService;
_sectionService = sectionService;
_sectionItemService = sectionItemService;
}
@@ -161,6 +155,12 @@ namespace Tsi1.BusinessLayer.DataLoad
};
_context.SectionItemTypes.Add(sectionItemTypeForum);
+ var sectionItemTypeSurvey = new SectionItemType
+ {
+ Name = SectionItemTypes.Survey,
+ };
+ _context.SectionItemTypes.Add(sectionItemTypeSurvey);
+
await _context.SaveChangesAsync();
// COURSES
@@ -183,7 +183,7 @@ namespace Tsi1.BusinessLayer.DataLoad
Name = "Fisica 1",
TenantId = fingTenantId.Data.Id
};
- var course3 = await _courseService.Create(course3Dto);
+ await _courseService.Create(course3Dto);
// SECTIONS
var section1 = new SectionCreateDto
@@ -221,7 +221,7 @@ namespace Tsi1.BusinessLayer.DataLoad
Name = "Novedades"
}
};
- await _sectionItemService.Create(sectionItem1);
+ await _sectionItemService.Create(sectionItem1, fingTenantId.Data.Id);
var sectionItem2 = new SectionItemCreateDto
{
@@ -233,7 +233,7 @@ namespace Tsi1.BusinessLayer.DataLoad
Name = "Novedades"
}
};
- await _sectionItemService.Create(sectionItem2);
+ await _sectionItemService.Create(sectionItem2, fingTenantId.Data.Id);
var sectionItem3 = new SectionItemCreateDto
{
@@ -245,7 +245,7 @@ namespace Tsi1.BusinessLayer.DataLoad
Name = "General"
}
};
- await _sectionItemService.Create(sectionItem3);
+ await _sectionItemService.Create(sectionItem3, fingTenantId.Data.Id);
var sectionItem4 = new SectionItemCreateDto
{
@@ -257,7 +257,7 @@ namespace Tsi1.BusinessLayer.DataLoad
Name = "Tema 1"
}
};
- await _sectionItemService.Create(sectionItem4);
+ await _sectionItemService.Create(sectionItem4, fingTenantId.Data.Id);
// ANSWER OPTIONS
var answerOptions = new List<AnswerOption>
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemCreateDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemCreateDto.cs
index 9da60f96c22ec4674298ff8503a8d29b0b70cfb8..6ddb3a53587dc01c31fbe715054739d69f4cc871 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemCreateDto.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SectionItemCreateDto.cs
@@ -12,5 +12,7 @@ namespace Tsi1.BusinessLayer.Dtos
public ForumCreateDto Forum { get; set; }
public FileDto File { get; set; }
+
+ public SurveyCreateDto Survey { get; set; }
}
}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyCreateDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyCreateDto.cs
index 9ef1eef2348f743caa5fe4a70168ff38c28f0881..7eb3692f0ed30ef400fd70a1799e500c039954bd 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyCreateDto.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/SurveyCreateDto.cs
@@ -15,6 +15,6 @@ namespace Tsi1.BusinessLayer.Dtos
[JsonIgnore]
public int TenantId { get; set; }
- public ICollection<SurveyQuestionCreateDto> SurveyQuestions { get; set; }
+ public List<SurveyQuestionCreateDto> SurveyQuestions { get; set; }
}
}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/ErrorMessages.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/ErrorMessages.cs
index 0f99100c3ee37acf131bedaab038d08f55ab333f..37f629edce74953e6daffecc5ae5acd4cd78f52d 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/ErrorMessages.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/ErrorMessages.cs
@@ -56,5 +56,7 @@ namespace Tsi1.BusinessLayer.Helpers
public const string InvalidSectionItemData = "El tipo de item de seccion '{0}' no coincide con su contenido '{1}'";
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";
}
}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/SectionItemTypes.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/SectionItemTypes.cs
index 0eee4f0c3bd2dd3c53204e5539652b839534a794..a889446941100b1eb36fb20075cd6b8228dd614c 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/SectionItemTypes.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/SectionItemTypes.cs
@@ -8,5 +8,6 @@ namespace Tsi1.BusinessLayer.Helpers
{
public const string Forum = nameof(Forum);
public const string File = nameof(File);
+ public const string Survey = nameof(Survey);
}
}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISectionItemService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISectionItemService.cs
index 4834f03114b891bfae163d7d87ac1be83dfced28..ad048812770a41c268427b9a0d0c1aa1a8ca7812 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISectionItemService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ISectionItemService.cs
@@ -9,7 +9,7 @@ namespace Tsi1.BusinessLayer.Interfaces
{
public interface ISectionItemService
{
- Task<ServiceResult<bool>> Create(SectionItemCreateDto newSectionItem);
+ Task<ServiceResult<bool>> Create(SectionItemCreateDto newSectionItem, int tenantId);
Task<ServiceResult<bool>> Delete(int sectionItemId);
Task<ServiceResult<bool>> OrderSectionItems(List<OrderDto> orderDtos);
}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
index fffcc93913bd4653c1fc9228a6d362b6e2acd8f8..326206b791ac86d65b5575c47373ff84fb7aab6e 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
@@ -353,6 +353,9 @@ namespace Tsi1.BusinessLayer.Services
.Include(x => x.Sections)
.ThenInclude(x => x.SectionItems)
.ThenInclude(x => x.File)
+ .Include(x => x.Sections)
+ .ThenInclude(x => x.SectionItems)
+ .ThenInclude(x => x.Survey)
.FirstOrDefaultAsync(x => x.Id == courseId);
if (course == null)
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/EmailService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/EmailService.cs
index 9519fc5b0cf3037535e101a866a297392b786825..6be1396f8a82712544d99e643c9550d44407dfcd 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/EmailService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/EmailService.cs
@@ -29,14 +29,16 @@ namespace Tsi1.BusinessLayer.Services
message.Sender = MailboxAddress.Parse(_mailSettings.Mail);
- var client = new SmtpClient();
- client.CheckCertificateRevocation = false;
+ var client = new SmtpClient
+ {
+ CheckCertificateRevocation = false
+ };
try
{
await client.ConnectAsync(_mailSettings.Host, _mailSettings.Port, SecureSocketOptions.StartTls);
}
- catch (Exception e)
+ catch (Exception)
{
result.HasError = true;
result.Message = ErrorMessages.CannotConnectToSmtpServer;
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/SectionItemService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/SectionItemService.cs
index ae0eedca11130f202ca5cc31688ea5725eea6525..b632f12b796cafad645cf6fbfbf56216e20d299d 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/SectionItemService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/SectionItemService.cs
@@ -27,17 +27,24 @@ namespace Tsi1.BusinessLayer.Services
_fileService = fileService;
}
- public async Task<ServiceResult<bool>> Create(SectionItemCreateDto newSectionItem)
+ public async Task<ServiceResult<bool>> Create(SectionItemCreateDto newSectionItem, int tenantId)
{
var sectionItem = _mapper.Map<SectionItem>(newSectionItem);
- var result = await this.SectionItemValidations(sectionItem);
+ var sectionItemType = await _context.SectionItemTypes
+ .FirstOrDefaultAsync(x => x.Id == sectionItem.SectionItemTypeId);
+
+ var result = this.SectionItemValidations(sectionItem, sectionItemType);
if (result.HasError)
{
return result;
}
+ if (sectionItemType.Name == SectionItemTypes.Survey)
+ {
+ sectionItem.Survey.TenantId = tenantId;
+ }
_context.SectionItems.Add(sectionItem);
await _context.SaveChangesAsync();
@@ -100,13 +107,10 @@ namespace Tsi1.BusinessLayer.Services
return result;
}
- private async Task<ServiceResult<bool>> SectionItemValidations(SectionItem sectionItem)
+ private ServiceResult<bool> SectionItemValidations(SectionItem sectionItem, SectionItemType sectionItemType)
{
var result = new ServiceResult<bool>();
-
- var sectionItemType = await _context.SectionItemTypes
- .FirstOrDefaultAsync(x => x.Id == sectionItem.SectionItemTypeId);
-
+
if (sectionItemType == null)
{
result.HasError = true;
@@ -122,7 +126,7 @@ namespace Tsi1.BusinessLayer.Services
result.AddMessage(ErrorMessages.ForumIsNull);
}
- if (sectionItem.File != null)
+ if (sectionItem.File != null || sectionItem.Survey != null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.InvalidSectionItemData, sectionItemType.Name, SectionItemTypes.File));
@@ -137,7 +141,7 @@ namespace Tsi1.BusinessLayer.Services
result.AddMessage(ErrorMessages.FileIsNull);
}
- if (sectionItem.Forum != null)
+ if (sectionItem.Forum != null || sectionItem.Survey != null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.InvalidSectionItemData, sectionItemType.Name, SectionItemTypes.Forum));
@@ -150,6 +154,21 @@ namespace Tsi1.BusinessLayer.Services
}
}
+ if (sectionItemType.Name == SectionItemTypes.Survey)
+ {
+ if (sectionItem.Survey == null)
+ {
+ result.HasError = true;
+ result.AddMessage(ErrorMessages.SurveyIsNull);
+ }
+
+ if (sectionItem.File != null || sectionItem.Forum != null)
+ {
+ result.HasError = true;
+ result.AddMessage(string.Format(ErrorMessages.InvalidSectionItemData, sectionItemType.Name, SectionItemTypes.File));
+ }
+ }
+
return result;
}
}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs
index b442eb88a30ada87472ab07edc8002590222e3ba..e8933693d701449b6961f9209ef5d94352117a2d 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/SurveyService.cs
@@ -39,6 +39,13 @@ namespace Tsi1.BusinessLayer.Services
var survey = _mapper.Map<Survey>(newSurvey);
+ if (!survey.SurveyQuestions.Any())
+ {
+ result.HasError = true;
+ result.AddMessage(ErrorMessages.SurveyHasNotQuestions);
+ return result;
+ }
+
_context.Surveys.Add(survey);
await _context.SaveChangesAsync();