diff --git a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs index 19b56f853a2c8cb1db658771f40e43ca5a466815..c3597213db864c1467de99fd48ed80b96faac26f 100644 --- a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs +++ b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs @@ -85,5 +85,73 @@ namespace Tsi1.Api.Controllers return Ok(); } + + [Authorize(Roles = UserTypes.Student + ", " + UserTypes.Professor + ", " + UserTypes.FacultyAdmin)] + [HttpGet("GetAll")] + public async Task<IActionResult> GetAll() + { + var tenantId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "TenantId").Value); + + var result = await _courseService.GetAll(tenantId); + if (result.HasError) + { + return BadRequest(result.Message); + } + + return Ok(result.Data); + } + + [Authorize(Roles = UserTypes.UdelarAdmin)] + [HttpGet("GetAll/{tenantId}")] + public async Task<IActionResult> GetAll(int tenantId) + { + var result = await _courseService.GetAll(tenantId); + if (result.HasError) + { + return BadRequest(result.Message); + } + + return Ok(result.Data); + } + + + [Authorize(Roles = UserTypes.Professor + ", " + UserTypes.FacultyAdmin)] + [HttpPut("Modify/{courseId}")] + public async Task<IActionResult> Modify(int courseId, CourseCreateDto courseDto) + { + var result = await _courseService.Modify(courseId, courseDto); + + if (result.HasError) + { + return BadRequest(result.Message); + } + + if (result.Data == false) + { + return NotFound(result.Message); + } + + return Ok(); + } + + [Authorize(Roles = UserTypes.FacultyAdmin)] + [HttpDelete("Delete/{courseId}")] + public async Task<IActionResult> Delete(int courseId) + { + var result = await _courseService.Delete(courseId); + + if (result.HasError) + { + return BadRequest(result.Message); + } + + if (result.Data == false) + { + return NotFound(result.Message); + } + + return Ok(); + } + } } diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs index 5d666d16c6f9578c22a8c22b867329345ee444ae..5e2ad7595a04cfa2d63482f4ef931a10d21c1962 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs @@ -42,7 +42,7 @@ namespace Tsi1.BusinessLayer.Helpers CreateMap<UserRegisterDto, User>(); CreateMap<StudentPreviewDto, Student>(); CreateMap<ProfessorPreviewDto, Professor>(); - CreateMap<CourseCreateDto, Course>(); + CreateMap<CourseCreateDto, Course>().ForMember(x => x.TenantId, opt => opt.Ignore()); 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 082798fedb9a2cc7a9802f2266558a00e8111c8d..cff802c381fa6603d11639b895a5442b5932ae48 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs @@ -17,5 +17,11 @@ namespace Tsi1.BusinessLayer.Interfaces Task<ServiceResult<bool>> Matriculate(int userId, int courseId); Task<ServiceResult<bool>> AddProfessorToCourse(ProfessorCourseDto professorCourseDto); + + Task<ServiceResult<List<CoursePreviewDto>>> GetAll(int tenantId); + + Task<ServiceResult<bool>> Modify(int courseId, CourseCreateDto courseDto); + + Task<ServiceResult<bool>> Delete(int courseId); } } diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs index 4c1f4ceec956384a2df10f16c45ab66fb0f6cc8f..427b686f18fa586e4d5a99008e0b5510b02c30d7 100644 --- a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs +++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs @@ -181,5 +181,64 @@ namespace Tsi1.BusinessLayer.Services return result; } + + public async Task<ServiceResult<List<CoursePreviewDto>>> GetAll(int tenantId) + { + var result = new ServiceResult<List<CoursePreviewDto>>(); + + var courses = await _context.Courses + .Where(x => x.TenantId == tenantId) + .ToListAsync(); + + var coursesDto = _mapper.Map<List<CoursePreviewDto>>(courses); + + result.Data = coursesDto; + + return result; + } + + public async Task<ServiceResult<bool>> Modify(int courseId, CourseCreateDto courseDto) + { + var result = new ServiceResult<bool>(); + + var course = await _context.Courses + .FirstOrDefaultAsync(x => x.Id == courseId); + + if (course == null) + { + result.Message = string.Format(ErrorMessages.CourseDoesNotExist, courseId); + return result; + } + + _mapper.Map(courseDto, course); + + await _context.SaveChangesAsync(); + + result.Data = true; + + return result; + } + + public async Task<ServiceResult<bool>> Delete(int courseId) + { + var result = new ServiceResult<bool>(); + + var course = await _context.Courses + .FirstOrDefaultAsync(x => x.Id == courseId); + + if (course == null) + { + result.Message = string.Format(ErrorMessages.CourseDoesNotExist, courseId); + return result; + } + + _context.Courses.Remove(course); + + await _context.SaveChangesAsync(); + + result.Data = true; + + return result; + } } }