Exemple #1
0
        public RemoveFromFriendsResponse RemoveFromFriends(ISession session, RemoveFromFriendsRequest request)
        {
            var response = request.CreateResponse <RemoveFromFriendsResponse>();

            response.Success = true;

            if (session.User.Friends.All(i => i.Id != request.TargetUserId))
            {
                response.Success = false;
                return(response);
            }

            using (var uow = UnitOfWorkFactory.Create())
            {
                uow.Attach(session.User);
                var friend = uow.UsersRepository.FirstMatching(UserSpecification.Id(request.TargetUserId));
                if (friend == null)
                {
                    response.Success = false;
                }
                else
                {
                    session.User.Friends.Remove(friend);
                    uow.Commit();
                }
            }
            return(response);
        }
Exemple #2
0
        public GetUserDetailsResponse GetUserDetails(ISession session, GetUserDetailsRequest request)
        {
            var response = request.CreateResponse <GetUserDetailsResponse>();

            using (var uow = UnitOfWorkFactory.Create())
            {
                Specification <User> spec = null;
                if (request.UserId != 0)
                {
                    spec = UserSpecification.Id(request.UserId);
                }
                else if (!string.IsNullOrEmpty(request.Name))
                {
                    spec = UserSpecification.Name(request.Name);
                }
                else
                {
                    return(response); //invalid request
                }

                var user = uow.UsersRepository.FirstMatching(spec);
                if (user != null)
                {
                    response.User     = user.ProjectedAs <UserDto>();
                    response.IsFriend = session.User.Friends.Any(p => p.Id == user.Id);

                    uow.Attach(session.User);
                }
            }
            return(response);
        }
Exemple #3
0
        /// <summary>
        /// Resets user's photo to default one
        /// </summary>
        public ResetPhotoResponse ResetPhoto(ISession session, ResetPhotoRequest request)
        {
            var response = request.CreateResponse <ResetPhotoResponse>();

            try
            {
                using (var uow = UnitOfWorkFactory.Create())
                {
                    var target = uow.UsersRepository.FirstMatching(UserSpecification.Id(request.TargetId));
                    if (target != null)
                    {
                        response.NewPhotoId = target.ResetPhoto(session.User);
                        uow.Commit();
                        response.Success = true;
                    }
                }
            }
            catch (ModeratorsRightsRequiredException)
            {
                response.Success = false;
            }
            if (response.Success)
            {
                _profileChangesNotificator.NotifyEverybodyInChatAboutProfileChanges(request.TargetId, new Dictionary <string, object> {
                    { "PhotoId", response.NewPhotoId }
                });
            }
            return(response);
        }
Exemple #4
0
        public BanResponse Ban(ISession session, BanRequest request)
        {
            var response = request.CreateResponse <BanResponse>();

            User targetUser = null;

            using (var uow = UnitOfWorkFactory.Create())
            {
                targetUser = uow.UsersRepository.FirstMatching(UserSpecification.Id(request.TargetUserId));
                if (targetUser != null)
                {
                    try
                    {
                        if (request.Ban)
                        {
                            targetUser.Ban(session.User);
                        }
                        else
                        {
                            targetUser.UnBan(session.User);
                        }

                        response.Result = BanResponseType.Success;
                        uow.Commit();
                    }
                    catch (ModeratorsRightsRequiredException)
                    {
                        response.Result = BanResponseType.Failed;
                    }
                }
            }

            if (response.Result == BanResponseType.Success && targetUser != null)
            {
                //let's kick him\her from the server!
                _sessionManager.CloseSessionByUserId(targetUser.Id);

                //send a notification to everybody that we've banned him\her
                _sessionManager.SendToEachChatSessions(
                    new BanNotification
                {
                    Ban        = request.Ban,
                    ActorName  = session.User.Name,
                    Reason     = request.Reason,
                    TargetId   = session.User.Id,
                    TargetName = targetUser.Name
                });
            }

            return(response);
        }
Exemple #5
0
        public DevoiceResponse Devoice(ISession session, DevoiceRequest request)
        {
            var response = request.CreateResponse <DevoiceResponse>();

            User targetUser = null;

            using (var uow = UnitOfWorkFactory.Create())
            {
                targetUser = uow.UsersRepository.FirstMatching(UserSpecification.Id(request.TargetUserId));
                if (targetUser != null)
                {
                    try
                    {
                        if (request.Devoice)
                        {
                            targetUser.Devoice(session.User);
                        }
                        else
                        {
                            targetUser.BringVoiceBack(session.User);
                        }
                        response.Result = DevoiceResponseType.Success;
                        uow.Commit();
                    }
                    catch (ModeratorsRightsRequiredException)
                    {
                        response.Result = DevoiceResponseType.Failed;
                    }
                }
            }

            if (response.Result == DevoiceResponseType.Success && targetUser != null)
            {
                //send a notification to everybody that we've devoiced him\her
                _sessionManager.SendToEachChatSessions(
                    new DevoiceNotification
                {
                    ActorName  = session.User.Name,
                    Reason     = request.Reason,
                    Devoice    = request.Devoice,
                    TargetId   = session.User.Id,
                    TargetName = targetUser.Name
                });
            }
            return(response);
        }
Exemple #6
0
        public RemoveModershipResponse RemoveModership(ISession session, RemoveModershipRequest request)
        {
            var response = request.CreateResponse <RemoveModershipResponse>();

            if (session.User.Role != UserRole.Admin)
            {
                //access denied
                return(response);
            }

            User targetUser = null;

            using (var uow = UnitOfWorkFactory.Create())
            {
                targetUser = uow.UsersRepository.FirstMatching(UserSpecification.Id(request.TargetUserId));
                if (targetUser == null)
                {
                    //User not found
                    return(response);
                }

                targetUser.RemoveModeratorship();
                uow.Commit();
            }

            response.Success = true;
            _sessionManager.SendToEachChatSessions(new ModershipRemovedInfo
            {
                ActorName  = session.User.Name,
                TargetName = targetUser.Name,
                TargetId   = targetUser.Id,
            });

            //success
            return(response);
        }