// Cannot use asyn method for signalr hub public RepositoryResponse <bool> Join(MixChatServiceContext _context = null, IDbContextTransaction _transaction = null) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; UnitOfWorkHelper <MixChatServiceContext> .InitTransaction(_context, _transaction, out MixChatServiceContext context, out IDbContextTransaction transaction, out bool isRoot); try { result = UpdateUser(context, transaction); if (result.IsSucceed) { result = UpdateDevice(context, transaction); } UnitOfWorkHelper <MixChatServiceContext> .HandleTransaction(result.IsSucceed, isRoot, transaction); return(result); } catch (Exception ex) { return(UnitOfWorkHelper <MixChatServiceContext> .HandleException <bool>(ex, isRoot, transaction)); } finally { if (isRoot) { //if current Context is Root transaction.Dispose(); context.Database.CloseConnection(); transaction.Dispose(); context.Dispose(); } } }
private RepositoryResponse <bool> UpdateDevice(MixChatServiceContext context, IDbContextTransaction transaction) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; if (Device != null) { var getDevice = MixMessengerUserDevices.DefaultViewModel.Repository.GetSingleModel(c => c.UserId == Device.UserId && c.DeviceId == Device.DeviceId, context, transaction); if (getDevice.IsSucceed) { getDevice.Data.Status = Constants.Enums.DeviceStatus.Actived; getDevice.Data.StartDate = DateTime.UtcNow; getDevice.Data.ConnectionId = Device.ConnectionId; var saveDevice = getDevice.Data.SaveModel(false, context, transaction); ViewModelHelper.HandleResult(saveDevice, ref result); } else { Device.Status = (int)Constants.Enums.DeviceStatus.Actived; Device.StartDate = DateTime.UtcNow; var dv = new MixMessengerUserDevices.DefaultViewModel(Device, context, transaction); var saveDevice = dv.SaveModel(false, context, transaction); ViewModelHelper.HandleResult(saveDevice, ref result); } } return(result); }
public async Task <RepositoryResponse <bool> > Join() { using (MixChatServiceContext _context = new MixChatServiceContext()) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; try { var user = new MixMessengerUser() { Id = Id, FacebookId = Id, Avatar = Avatar, CreatedDate = DateTime.UtcNow, Name = Name, Status = (int)MixChatEnums.OnlineStatus.Connected }; if (_context.MixMessengerUser.Any(u => u.Id == user.Id)) { _context.Entry(user).State = Microsoft.EntityFrameworkCore.EntityState.Modified; } else { _context.Entry(user).State = Microsoft.EntityFrameworkCore.EntityState.Added; } if (Device != null) { //var cnn = _context.MixMessengerUserDevice.FirstOrDefault(c => c.UserId == Device.UserId && c.DeviceId == Device.DeviceId); if (_context.MixMessengerUserDevice.Any(c => c.UserId == Device.UserId && c.DeviceId == Device.DeviceId)) { Device.ConnectionId = Device.ConnectionId; Device.Status = (int)MixChatEnums.DeviceStatus.Actived; Device.StartDate = DateTime.UtcNow; _context.Entry(Device).State = Microsoft.EntityFrameworkCore.EntityState.Modified; } else { Device.Status = (int)MixChatEnums.DeviceStatus.Actived; Device.StartDate = DateTime.UtcNow; _context.Entry(Device).State = Microsoft.EntityFrameworkCore.EntityState.Added; } } result.IsSucceed = (await _context.SaveChangesAsync()) > 0; } catch (Exception ex) { result.IsSucceed = false; result.Exception = ex; } return(result); } }
/// <summary> /// Step 1 /// - Init Culture /// - Init System pages /// </summary> /// <param name="siteName"></param> /// <param name="culture"></param> /// <returns></returns> public static async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); MixCmsContext context = null; MixCmsAccountContext accountContext = null; MixChatServiceContext messengerContext = null; try { if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION))) { context = MixService.GetDbContext(); accountContext = new MixCmsAccountContext(); messengerContext = new MixChatServiceContext(); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); await messengerContext.Database.MigrateAsync(); var countCulture = context.MixCulture.Count(); var pendingMigration = context.Database.GetPendingMigrations().Count(); if (pendingMigration == 0) { return(await InitSiteData(siteName, culture)); } } return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { result.IsSucceed = false; result.Exception = ex; return(result); } finally { context?.Dispose(); accountContext?.Dispose(); messengerContext?.Dispose(); } }
private RepositoryResponse <bool> UpdateUser(MixChatServiceContext context, IDbContextTransaction transaction) { var result = new RepositoryResponse <bool>() { IsSucceed = true }; // Load User from db var getUser = MixMessengerUsers.DefaultViewModel.Repository.GetSingleModel(m => m.Id == Id, context, transaction); if (getUser.IsSucceed) { // if existed => update status = connected if (getUser.Data.Status == Constants.Enums.OnlineStatus.Disconnected) { getUser.Data.Status = Constants.Enums.OnlineStatus.Connected; var saveUser = getUser.Data.SaveModel(false, context, transaction); ViewModelHelper.HandleResult(saveUser, ref result); } } else { // if not existed => add new with status = connected var user = new MixMessengerUsers.DefaultViewModel() { Id = Id, FacebookId = Id, Avatar = Avatar, CreatedDate = DateTime.UtcNow, Name = Name, Status = Constants.Enums.OnlineStatus.Connected }; var saveUser = user.SaveModel(false, context, transaction); ViewModelHelper.HandleResult(saveUser, ref result); } return(result); }
public ServiceHub(MixChatServiceContext context, MixCmsContext msgContext) : base() { _context = context; _msgContext = msgContext; }
public async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); MixCmsContext context = null; MixCmsAccountContext accountContext = null; MixChatServiceContext messengerContext; IDbContextTransaction transaction = null; IDbContextTransaction accTransaction = null; bool isSucceed = true; try { if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION))) { context = new MixCmsContext(); accountContext = new MixCmsAccountContext(); messengerContext = new MixChatServiceContext(); //MixChatServiceContext._cnn = MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); await messengerContext.Database.MigrateAsync(); transaction = context.Database.BeginTransaction(); var countCulture = context.MixCulture.Count(); var isInit = countCulture > 0; if (!isInit) { MixService.SetConfig <string>("SiteName", siteName); isSucceed = InitCultures(culture, context, transaction); isSucceed = isSucceed && InitPositions(context, transaction); isSucceed = isSucceed && await InitConfigurationsAsync(siteName, culture, context, transaction); isSucceed = isSucceed && await InitLanguagesAsync(culture, context, transaction); isSucceed = isSucceed && InitThemes(siteName, context, transaction); } else { isSucceed = true; } if (isSucceed && context.MixPage.Count() == 0) { var cate = new MixPage() { Id = 1, Level = 0, Title = "Home", Specificulture = culture.Specificulture, Template = "Pages/_Home.cshtml", Type = (int)MixPageType.Home, CreatedBy = "Admin", CreatedDateTime = DateTime.UtcNow, Status = (int)PageStatus.Published }; context.Entry(cate).State = EntityState.Added; var alias = new MixUrlAlias() { Id = 1, SourceId = "1", Type = (int)UrlAliasType.Page, Specificulture = culture.Specificulture, CreatedDateTime = DateTime.UtcNow, Alias = cate.Title.ToLower() }; context.Entry(alias).State = EntityState.Added; var createVNHome = await context.SaveChangesAsync().ConfigureAwait(false); isSucceed = createVNHome > 0; var cate404 = new MixPage() { Id = 2, Title = "404", Level = 0, Specificulture = culture.Specificulture, Template = "Pages/_404.cshtml", Type = (int)MixPageType.Article, CreatedBy = "Admin", CreatedDateTime = DateTime.UtcNow, Status = (int)PageStatus.Published }; var alias404 = new MixUrlAlias() { Id = 2, SourceId = "2", Type = (int)UrlAliasType.Page, Specificulture = culture.Specificulture, CreatedDateTime = DateTime.UtcNow, Alias = cate404.Title.ToLower() }; context.Entry(cate404).State = EntityState.Added; context.Entry(alias404).State = EntityState.Added; var create404 = await context.SaveChangesAsync().ConfigureAwait(false); isSucceed = create404 > 0; } if (isSucceed) { transaction.Commit(); } else { transaction.Rollback(); } } result.IsSucceed = isSucceed; return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { transaction?.Rollback(); accTransaction?.Rollback(); result.IsSucceed = false; result.Exception = ex; return(result); } finally { context?.Dispose(); accountContext?.Dispose(); } }
/// <summary> /// Step 1 /// - Init Culture /// - Init System pages /// </summary> /// <param name="siteName"></param> /// <param name="culture"></param> /// <returns></returns> public static async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); MixCmsContext context = null; MixCmsAccountContext accountContext = null; MixChatServiceContext messengerContext; IDbContextTransaction transaction = null; IDbContextTransaction accTransaction = null; bool isSucceed = true; try { if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION))) { context = new MixCmsContext(); accountContext = new MixCmsAccountContext(); messengerContext = new MixChatServiceContext(); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); await messengerContext.Database.MigrateAsync(); transaction = context.Database.BeginTransaction(); var countCulture = context.MixCulture.Count(); var isInit = MixService.GetConfig <bool>("IsInit"); if (!isInit) { /** * Init Selected Language as default */ isSucceed = InitCultures(culture, context, transaction); /** * Init System Pages */ if (isSucceed) { InitPages(culture.Specificulture, context, transaction); isSucceed = (await context.SaveChangesAsync().ConfigureAwait(false)) > 0; } else { result.Errors.Add("Cannot init Pages"); } /** * Init System Positions */ if (isSucceed) { isSucceed = await InitPositionsAsync(context, transaction); } else { result.Errors.Add("Cannot init Positions"); } /** * Init System Configurations */ if (isSucceed) { var saveResult = await InitConfigurationsAsync(siteName, culture.Specificulture, context, transaction); isSucceed = saveResult.IsSucceed; } else { result.Errors.Add("Cannot init Configurations"); } /** * Init System Attribute Sets */ if (isSucceed) { var saveResult = await InitAttributeSetsAsync(siteName, culture.Specificulture, context, transaction); isSucceed = saveResult.IsSucceed; } else { result.Errors.Add("Cannot init Attribute Sets"); } } if (isSucceed) { transaction.Commit(); } else { transaction.Rollback(); } } result.IsSucceed = isSucceed; return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { transaction?.Rollback(); accTransaction?.Rollback(); result.IsSucceed = false; result.Exception = ex; return(result); } finally { context?.Dispose(); accountContext?.Dispose(); } }
public async Task <RepositoryResponse <bool> > InitCms(string siteName, InitCulture culture) { RepositoryResponse <bool> result = new RepositoryResponse <bool>(); MixCmsContext context = null; MixCmsAccountContext accountContext = null; MixChatServiceContext messengerContext; IDbContextTransaction transaction = null; IDbContextTransaction accTransaction = null; bool isSucceed = true; try { if (!string.IsNullOrEmpty(MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION))) { context = new MixCmsContext(); accountContext = new MixCmsAccountContext(); messengerContext = new MixChatServiceContext(); //MixChatServiceContext._cnn = MixService.GetConnectionString(MixConstants.CONST_CMS_CONNECTION); await context.Database.MigrateAsync(); await accountContext.Database.MigrateAsync(); await messengerContext.Database.MigrateAsync(); transaction = context.Database.BeginTransaction(); var countCulture = context.MixCulture.Count(); var isInit = countCulture > 0; if (!isInit) { MixService.SetConfig <string>("SiteName", siteName); isSucceed = InitCultures(culture, context, transaction); if (isSucceed) { isSucceed = isSucceed && InitPositions(context, transaction); } else { result.Errors.Add("Cannot init Cultures"); } if (isSucceed) { isSucceed = isSucceed && await InitConfigurationsAsync(siteName, culture, context, transaction); } else { result.Errors.Add("Cannot init Positions"); } if (isSucceed) { isSucceed = isSucceed && await InitLanguagesAsync(culture, context, transaction); } else { result.Errors.Add("Cannot init Configurations"); } if (isSucceed) { var initTheme = await InitThemesAsync(siteName, context, transaction); isSucceed = isSucceed && initTheme.IsSucceed; result.Errors.AddRange(initTheme.Errors); result.Exception = initTheme.Exception; } else { result.Errors.Add("Cannot init Languages"); } } else { isSucceed = true; } if (isSucceed && context.MixPage.Count() == 0) { InitPages(culture.Specificulture, context, transaction); isSucceed = (await context.SaveChangesAsync().ConfigureAwait(false)) > 0; } else { result.Errors.Add("Cannot init Themes"); } if (isSucceed) { transaction.Commit(); } else { transaction.Rollback(); } } result.IsSucceed = isSucceed; return(result); } catch (Exception ex) // TODO: Add more specific exeption types instead of Exception only { transaction?.Rollback(); accTransaction?.Rollback(); result.IsSucceed = false; result.Exception = ex; return(result); } finally { context?.Dispose(); accountContext?.Dispose(); } }