示例#1
0
        // 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();
                }
            }
        }
示例#2
0
        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);
        }
示例#3
0
 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);
     }
 }
示例#4
0
        /// <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();
            }
        }
示例#5
0
        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);
        }
示例#6
0
 public ServiceHub(MixChatServiceContext context, MixCmsContext msgContext) : base()
 {
     _context    = context;
     _msgContext = msgContext;
 }
示例#7
0
        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();
            }
        }
示例#8
0
        /// <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();
            }
        }
示例#9
0
        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();
            }
        }