diff --git a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs index 540ab08af66615f623811fa0d894ac7cb00aaea7..d65d1f94dc4d1e266f65dfceffa7f050518356ca 100644 --- a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs +++ b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; @@ -19,9 +20,12 @@ namespace Tsi1.Api.Controllers { private readonly ICourseService _courseService; - public CourseController(ICourseService courseService) + private readonly IFileService _fileService; + + public CourseController(ICourseService courseService, IFileService fileService) { _courseService = courseService; + _fileService = fileService; } [Authorize(Roles = UserTypes.Student + ", " + UserTypes.Professor)] @@ -54,6 +58,10 @@ namespace Tsi1.Api.Controllers return BadRequest(result.Message); } + var path = Path.Combine(tenantId.ToString(), result.Data.Id.ToString()); + + _fileService.CreateFolder(path); + return Ok(); } @@ -197,11 +205,15 @@ namespace Tsi1.Api.Controllers return BadRequest(result.Message); } - if (result.Data == false) + if (result.Data == null) { return NotFound(result.Message); } + var path = Path.Combine(result.Data.TenantId.ToString(), result.Data.Id.ToString()); + + _fileService.DeleteFolder(path); + return Ok(); } diff --git a/Tsi1.Api/Tsi1.Api/Controllers/TenantController.cs b/Tsi1.Api/Tsi1.Api/Controllers/TenantController.cs index 738bc5b34acb2810373bc8ac6902096ef52bb9bb..8b4373aca7795d7fb930d12ff41d1a2caf36babe 100644 --- a/Tsi1.Api/Tsi1.Api/Controllers/TenantController.cs +++ b/Tsi1.Api/Tsi1.Api/Controllers/TenantController.cs @@ -17,9 +17,12 @@ namespace Tsi1.Api.Controllers { private readonly ITenantService _tenantService; - public TenantController(ITenantService tenantService) + private readonly IFileService _fileService; + + public TenantController(ITenantService tenantService, IFileService fileService) { _tenantService = tenantService; + _fileService = fileService; } [Authorize(Roles = UserTypes.UdelarAdmin)] @@ -47,6 +50,8 @@ namespace Tsi1.Api.Controllers return BadRequest(result.Message); } + _fileService.CreateFolder(result.Data.Id.ToString()); + return Ok(result.Data); } @@ -85,6 +90,8 @@ namespace Tsi1.Api.Controllers return NotFound(result.Message); } + _fileService.DeleteFolder(tenantId.ToString()); + return Ok(); } } diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs index df85a721b67cacb1cbfc1f423a2d0286d76e5e4e..9e1822f19be6d557dff520dc4536b3c11df1e53f 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs @@ -45,7 +45,7 @@ namespace Tsi1.BusinessLayer.Helpers CreateMap<UserModifyDto, User>(); CreateMap<StudentPreviewDto, Student>(); CreateMap<ProfessorPreviewDto, Professor>(); - CreateMap<CourseCreateDto, Course>().ForMember(x => x.TenantId, opt => opt.Ignore()); + CreateMap<CourseCreateDto, Course>(); CreateMap<CoursePreviewDto, Course>(); CreateMap<TenantPreviewDto, Tenant>(); CreateMap<TenantCreateDto, Tenant>(); diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs index 885c3b3729b3a210b70990a747f1e808d6460d30..f13641f98f895d1f846b25bda95135e3a6b5be64 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs @@ -22,7 +22,7 @@ namespace Tsi1.BusinessLayer.Interfaces Task<ServiceResult<bool>> Modify(int courseId, CourseCreateDto courseDto); - Task<ServiceResult<bool>> Delete(int courseId); + Task<ServiceResult<Course>> Delete(int courseId); Task<ServiceResult<bool>> DropOutFromCourse(int userId, int courseId); diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs index 594623d0c22e18ee27be1636c9777750c92ff250..ed40c63c0475e9afba76a325a687569104ea86d7 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs @@ -10,8 +10,10 @@ namespace Tsi1.BusinessLayer.Interfaces { public interface IFileService { - //Task<ServiceResult<FileDto>> SaveFile(IFormFile file); - Task<ServiceResult<FileDto>> Create(IFormFile file, int tenantId, int courseId); + + void CreateFolder(string folderPath); + + void DeleteFolder(string folderPath); } } diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ITenantService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ITenantService.cs index ea42bbcb4fa8850ad5a0e458dec57fd3608704b0..a54ceb12faeba753c7ca67f8bbda3bb27c0ded54 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ITenantService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ITenantService.cs @@ -11,6 +11,8 @@ namespace Tsi1.BusinessLayer.Interfaces { Task<ServiceResult<int>> GetByName(string tenantName); + Task<ServiceResult<int>> GetById(int tenantId); + Task<ServiceResult<List<TenantPreviewDto>>> GetAll(); Task<ServiceResult<TenantPreviewDto>> Create(TenantCreateDto newTenant); diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs index e385562b0bbb4c2986dfe06bd602e40860faa8ce..6930b541c7218a1262f4c772951d1d29ef787be3 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs @@ -41,7 +41,7 @@ namespace Tsi1.BusinessLayer.Services } var course = _mapper.Map<Course>(newCourse); - + _context.Courses.Add(course); await _context.SaveChangesAsync(); @@ -219,9 +219,9 @@ namespace Tsi1.BusinessLayer.Services return result; } - public async Task<ServiceResult<bool>> Delete(int courseId) + public async Task<ServiceResult<Course>> Delete(int courseId) { - var result = new ServiceResult<bool>(); + var result = new ServiceResult<Course>(); var course = await _context.Courses .FirstOrDefaultAsync(x => x.Id == courseId); @@ -236,7 +236,7 @@ namespace Tsi1.BusinessLayer.Services await _context.SaveChangesAsync(); - result.Data = true; + result.Data = course; return result; } diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs index 5e7fcd662caf3d89f21273a38e9908785d60750e..315250148761311cbd020f1da7863798800a7793 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs @@ -121,5 +121,19 @@ namespace Tsi1.BusinessLayer.Services return result; } + + public void CreateFolder(string folderPath) + { + var path = Path.Combine(_path, folderPath); + + Directory.CreateDirectory(path); + } + + public void DeleteFolder(string folderPath) + { + var path = Path.Combine(_path, folderPath); + + Directory.Delete(path); + } } } diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/TenantService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/TenantService.cs index 8f629676d9123978260602c3892aba1ce68e2c6d..d749ea887b6b46b53f3759e5d1c0d1fa9b9441f7 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Services/TenantService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/TenantService.cs @@ -122,5 +122,24 @@ namespace Tsi1.BusinessLayer.Services return result; } + + public async Task<ServiceResult<int>> GetById(int tenantId) + { + var result = new ServiceResult<int>(); + + var tenant = await _context.Tenants + .FirstOrDefaultAsync(x => x.Id == tenantId); + + if (tenant == null) + { + result.HasError = true; + result.Message = string.Format(ErrorMessages.TenantDoesNotExist, tenantId); + return result; + } + + result.Data = tenant.Id; + + return result; + } } }