public void AddOrUpdateChatPermission(AddOrUpdateChatPermissionOptions options) { if (string.IsNullOrEmpty(options.UserLogin) || string.IsNullOrEmpty(options.InitiatorLogin) || !this.userService.DoesUserExist(options.UserLogin) || (options.InitiatorLogin != SYSTEM_PERMISSION && !this.userService.DoesUserExist(options.InitiatorLogin))) { throw new ArgumentException($"Chat #{options.ChatId.ToString()} or " + $"user #{options.UserLogin.ToString()} or" + $"initiator user #{options.InitiatorLogin.ToString()} does not exist"); } if (options.InitiatorLogin != SYSTEM_PERMISSION && options.InitiatorLogin != options.UserLogin && !DoesUserHavePermission(options.InitiatorLogin, options.ChatId, ChatPermissionTypes.Moderate)) { throw new InvalidOperationException($"User {options.InitiatorLogin} does not have permissions" + $"to assign to {options.UserLogin} new chat permission"); } var entityChatPermission = this.chatPermissionRepository.GetChatPermission(options.UserLogin, options.ChatId); entityChatPermission = entityChatPermission ?? mapper.Map <DataEntities.ChatPermission>(options); entityChatPermission.PermissionType = (int)options.PermissionType; entityChatPermission.ChatUser = this.userRepository.GetUser(options.UserLogin); entityChatPermission.Chat = this.chatRepository.GetChat(options.ChatId); entityChatPermission.LastUpdate = DateTime.Now; this.chatPermissionRepository.SaveChatPermission(entityChatPermission); }
private DataEntities.Chat CreateChat(CreateOrUpdateChatOptions options) { var chatMemberLogins = (IList <string>)options.ExtraData; var chat = mapper.Map <DataEntities.Chat>(options); chat.LastUpdate = DateTime.Now; chatRepository.SaveChat(chat); var initiator = this.userService.GetUser(options.InitiatorLogin); var adminChatPermission = new AddOrUpdateChatPermissionOptions( userLogin: initiator.Login, chatId: chat.ChatId, permissionType: ChatPermissionTypes.Administrate, initiatorLogin: ChatPermissionService.SYSTEM_PERMISSION, lastUpdate: DateTime.Now); this.chatPermissionService.AddOrUpdateChatPermission(adminChatPermission); foreach (var userLogin in chatMemberLogins) { var userChatPermission = new AddOrUpdateChatPermissionOptions( userLogin: userLogin, chatId: chat.ChatId, permissionType: chat.ChatType == (int)ChatTypes.PrivateChat ? ChatPermissionTypes.Administrate : ChatPermissionTypes.ReadWrite, initiatorLogin: initiator.Login, lastUpdate: DateTime.Now); this.chatPermissionService.AddOrUpdateChatPermission(userChatPermission); } return(chat); }
private DataEntities.Chat UpdateChat(CreateOrUpdateChatOptions options) { var chat = this.chatRepository.GetChat(options.ChatId); chat.Title = options.Title; chat.LastUpdate = DateTime.Now; this.chatRepository.SaveChat(chat); var chatMemberLogins = (IList <string>)options.ExtraData; var existingChatMembers = chat.ChatPermissions .Where(chp => chp.Chat.ChatId == chat.ChatId) .Select(chp => chp.ChatUser.Login) .ToList(); var newChatMembers = chatMemberLogins .Where(nchm => !existingChatMembers.Contains(nchm)); foreach (var userLogin in newChatMembers) { var userChatPermission = new AddOrUpdateChatPermissionOptions( userLogin: userLogin, chatId: chat.ChatId, permissionType: chat.ChatType == (int)ChatTypes.PrivateChat ? ChatPermissionTypes.Administrate : ChatPermissionTypes.ReadWrite, initiatorLogin: options.InitiatorLogin, lastUpdate: DateTime.Now); this.chatPermissionService.AddOrUpdateChatPermission(userChatPermission); } return(chat); }
public OperationResult UpdateUserPermissionInChat(AddOrUpdateChatPermissionOptions options) { OperationResult operationResult; try { var domainOptions = mapper.Map <DomainOptions.AddOrUpdateChatPermissionOptions>(options); this.chatPermissionService.AddOrUpdateChatPermission(domainOptions); if (this.chatServiceCallbacks.ContainsKey(options.ChatMemberLogin)) { var domainResultPermission = this.chatPermissionService.GetChatPermission( options.ChatMemberLogin, options.ChatId); var resultPermissionOptions = this.mapper.Map <AddOrUpdateChatPermissionOptions>(domainResultPermission); var userChatServiceCallback = this.chatServiceCallbacks[options.ChatMemberLogin]; userChatServiceCallback.UpdateChatPermission(resultPermissionOptions); if (options.PermissionType == ChatPermissionTypes.Banned || options.PermissionType == ChatPermissionTypes.None) { userChatServiceCallback.RemoveChat(domainOptions.ChatId); } } operationResult = new OperationResult(OperationResultTypes.Success); } catch (Exception exception) { operationResult = new OperationResult( operationResultType: OperationResultTypes.Failure, message: exception.ToString()); } return(operationResult); }
public void UpdateChatPermission(AddOrUpdateChatPermissionOptions options) { var chatPermission = this.mapper.Map <ChatPermission>(options); if (this.userService.IsCurrentClientUser(options.ChatMemberLogin)) { this.userService.SaveClientChatPermission(chatPermission); } ChatEventsConnector.OnUpdateChatPermission(chatPermission); }
public AddOrUpdateChatPermissionOptions CreateAddOrUpdateChatPermissionOptions( string userLogin, int chatId, ChatPermissionTypes permissionType, string initiatorLogin) { var options = new AddOrUpdateChatPermissionOptions(); options.ChatId = chatId; options.ChatMemberLogin = userLogin; options.PermissionType = permissionType; options.InitiatorLogin = initiatorLogin; return(options); }