public async Task <ActionResult <GroupRequests> > PostGroupRequests(GroupRequests groupRequests)
        {
            _context.GroupRequests.Add(groupRequests);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetGroupRequests", new { id = groupRequests.GroupRequestId }, groupRequests));
        }
        public async Task <IActionResult> PutGroupRequests(int id, GroupRequests groupRequests)
        {
            if (id != groupRequests.GroupRequestId)
            {
                return(BadRequest());
            }

            _context.Entry(groupRequests).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!GroupRequestsExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public ActionResult RejectJoinReq(GroupRequests req)
        {
            if (GroupAuth.IsAdminOrCreator(req.GroupId, User.Identity.GetUserId()))
            {
                GroupRequests request = db.GroupRequests.Where(r => r.GroupId == req.GroupId && r.UserId == req.UserId).FirstOrDefault();
                if (request is null)
                {
                    return(Redirect("/Groups/JoinRequests/" + req.GroupId));
                }
                else
                {
                    string author    = request.User.Email;
                    string notifBody = "<p>Ne pare rau, </p>";
                    notifBody += "<p>Cererea dumneavoastra pentru a face aparte din grupul <b>" + request.Group.GroupName + "</b> a fost respinsa :(</p>";
                    notifBody += "<br/> <p>Echipa <b>DAW-social-app.</b></p>";
                    Email.SendEmailNotification(author, "Cerere respinsa!", notifBody);

                    db.GroupRequests.Remove(request);
                    db.SaveChanges();
                    TempData["message"] = "Cererea userului " + db.Users.Find(req.UserId).UserName + " a fost stearsa";
                    return(Redirect("/Groups/JoinRequests/" + request.GroupId));
                }
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
        public ActionResult Join(GroupRequests req)
        {
            Group group  = db.Groups.Find(req.GroupId);
            var   userId = User.Identity.GetUserId();

            if (group.Requests.Where(r => r.UserId == userId).Count() == 0 && group.Users.Where(u => u.UserId == userId).Count() == 0)
            {
                try
                {
                    GroupRequests newReq = new GroupRequests();
                    newReq.GroupId = group.GroupId;
                    newReq.UserId  = User.Identity.GetUserId();
                    db.GroupRequests.Add(newReq);
                    db.SaveChanges();
                }
                catch
                {
                    return(RedirectToAction("Index"));
                }
                return(RedirectToAction("Index"));
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult AcceptJoinReq(GroupRequests req)
        {
            if (GroupAuth.IsAdminOrCreator(req.GroupId, User.Identity.GetUserId()))
            {
                GroupRequests request = db.GroupRequests.Where(r => r.GroupId == req.GroupId && r.UserId == req.UserId).FirstOrDefault();
                if (request is null)
                {
                    return(Redirect("/Groups/JoinRequests/" + req.GroupId));
                }
                else
                {
                    string author    = request.User.Email;
                    string notifBody = "<p>Bine ai venit in grupul <b>" + request.Group.GroupName + "</b>. </p><br/>";
                    notifBody += "<p>Cererea dumneavoastra pentru a face aparte din grupul <b>" + request.Group.GroupName + "</b> a fost acceptata</p>";
                    notifBody += "<br/> <p>Echipa <b>DAW-social-app.</b></p>";
                    Email.SendEmailNotification(author, "Cerere acceptata!", notifBody);

                    GroupUsers gu = new GroupUsers();
                    gu.GroupId = request.GroupId;
                    gu.UserId  = request.UserId;
                    gu.RoleId  = (from gr in db.GroupRoles
                                  where gr.RoleName == "User"
                                  select gr.RoleId).FirstOrDefault();
                    db.GroupUsers.Add(gu);

                    db.GroupRequests.Remove(request);

                    db.SaveChanges();
                    TempData["message"] = "Cererea userului " + db.Users.Find(req.UserId).UserName + " a fost acceptata";
                    return(Redirect("/Groups/JoinRequests/" + request.GroupId));
                }
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }