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); }
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); }