public async Task <IActionResult> GetGroup(int id) { try { var group = await db.Groups.Include(g => g.ChildGroups).Include(g => g.Parent).FirstOrDefaultAsync(g => g.GroupId == id); if (group == null) { return(BadRequest()); } var dto = new GroupDetailsDTO() { Id = group.GroupId, Name = group.Name, Description = group.Description, ParentGroup = new GroupDTO() { Name = group.Parent?.Name, Description = group.Parent?.Description, Id = (group.Parent?.GroupId).GetValueOrDefault() }, ChildGroups = group.ChildGroups.Select(cg => new GroupDTO() { Name = cg.Name, Description = cg.Description, Id = cg.GroupId }).ToList() }; return(Ok(dto)); } catch (Exception) { return(StatusCode((int)HttpStatusCode.InternalServerError)); } }
public IActionResult GroupDetails(Guid Id) { try { var CurrentUser = _context.Users.Find(userManager.GetUserId(User)); if (CurrentUser is null) { throw new DomainException(ErrorMessages.NotSignedIn); } var existingAccount = _userStore.GetByIdentityUserId(CurrentUser.Id); if (existingAccount.AccountStatus.Equals(Status.Suspended)) { signInManager.SignOutAsync(); } var existingGroup = _GroupStore.GetGroupById(Id); if (existingGroup is null) { throw new DomainException(ErrorMessages.GroupDoesNotExist); } var groupMembers = _GroupStore.GetGroupMembers(existingGroup.Id); var Owner = _GroupStore.GetGroupOwner(existingGroup.Id); var Requests = _GroupRequestStore.GetGroupRequestsOfGroup(existingGroup.Id); var RequestDTOs = new List <GroupRequestDTO>(); foreach (var request in Requests) { var requestUser = _GroupRequestStore.GetGroupRequestUser(request.RequestUserId); var GroupRequestDTO = new GroupRequestDTO() { Username = requestUser.Username, Id = request.Id, GroupID = request.GroupId, RequestDate = request.RequestDate, RequestUserId = request.RequestUserId }; RequestDTOs.Add(GroupRequestDTO); } var CurrentUserAsRequestUser = RequestDTOs.FirstOrDefault(x => x.Username == CurrentUser.UserName); var CurrentUserAsMember = groupMembers.FirstOrDefault(x => x.Username == CurrentUser.UserName); var GroupAdmin = _GroupStore.GetGroupMembers(Id) .FirstOrDefault(x => x.Type.Equals(GroupUserType.Admin) && x.UserId.Equals(CurrentUser.Id)); var GroupDetailsDTO = new GroupDetailsDTO() { Id = existingGroup.Id, Name = existingGroup.Name, Description = existingGroup.Description, CreationDate = existingGroup.CreationDate, GroupOwner = Owner.Username, CurrentUsername = CurrentUser.UserName, GroupRequests = RequestDTOs, PendingRequest = (CurrentUserAsRequestUser != null) ? true : false, ExistingMember = (CurrentUserAsMember != null) ? true : false, Admin = (GroupAdmin != null) ? true : false }; foreach (var member in groupMembers) { var GroupMemberDTO = new GroupMemberDTO() { Id = member.Id, Username = member.Username, UserId = member.UserId, Type = member.Type }; GroupDetailsDTO.GroupMembers.Add(GroupMemberDTO); } return(View(GroupDetailsDTO)); } catch (DomainException ex) { _logger.LogError(ex.Message); if (ex.Message.Equals(ErrorMessages.NotSignedIn)) { return(RedirectToAction(ActionName.Login, ControllerName.Accounts)); } return(RedirectToAction(ActionName.NotFound, ControllerName.Accounts)); } catch (Exception ex) { _logger.LogError(ex.Message); return(RedirectToAction(ActionName.ServerError, ControllerName.Accounts)); } }