示例#1
0
        public async Task <IActionResult> Send(int requestedGroupId, string description)
        {
            AddJoinRequestDto dto = new AddJoinRequestDto {
                RequestedGroupId = requestedGroupId, CreatedAt = DateTime.Now, Description = description
            };
            ServiceResponse <AddJoinRequestDto> response = await _joinRequestService.SendJoinRequest(dto);

            if (response.Success)
            {
                return(Ok(response));
            }
            return(NotFound(response));
        }
示例#2
0
        public async Task <ServiceResponse <AddJoinRequestDto> > SendJoinRequest(AddJoinRequestDto newJoinRequest)
        {
            ServiceResponse <AddJoinRequestDto> response = new ServiceResponse <AddJoinRequestDto>();
            User user = await _context.Users.Include(u => u.ProjectGroups)
                        .ThenInclude(g => g.ProjectGroup)
                        .Include(u => u.OutgoingJoinRequests)
                        .FirstOrDefaultAsync(u => u.Id == GetUserId());

            ProjectGroup requestedGroup = await _context.ProjectGroups.Include(g => g.AffiliatedSection)
                                          .Include(g => g.GroupMembers).Include(g => g.IncomingJoinRequests)
                                          .FirstOrDefaultAsync(rg => rg.Id == newJoinRequest.RequestedGroupId);

            if (requestedGroup == null)
            {
                response.Data    = null;
                response.Message = "There is no group with this id";
                response.Success = false;
                return(response);
            }

            Section section = await _context.Sections.FirstOrDefaultAsync(s => (s.Id == requestedGroup.AffiliatedSectionId));

            if (user == null)
            {
                response.Data    = null;
                response.Message = "There is no user with this Id";
                response.Success = false;
                return(response);
            }
            if (section == null)
            {
                response.Data    = null;
                response.Message = "There is no section with this Id ";
                response.Success = false;
                return(response);
            }


            ProjectGroup userGroup = new ProjectGroup {
                AffiliatedSectionId = -1
            };

            foreach (ProjectGroupUser pgu in user.ProjectGroups)
            {
                if (pgu.ProjectGroup.AffiliatedCourseId == requestedGroup.AffiliatedCourseId && pgu.ProjectGroup.AffiliatedSectionId == requestedGroup.AffiliatedSectionId)
                {
                    userGroup = pgu.ProjectGroup;
                    break;
                }
            }
            if (userGroup.AffiliatedSectionId == -1)
            {
                response.Data    = null;
                response.Message = "You are not in the same section with this group";
                response.Success = false;
                return(response);
            }
            if (userGroup.Id == requestedGroup.Id)
            {
                response.Data    = null;
                response.Message = "You are already in this group";
                response.Success = false;
                return(response);
            }

            if (userGroup.ConfirmationState == true)
            {
                response.Data    = null;
                response.Message = "Your group is finalized.";
                response.Success = false;
                return(response);
            }
            if (requestedGroup.ConfirmationState == true)
            {
                response.Data    = null;
                response.Message = "The group you want to join is finalized.";
                response.Success = false;
                return(response);
            }
            if (requestedGroup.GroupMembers.Count >= _context.Courses.FirstOrDefault(c => c.Id == userGroup.AffiliatedCourseId).MaxGroupSize)
            {
                response.Data    = null;
                response.Message = "The group you want to join is full.";
                response.Success = false;
                return(response);
            }
            if (requestedGroup.GroupMembers.Count == 0)
            {
                response.Data    = null;
                response.Message = "The group is empty";
                response.Success = false;
                return(response);
            }


            foreach (JoinRequest jr in requestedGroup.IncomingJoinRequests)
            {
                if (jr.RequestingStudentId == GetUserId() && !jr.Resolved)
                {
                    response.Data    = null;
                    response.Message = "You already sent a join request to this group that is not resolved yet.";
                    response.Success = false;
                    return(response);
                }
            }

            JoinRequest createdJoinRequest = new JoinRequest
            {
                RequestingStudent   = user,
                RequestingStudentId = user.Id,
                RequestedGroup      = requestedGroup,
                RequestedGroupId    = requestedGroup.Id,
                CreatedAt           = newJoinRequest.CreatedAt,
                AcceptedNumber      = 0,
                Accepted            = false,
                Resolved            = false,
                VotedStudents       = "",
                Description         = newJoinRequest.Description
            };

            requestedGroup.IncomingJoinRequests.Add(createdJoinRequest);
            user.OutgoingJoinRequests.Add(createdJoinRequest);

            _context.ProjectGroups.Update(requestedGroup);
            _context.Users.Update(user);
            _context.JoinRequests.Add(createdJoinRequest);
            await _context.SaveChangesAsync();

            response.Data    = newJoinRequest;
            response.Message = "Join request is successfully sent";
            response.Success = true;

            return(response);
        }