private async Task DeleteSocialAccountInGeneralDb(SocialAccount entity) { int?siteIdOrNull = CurrentUnitOfWork.GetSiteId(); if (siteIdOrNull == null) { throw new InvalidOperationException("site id must have value."); } int siteId = siteIdOrNull.Value; if (entity.SocialUser.Source == SocialUserSource.Facebook) { await UnitOfWorkManager.RunWithNewTransaction(null, async() => { var accoutns = _siteSocialAccountRepo.FindAll().Where(t => t.SiteId == siteId && t.FacebookPageId == entity.SocialUser.OriginalId).ToList(); foreach (var account in accoutns) { await _siteSocialAccountRepo.DeleteAsync(account); } }); } if (entity.SocialUser.Source == SocialUserSource.Twitter) { await UnitOfWorkManager.RunWithNewTransaction(null, async() => { var accoutns = _siteSocialAccountRepo.FindAll().Where(t => t.SiteId == siteId && t.TwitterUserId == entity.SocialUser.OriginalId).ToList(); foreach (var account in accoutns) { await _siteSocialAccountRepo.DeleteAsync(account); } }); } }
public async Task <SocialUser> GetOrCreateTwitterUser(IUser twitterUser) { var user = FindByOriginalId(twitterUser.IdStr, SocialUserSource.Twitter); if (user == null) { user = new SocialUser { OriginalId = twitterUser.IdStr, Name = twitterUser.Name, ScreenName = twitterUser.ScreenName, Avatar = twitterUser.ProfileImageUrl, Source = SocialUserSource.Twitter, Type = SocialUserType.Customer, OriginalLink = TwitterHelper.GetUserUrl(twitterUser.ScreenName) }; await UnitOfWorkManager.RunWithNewTransaction(CurrentUnitOfWork.GetSiteId(), async() => { await Repository.InsertAsync(user); CurrentUnitOfWork.SaveChanges(); }); } if (user.IsDeleted) { user.IsDeleted = false; user.Type = SocialUserType.Customer; Update(user); } return(user); }
public bool CheckIfDepartmentEnable() { int siteId = CurrentUnitOfWork.GetSiteId().HasValue ? CurrentUnitOfWork.GetSiteId().Value : -1; bool ifDepartmentEnable = false; UnitOfWorkManager.RunWithNewTransaction(null, () => { ifDepartmentEnable = _configRepository.FindAll().Where(t => t.Id == siteId).First().IfDepartmentEnable; }); return(ifDepartmentEnable); }
private async Task <TwitterAuth> FindAndDeleteAsync(string authorizationId) { var auth = Repository.FindAll().Where(t => t.AuthorizationId == authorizationId).FirstOrDefault(); if (auth != null) { await UnitOfWorkManager.RunWithNewTransaction(CurrentUnitOfWork.GetSiteId(), async() => { await Repository.DeleteAsync(auth.Id); }); } return(auth); }
public async Task <List <SocialUser> > GetOrCreateSocialUsers(string token, List <FbUser> fbSenders) { var uniqueFbSenders = new List <FbUser>(); foreach (var fbSender in fbSenders) { if (!uniqueFbSenders.Any(t => t.id == fbSender.id)) { uniqueFbSenders.Add(fbSender); } } List <SocialUser> senders = new List <SocialUser>(); var fbSenderIds = uniqueFbSenders.Select(t => t.id).ToList(); var existingUsers = FindAllWithDeleted().Where(t => t.Source == SocialUserSource.Facebook && fbSenderIds.Contains(t.OriginalId)).ToList(); senders.AddRange(existingUsers); uniqueFbSenders.RemoveAll(t => existingUsers.Any(e => e.OriginalId == t.id)); foreach (var fbSender in uniqueFbSenders) { var sender = new SocialUser() { OriginalId = fbSender.id, Name = fbSender.name, Email = fbSender.email, Source = SocialUserSource.Facebook, }; await UnitOfWorkManager.RunWithNewTransaction(CurrentUnitOfWork.GetSiteId(), async() => { await InsertAsync(sender); senders.Add(sender); }); } foreach (var sender in senders) { if (sender.IsDeleted) { sender.IsDeleted = false; sender.Type = SocialUserType.Customer; Update(sender); } } return(senders); }
public IQueryable <Filter> FindFiltersInlucdeConditions(int userId) { var filters = this.FindAll() .Include(t => t.Conditions.Select(r => r.Field)) .Where(t => t.IfPublic || t.CreatedBy == userId).ToList(); int siteId = CurrentUnitOfWork.GetSiteId().HasValue ? CurrentUnitOfWork.GetSiteId().Value : -1; bool ifDepartmentEnable = false; UnitOfWorkManager.RunWithNewTransaction(null, () => { ifDepartmentEnable = _configRepository.FindAll().Where(t => t.Id == siteId).First().IfDepartmentEnable; }); if (!ifDepartmentEnable) { filters.RemoveAll(t => t.Name.Contains("Department")); } return(filters.AsQueryable()); }
private async Task <ConversationDto> UpdateConversation(int conversationId, Func <Conversation, Conversation> updateFunc) { int maxLogId; ConversationDto conversationDto; using (var uow = UnitOfWorkManager.Begin(TransactionScopeOption.RequiresNew)) { var conversation = _conversationService.CheckIfExists(conversationId); maxLogId = conversation.Logs.Select(t => t.Id).DefaultIfEmpty().Max(); var entity = updateFunc(conversation); conversationDto = Mapper.Map <ConversationDto>(entity); FillFields(conversationDto); uow.Complete(); } await _notificationManager.NotifyUpdateConversation(CurrentUnitOfWork.GetSiteId().GetValueOrDefault(), conversationId, maxLogId); return(conversationDto); }
public async Task <ConversationDto> UpdateAsync(int id, ConversationUpdateDto updateDto) { ConversationDto conversationDto; int oldMaxLogId; using (var uow = UnitOfWorkManager.Begin(TransactionScopeOption.RequiresNew)) { Conversation conversation = _conversationService.CheckIfExists(id); oldMaxLogId = conversation.Logs.Select(t => t.Id).DefaultIfEmpty().Max(); Mapper.Map(updateDto, conversation); _conversationService.UpdateAndWriteLog(conversation); conversationDto = Mapper.Map <ConversationDto>(conversation); FillFields(conversationDto); uow.Complete(); } await _notificationManager.NotifyUpdateConversation(CurrentUnitOfWork.GetSiteId().GetValueOrDefault(), id, oldMaxLogId); return(conversationDto); }
private void Audit(int action, string content, IList <AuditLogField> auditFields) { if (auditFields.Count() > 0) { var auditLog = new AuditLog { ApplicationType = 1, ActionType = action, ActionDetail = content, OperatorId = UserContext.UserId, ActionTime = DateTime.UtcNow, ActionDetailData = Newtonsoft.Json.JsonConvert.SerializeObject(auditFields) }; try { UnitOfWorkManager.RunWithNewTransaction(CurrentUnitOfWork.GetSiteId(), () => { _auditRepository.Insert(auditLog); }); } catch (Exception ex) { Social.Infrastructure.Logger.Error(ex); } } }
public async Task InsertSocialAccountInGeneralDb(SocialUserSource source, string originalId) { int?siteIdOrNull = CurrentUnitOfWork.GetSiteId(); if (siteIdOrNull == null) { throw new InvalidOperationException("site id must have value."); } int siteId = siteIdOrNull.Value; if (source == SocialUserSource.Facebook) { await UnitOfWorkManager.RunWithNewTransaction(null, async() => { if (!_siteSocialAccountRepo.FindAll().Any(t => t.SiteId == siteId && t.FacebookPageId == originalId)) { await _siteSocialAccountRepo.InsertAsync(new SiteSocialAccount { SiteId = siteId, FacebookPageId = originalId }); } }); } if (source == SocialUserSource.Twitter) { await UnitOfWorkManager.RunWithNewTransaction(null, async() => { if (!_siteSocialAccountRepo.FindAll().Any(t => t.SiteId == siteId && t.TwitterUserId == originalId)) { await _siteSocialAccountRepo.InsertAsync(new SiteSocialAccount { SiteId = siteId, TwitterUserId = originalId }); } }); } }
public async Task <SocialUser> GetOrCreateFacebookUser(string token, string fbUserId) { var user = FindByOriginalId(fbUserId, SocialUserSource.Facebook); if (user == null) { FbUser fbUser = await _fbClient.GetUserInfo(token, fbUserId); user = FindByOriginalId(fbUserId, SocialUserSource.Facebook); if (user == null) { user = new SocialUser { OriginalId = fbUser.id, Name = fbUser.name, Email = fbUser.email, OriginalLink = fbUser.link, Avatar = fbUser.pic, Source = SocialUserSource.Facebook }; await UnitOfWorkManager.RunWithNewTransaction(CurrentUnitOfWork.GetSiteId(), async() => { await InsertAsync(user); }); } } if (user.IsDeleted) { user.IsDeleted = false; user.Type = SocialUserType.Customer; Update(user); } return(user); }
private void FillFiledsForDtoList(IList <ConversationDto> conversationDtos) { var allMessages = _messageService.FindAllByConversationIds(conversationDtos.Select(t => t.Id).ToArray()).ToList(); int siteId = CurrentUnitOfWork.GetSiteId().HasValue ? CurrentUnitOfWork.GetSiteId().Value : -1; bool?ifDepartmentEnable = true; UnitOfWorkManager.RunWithNewTransaction(null, () => { ifDepartmentEnable = _configRepository.FindAll().Where(t => t.Id == siteId).FirstOrDefault()?.IfDepartmentEnable; }); if (ifDepartmentEnable.GetValueOrDefault() == false) { foreach (var conversationDto in conversationDtos) { conversationDto.DepartmentId = null; conversationDto.DepartmentName = null; } } foreach (var conversationDto in conversationDtos) { var messages = allMessages.Where(t => t.ConversationId == conversationDto.Id).ToList(); FillFields(conversationDto, messages); } }
private void FillAgentStatusOptions(IList <ConversationField> fields) { if (!fields.Any()) { return; } var agentsFieldNames = new List <string> { "Agent Assignee Status" }; var agentFields = fields.Where(t => t.IfSystem == true && t.DataType == FieldDataType.Option && agentsFieldNames.Contains(t.Name)); if (agentFields.Any()) { AgentStatus[] statuses = new AgentStatus[] { AgentStatus.Online, AgentStatus.Offline }; int siteId = CurrentUnitOfWork.GetSiteId().HasValue ? CurrentUnitOfWork.GetSiteId().Value : -1; CustomAwayStatus[] customAwayStatuses = _statusrRepo.FindAll().Where(t => t.SiteId == siteId && t.IfDeleted == false).ToArray(); bool ifCustomAwayEnable = false; UnitOfWorkManager.RunWithNewTransaction(null, () => { ifCustomAwayEnable = _configRepository.FindAll().Where(t => t.Id == siteId).First().IfCustomAwayEnable; }); foreach (var agentField in agentFields) { agentField.Options = statuses.Select(t => new ConversationFieldOption { Id = (int)t, Name = t.GetName(), SiteId = agentField.SiteId, FieldId = agentField.Id, Value = ((int)t).ToString() }).ToList(); if (ifCustomAwayEnable) { foreach (var customAwayStatus in customAwayStatuses) { agentField.Options.Add(new ConversationFieldOption { Id = customAwayStatus.Id, Name = customAwayStatus.Name, SiteId = agentField.SiteId, FieldId = agentField.Id, Value = customAwayStatus.Id.ToString() }); } } else { agentField.Options.Add(new ConversationFieldOption { Id = (int)AgentStatus.Away, Name = AgentStatus.Away.GetName(), SiteId = agentField.SiteId, FieldId = agentField.Id, Value = ((int)AgentStatus.Away).ToString() }); } } } }