public object Post(object modelParam)
        {
            try
            {
                var model = JsonConvert.DeserializeObject <QuizzClassInviteRequestModel>(modelParam.ToString());
                if (model == null)
                {
                    return(null);
                }

                QuizzClassInviteRequest inviteEntity;
                model.MapToNew(out inviteEntity);
                inviteEntity.IsDeleted = true;
                _uow.QuizzClassInviteRequests.Update(inviteEntity);

                _svcContainer.QuizzClassJoinSvc.DeleteJoinRequest(model.QuizzClassId, false);

                if (model.IsAccepted)
                {
                    QuizzClassMember entity = new QuizzClassMember
                    {
                        IsNew = false,
                        IsNewInviteAccepted = true,
                        QuizzClassId        = model.QuizzClassId,
                        DependentId         = 0,
                        StudentId           = model.UserId
                    };
                    _uow.QuizzClassMembers.Add(entity);

                    var quizzClass = _uow.QuizzClasses.GetById(model.QuizzClassId);
                    var parents    = _svcContainer.DependentSvc.GetParentsOfUserId(model.UserId);
                    foreach (var item in parents)
                    {
                        if (quizzClass.TeacherId == item)
                        {
                            continue;
                        }

                        QuizzClassMember parent = new QuizzClassMember
                        {
                            IsNew = true,
                            IsNewInviteAccepted = false,
                            QuizzClassId        = model.QuizzClassId,
                            StudentId           = item,
                            DependentId         = model.UserId,
                            IsParent            = true
                        };

                        _uow.QuizzClassMembers.Add(parent);
                    }
                }

                _uow.SaveChanges();

                var newModel = _uow.QuizzClasses.GetAll()
                               .Where(qc => qc.Id == model.QuizzClassId)
                               .ProjectTo <QuizzClassModel>(new { userId = _currentUser.Id })
                               .FirstOrDefault();

                SetAge(newModel);

                newModel.TeacherName = newModel.IsTeacherQuizzmate ? newModel.TeacherFullName : newModel.TeacherUserName;

                return(newModel);
            }
            catch (Exception ex)
            {
                _svcContainer.LoggingSvc.Log(ex);
                return(null);
            }
        }
        // accept/reject request
        public object Post(object modelParam)
        {
            try
            {
                var model = JsonConvert.DeserializeObject <QuizzClassJoinRequestModel>(modelParam.ToString());
                if (model == null)
                {
                    return(null);
                }

                QuizzClassJoinRequest requestEntity;
                model.MapToNew(out requestEntity);
                requestEntity.IsDeleted = true;
                _uow.QuizzClassJoinRequests.Update(requestEntity);

                _svcContainer.QuizzClassInviteSvc.DeleteInviteRequest(model.QuizzClassId, false);

                if (model.IsAccepted)
                {
                    QuizzClassMember entity = new QuizzClassMember
                    {
                        IsNew = true,
                        IsNewInviteAccepted = false,
                        QuizzClassId        = model.QuizzClassId,
                        StudentId           = model.UserId,
                        DependentId         = 0,
                        IsParent            = false
                    };
                    _uow.QuizzClassMembers.Add(entity);

                    var quizzClass = _uow.QuizzClasses.GetById(model.QuizzClassId);

                    var parents = _svcContainer.DependentSvc.GetParentsOfUserId(model.UserId);
                    foreach (var item in parents)
                    {
                        if (quizzClass.TeacherId == item)
                        {
                            continue;
                        }

                        QuizzClassMember parent = new QuizzClassMember
                        {
                            IsNew = true,
                            IsNewInviteAccepted = false,
                            QuizzClassId        = model.QuizzClassId,
                            StudentId           = item,
                            DependentId         = model.UserId,
                            IsParent            = true
                        };

                        _uow.QuizzClassMembers.Add(parent);
                    }

                    _uow.SaveChanges();

                    var memberModel = _uow.QuizzClassMembers.GetAll()
                                      .Where(qcm => qcm.Id == entity.Id)
                                      .ProjectTo <QuizzClassMemberModel>()
                                      .FirstOrDefault();

                    UpdateModel(memberModel);
                    return(memberModel);
                }
                else
                {
                    _uow.SaveChanges();
                    return(model); // return dummy
                }
            }
            catch (Exception ex)
            {
                _svcContainer.LoggingSvc.Log(ex);
                return(null);
            }
        }
        // accepted/rejected by user
        public bool Patch(object modelParam)
        {
            try
            {
                var model = JsonConvert.DeserializeObject <QuizzClassInviteRequestModel>(modelParam.ToString());
                if (model == null)
                {
                    return(false);
                }

                var inviteEntity = _uow.QuizzClassInviteRequests.GetAll()
                                   .Where(qci => qci.QuizzClassId == model.QuizzClassId && qci.UserId == _currentUser.Id && qci.IsDeleted == false)
                                   .FirstOrDefault();
                inviteEntity.IsDeleted = true;
                _uow.QuizzClassInviteRequests.Update(inviteEntity);

                _svcContainer.QuizzClassJoinSvc.DeleteJoinRequest(model.QuizzClassId, false);

                if (model.IsAccepted)
                {
                    QuizzClassMember entity = new QuizzClassMember
                    {
                        IsNew = false,
                        IsNewInviteAccepted = true,
                        QuizzClassId        = model.QuizzClassId,
                        StudentId           = _currentUser.Id,
                        DependentId         = 0,
                        IsParent            = false
                    };
                    _uow.QuizzClassMembers.Add(entity);

                    var quizzClass = _uow.QuizzClasses.GetById(model.QuizzClassId);
                    var parents    = _svcContainer.DependentSvc.GetParentsOfUserId(model.UserId);
                    foreach (var item in parents)
                    {
                        if (quizzClass.TeacherId == item)
                        {
                            continue;
                        }

                        QuizzClassMember parent = new QuizzClassMember
                        {
                            IsNew = true,
                            IsNewInviteAccepted = false,
                            QuizzClassId        = model.QuizzClassId,
                            StudentId           = item,
                            DependentId         = model.UserId,
                            IsParent            = true
                        };

                        _uow.QuizzClassMembers.Add(parent);
                    }
                }

                _uow.SaveChanges();

                return(true);
            }
            catch (Exception ex)
            {
                _svcContainer.LoggingSvc.Log(ex);
                return(false);
            }
        }