using System; using System.Collections.Generic; using System.Security.Claims; using OnlineAssessment.Common; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using OnlineAssessment.Data.EFCore; using OnlineAssessment.Domain.Models; using OnlineAssessment.Domain.ViewModels; namespace OnlineAssessment.V1.Controllers { [Authorize] [ApiVersion("1.0")] [Route("v{version:apiVersion}/[controller]")] public class UserGroupsController : BaseController { EFCoreUserGroupRepository _repository; string responseMessage = string.Empty; public UserGroupsController(EFCoreUserGroupRepository repository) : base(repository) { _repository = repository; } /// /// Get list of all User Groups of a class /// /// [HttpGet("Classes/{class_id}")] [Authorize(Roles = "Admin")] public IActionResult GetAllUserGroupsOfTheClass(int class_id, [FromQuery] string sortBy, string sortOrder) { IActionResult returnResponse; //Check: class validity ClassViewModel cls = _repository.GetAnyClassById(base.InstituteId, class_id); if (cls == null || cls.isActive == false) { responseMessage = _repository.GetMessageByCode(Message.InvalidInput.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } List iList = _repository.GetAllUserGroupsOfTheClass(base.InstituteId, class_id, sortBy, sortOrder); if (iList == null) { responseMessage = _repository.GetMessageByCode(Message.NoData.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(iList)); } return returnResponse; } /// /// Get list of all User Groups of the institute /// /// [HttpGet("list")] [Authorize(Roles = "Admin")] public IActionResult GetAllUserGroups([FromQuery] string sortBy, string sortOrder) { IActionResult returnResponse; int user_id = Security.GetIdFromJwtToken(UserClaim.UserId, HttpContext.User.Identity as ClaimsIdentity); List iList = _repository.GetAllUserGroups(base.InstituteId, user_id, sortBy, sortOrder); if (iList == null) { responseMessage = _repository.GetMessageByCode(Message.NoData.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(iList)); } return returnResponse; } /// /// Get the list of User Groups of a user /// /// [HttpGet] public IActionResult Get() { IActionResult returnResponse; int user_id = Security.GetIdFromJwtToken(UserClaim.UserId, HttpContext.User.Identity as ClaimsIdentity); dynamic entity = _repository.GetUserGroupsByUserId(base.InstituteId, user_id); if (entity == null) { responseMessage = _repository.GetMessageByCode(Message.ObjectNotFound.ToString(), Constant.UserGroup); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(entity)); } return returnResponse; } /// /// Get the detail of a User Group /// /// /// [HttpGet("{user_group_id}")] [Authorize(Roles = "Admin")] public IActionResult Get(int user_group_id) { IActionResult returnResponse; dynamic entity = _repository.GetUserGroupById(base.InstituteId, user_group_id); if (entity == null) { responseMessage = _repository.GetMessageByCode(Message.ObjectNotFound.ToString(), Constant.UserGroup); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(entity)); } return returnResponse; } /// /// Add a new User Group /// /// /// /// [HttpPost("Classes/{class_id}")] [Authorize(Roles = "Admin")] public IActionResult AddUserGroup(int class_id, [FromBody] UserGroupAddModel usergroup) { IActionResult returnResponse; //Check: class validity if (usergroup == null || class_id != usergroup.class_id) { responseMessage = _repository.GetMessageByCode(Message.InvalidInput.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } UserGroupViewModel newUserGrup = _repository.AddUserGroupOfTheClass(base.InstituteId, usergroup); if (newUserGrup.id > 0) //Successfully Added { returnResponse = Ok(ReturnResponse.GetSuccessStatus(newUserGrup)); } else { responseMessage = _repository.GetMessageByCode(Message.ObjectNotAdded.ToString(), Constant.UserGroup); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } return returnResponse; } /// /// Update a new User Group /// /// /// /// [HttpPut("{user_group_id}")] [Authorize(Roles = "Admin")] public IActionResult UpdateUserGroupOfTheInstitute(int user_group_id, [FromBody] UserGroupEditModel usergroup) { IActionResult returnResponse = null; UserGroupViewModel newUserGrup = _repository.UpdateUserGroupOfTheInstitute(base.InstituteId, user_group_id, usergroup); if (newUserGrup == null) { responseMessage = _repository.GetMessageByCode(Message.ObjectNotUpdated.ToString(), Constant.UserGroup); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(newUserGrup)); } return returnResponse; } /// /// Get users of user group /// /// /// [HttpGet("{user_group_id}/Users")] [Authorize(Roles = "Admin")] public IActionResult GetUsersOfUserGroup(int user_group_id) { IActionResult returnResponse; dynamic entity = _repository.GetUserOfTheUserGroup(base.InstituteId, user_group_id); if (entity == null) { responseMessage = _repository.GetMessageByCode(Message.ObjectNotFound.ToString(), Constant.Role); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(entity)); } return returnResponse; //TODO: GetUsersOfUserGroup >>>>>>>>>>>>>>>>>>>>>>> Not Implemented Exception //return Ok(ReturnResponse.GetFailureStatus(new NotImplementedException().Message)); } /// /// Get users of user group /// /// /// [HttpDelete("{user_group_id}")] [Authorize(Roles = "Admin")] public IActionResult DeleteUserGroup(int user_group_id) { IActionResult returnResponse; int user_id = Security.GetIdFromJwtToken(UserClaim.UserId, HttpContext.User.Identity as ClaimsIdentity); dynamic entity = _repository.DeleteTheUserGroup(base.InstituteId, user_id, user_group_id); if (entity == null) { responseMessage = _repository.GetMessageByCode(Message.ObjectNotFound.ToString(), Constant.Role); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(entity)); } return returnResponse; } /// /// Attch users to the user group /// /// /// /// [HttpPost("{user_group_id}/AttachUsers")] [Authorize(Roles = "Admin")] public IActionResult AttachUsersToUserGroup(int user_group_id, [FromBody] UserIdList userIdList) { IActionResult returnResponse = null; string return_message = string.Empty; if (userIdList == null || userIdList.IdList == null || userIdList.IdList.Count == 0) { responseMessage = _repository.GetMessageByCode(Message.InvalidInput.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } //TODO: check if works fine int recordsEffected = _repository.AttachUsersToUserGroup(base.InstituteId, user_group_id, userIdList, out return_message); if (recordsEffected < 0) { responseMessage = _repository.GetMessageByCode(Message.FailedToAttach.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(return_message)); } return returnResponse; } /// /// Attch users to the user group /// /// /// /// [HttpPost("{user_group_id}/DetachUsers")] [Authorize(Roles = "Admin")] public IActionResult DetachUsersToUserGroup(int user_group_id, [FromBody] UserIdList userIdList) { IActionResult returnResponse = null; string return_message = string.Empty; if (userIdList == null || userIdList.IdList == null || userIdList.IdList.Count == 0) { responseMessage = _repository.GetMessageByCode(Message.InvalidInput.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { int recordsEffected = _repository.DetachUsersToUserGroup(user_group_id, userIdList, out return_message); if (recordsEffected < 0) { responseMessage = _repository.GetMessageByCode(Message.FailedToDetach.ToString()); returnResponse = Ok(ReturnResponse.GetFailureStatus(responseMessage)); } else { returnResponse = Ok(ReturnResponse.GetSuccessStatus(return_message)); } } return returnResponse; } } }