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); }
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); }
/// <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); }
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); }
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); }
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); }