From 2f5e89a2d1fb90fc86973d1755316cf0afae6b6b Mon Sep 17 00:00:00 2001
From: esantangelo <enzo020895@gmail.com>
Date: Wed, 4 Nov 2020 21:46:30 -0300
Subject: [PATCH] add endpoint GET api/Courses/GetProfessors/{courseId}

---
 .../Tsi1.Api/Controllers/CourseController.cs  | 14 +++++++++++++
 .../Tsi1.BusinessLayer/Dtos/UserDetailDto.cs  | 21 +++++++++++++++++++
 .../Tsi1.BusinessLayer/Dtos/UserPreviewDto.cs |  6 +-----
 .../Helpers/MappingProfile.cs                 |  6 ++++--
 .../Interfaces/ICourseService.cs              |  1 +
 .../Interfaces/IUserService.cs                |  4 ++--
 .../Services/CourseService.cs                 | 18 ++++++++++++++++
 .../Services/UserService.cs                   | 12 +++++------
 8 files changed, 67 insertions(+), 15 deletions(-)
 create mode 100644 Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserDetailDto.cs

diff --git a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
index cb90fae..07e1566 100644
--- a/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
+++ b/Tsi1.Api/Tsi1.Api/Controllers/CourseController.cs
@@ -14,6 +14,7 @@ using Tsi1.BusinessLayer.Interfaces;
 
 namespace Tsi1.Api.Controllers
 {
+    [Authorize]
     [Route("api/[controller]")]
     [ApiController]
     public class CourseController : ControllerBase
@@ -220,5 +221,18 @@ namespace Tsi1.Api.Controllers
             return Ok();
         }
 
+
+        [HttpGet("GetProfessors/{courseId}")]
+        public async Task<IActionResult> GetProfessors(int courseId)
+        {
+            var result = await _courseService.GetProfessors(courseId);
+            if (result.HasError)
+            {
+                return BadRequest(result.Message);
+            }
+
+            return Ok(result.Data);
+        }
+
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserDetailDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserDetailDto.cs
new file mode 100644
index 0000000..6bf6136
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserDetailDto.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Tsi1.BusinessLayer.Dtos
+{
+    public class UserDetailDto
+    {
+        public int Id { get; set; }
+
+        public string Username { get; set; }
+
+        public string FirstName { get; set; }
+
+        public string LastName { get; set; }
+
+        public StudentPreviewDto Student { get; set; }
+
+        public ProfessorPreviewDto Professor { get; set; }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserPreviewDto.cs b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserPreviewDto.cs
index 1c9804b..c29cc74 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserPreviewDto.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Dtos/UserPreviewDto.cs
@@ -8,14 +8,10 @@ namespace Tsi1.BusinessLayer.Dtos
     {
         public int Id { get; set; }
 
-        public string Username { get; set; }
-
         public string FirstName { get; set; }
 
         public string LastName { get; set; }
 
-        public StudentPreviewDto Student { get; set; }
-
-        public ProfessorPreviewDto Professor { get; set; }
+        public string Email { get; set; }
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
index 00a67f4..70331a3 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Helpers/MappingProfile.cs
@@ -20,9 +20,10 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<PostMessage, PostMessagePreviewDto>();
             CreateMap<Message, MessagePreviewDto>();
             CreateMap<Message, MessageCreateDto>();
-            CreateMap<User, UserPreviewDto>();
+            CreateMap<User, UserDetailDto>();
             CreateMap<User, UserRegisterDto>();
             CreateMap<User, UserModifyDto>();
+            CreateMap<User, UserPreviewDto>();
             CreateMap<Student, StudentPreviewDto>();
             CreateMap<Professor, ProfessorPreviewDto>();
             CreateMap<Course, CourseCreateDto>();
@@ -41,9 +42,10 @@ namespace Tsi1.BusinessLayer.Helpers
             CreateMap<PostMessagePreviewDto, PostMessage>();
             CreateMap<MessagePreviewDto, Message>();
             CreateMap<MessageCreateDto, Message>();
-            CreateMap<UserPreviewDto, User>();
+            CreateMap<UserDetailDto, User>();
             CreateMap<UserRegisterDto, User>();
             CreateMap<UserModifyDto, User>();
+            CreateMap<UserPreviewDto, User>();
             CreateMap<StudentPreviewDto, Student>();
             CreateMap<ProfessorPreviewDto, Professor>();
             CreateMap<CourseCreateDto, Course>();
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs
index f13641f..54b167f 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/ICourseService.cs
@@ -27,5 +27,6 @@ namespace Tsi1.BusinessLayer.Interfaces
         Task<ServiceResult<bool>> DropOutFromCourse(int userId, int courseId);
 
         Task<ServiceResult<bool>> RemoveProfessorToCourse(ProfessorCourseDto professorCourseDto);
+        Task<ServiceResult<List<UserPreviewDto>>> GetProfessors(int courseId);
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IUserService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IUserService.cs
index 5455081..c031f87 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IUserService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IUserService.cs
@@ -14,9 +14,9 @@ namespace Tsi1.BusinessLayer.Interfaces
 
         Task<ServiceResult<User>> Create(UserRegisterDto dto, string type, int tenantId);
 
-        Task<ServiceResult<List<UserPreviewDto>>> GetAll(int tenantId);
+        Task<ServiceResult<List<UserDetailDto>>> GetAll(int tenantId);
 
-        Task<ServiceResult<UserPreviewDto>> GetById(int userId);
+        Task<ServiceResult<UserDetailDto>> GetById(int userId);
 
         Task<ServiceResult<User>> GetByUsername(string username, int tenantId);
 
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
index 6930b54..88c4278 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/CourseService.cs
@@ -323,5 +323,23 @@ namespace Tsi1.BusinessLayer.Services
 
             return result;
         }
+
+        public async Task<ServiceResult<List<UserPreviewDto>>> GetProfessors(int courseId)
+        {
+            var result = new ServiceResult<List<UserPreviewDto>>();
+
+            var users = await _context.ProfessorCourses
+                .Include(x => x.Professor)
+                    .ThenInclude(x => x.User)
+                .Where(x => x.CourseId == courseId)
+                .Select(x => x.Professor.User)
+                .ToListAsync();
+
+            var userDtos = _mapper.Map<List<UserPreviewDto>>(users);
+
+            result.Data = userDtos;
+
+            return result;
+        }
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/UserService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/UserService.cs
index 3a54107..d664244 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/UserService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/UserService.cs
@@ -135,24 +135,24 @@ namespace Tsi1.BusinessLayer.Services
             return result;
         }
 
-        public async Task<ServiceResult<List<UserPreviewDto>>> GetAll(int tenantId)
+        public async Task<ServiceResult<List<UserDetailDto>>> GetAll(int tenantId)
         {
-            var result = new ServiceResult<List<UserPreviewDto>>();
+            var result = new ServiceResult<List<UserDetailDto>>();
 
             var users = await _context.Users
                 .Where(x => x.UserType.Name != UserTypes.FacultyAdmin && x.TenantId == tenantId)
                 .ToListAsync();
 
-            var usersDto = _mapper.Map<List<UserPreviewDto>>(users);
+            var usersDto = _mapper.Map<List<UserDetailDto>>(users);
 
             result.Data = usersDto;
 
             return result;
         }
 
-        public async Task<ServiceResult<UserPreviewDto>> GetById(int userId)
+        public async Task<ServiceResult<UserDetailDto>> GetById(int userId)
         {
-            var result = new ServiceResult<UserPreviewDto>();
+            var result = new ServiceResult<UserDetailDto>();
 
             var user = await _context.Users
                 .Include(x => x.UserType)
@@ -182,7 +182,7 @@ namespace Tsi1.BusinessLayer.Services
                 return result;
             }
 
-            var userDto = _mapper.Map<UserPreviewDto>(user);
+            var userDto = _mapper.Map<UserDetailDto>(user);
 
             result.Data = userDto;
 
-- 
GitLab