Example #1
0
        public async Task <NetworkLibrary.NetworkLibrary.Http.ShopModel> GetShopModelAsync([NotNull] string playerServiceId)
        {
            //Такой аккаунт существует?
            Account account = await dbContext.Accounts
                              .Where(account1 => account1.ServiceId == playerServiceId)
                              .SingleOrDefaultAsync();

            if (account == null)
            {
                throw new Exception("Такой игрок ещё не зарегистрирован");
            }

            //Прочитать самую новую модель магазина из БД
            NetworkLibrary.NetworkLibrary.Http.ShopModel shopModelFromDb = await shopModelDbReader
                                                                           .ReadShopModel(account.Id);

            //Создать новую модель магазина
            NetworkLibrary.NetworkLibrary.Http.ShopModel shopModel = await shopFactoryService.Create(playerServiceId);

            NetworkLibrary.NetworkLibrary.Http.ShopModel shopModelWithId;
            //Если модель не сохранена, то записать новую
            if (shopModelFromDb == null)
            {
                Console.WriteLine("Запись первой модели магазина");
                shopModelWithId = await shopWriterService.Write(shopModel, account.Id);
            }
            else
            {
                //Если в БД есть модель, то сравнить содержимое моделей (без Id)
                bool needToReplace = comparator.NeedToReplace(shopModelFromDb.UiSections, shopModel.UiSections);

                //Если модели магазинов отличаются, то в БД нужно сохранить новую
                if (needToReplace)
                {
                    Console.WriteLine("Модели отличаются");
                    shopModelWithId = await shopWriterService.Write(shopModel, account.Id);
                }
                else
                {
                    Console.WriteLine("Модели совпадают");
                    //Если модели совпадают, то записывать в БД ничего не нужно
                    shopModelWithId = shopModelFromDb;
                }
            }

            return(shopModelWithId);
        }
Example #2
0
        public async Task <NetworkLibrary.NetworkLibrary.Http.ShopModel> Write(NetworkLibrary.NetworkLibrary.Http.ShopModel shopModel, int accountId)
        {
            ShopModelDb shopModelDb = new ShopModelDb
            {
                CreationDateTime = DateTime.UtcNow,
                AccountId        = accountId
            };

            await dbContext.ShopModels.AddAsync(shopModelDb);

            await dbContext.SaveChangesAsync();

            //Эта хрень нужна для того, чтобы id у модели магазина всегда был уникальным
            shopModel.Id = shopModelDb.Id;
            shopModelDb.SerializedModel = ZeroFormatterSerializer.Serialize(shopModel);
            await dbContext.SaveChangesAsync();

            return(shopModel);
        }