public static void MapFrom(this ArenaSessionModel target, ArenaSession source)
 {
     target.InjectFrom(source);
     // target.Games.IsNotifying = false;
     target.Games.Clear();
     target.Games.AddRange(source.Games.Select(g => g.ToModel()));
     // target.Games.IsNotifying = true;
     // target.Games.Refresh();
 }
 public static ArenaSessionModel ToModel(this ArenaSession arena, int arenaSessionRecurse = 0)
 {
     if (arena == null)
     {
         return null;
     }
     ArenaSessionModel model = null;
     model = new ArenaSessionModel();
     model.InjectFrom(arena);
     model.Games.AddRange(arena.Games.Select(x => x.ToModel(arenaSessionRecurse, model)));
     return model;
 }
        public static ArenaSessionModel ToModel(this ArenaSession arena, int arenaSessionRecurse = 0)
        {
            if (arena == null)
            {
                return(null);
            }
            ArenaSessionModel model = null;

            model = new ArenaSessionModel();
            model.InjectFrom(arena);
            model.Games.AddRange(arena.Games.Select(x => x.ToModel(arenaSessionRecurse, model)));
            return(model);
        }
예제 #4
0
 public async Task Retire(ArenaSessionModel arenaModel)
 {
     using (var context = this.dbContext())
     {
         var arena = context.ArenaSessions.Query().First(x => x.Id == arenaModel.Id);
         arena.Retired = true;
         if (arena.EndDate == null)
         {
             arena.EndDate = DateTime.Now;
         }
         arena.Modified = DateTime.Now;
         await context.SaveChangesAsync();
         arenaModel.InjectFrom(arena);
     }
 }
예제 #5
0
        public async Task AssignGameToArena(GameResultModel gameModel, ArenaSessionModel arenaModel)
        {
            using (var context = this.dbContext())
            {
                // var lastGame = context.Games.Where(x => x.ArenaSessionId == arenaModel.Id).OrderByDescending(x => x.ArenaGameNo).FirstOrDefault();
                var arena = context.ArenaSessions.Query().First(x => x.Id == arenaModel.Id);
                var game = context.Games.Query().First(x => x.Id == gameModel.Id);
                // game.ArenaGameNo = lastGame == null ? 1 : lastGame.ArenaGameNo + 1;

                AddGameToArena(game, arena);
                SetEndDateIfNeeded(arena);
                arena.Modified = DateTime.Now;
                game.Modified = DateTime.Now;
                await context.SaveChangesAsync();

                gameModel.InjectFrom(game);
                arenaModel.InjectFrom(arena);

                gameModel.ArenaSession = arenaModel;
                arenaModel.Games.Add(gameModel);
            }
        }
예제 #6
0
        public async Task UpdateArenaSession(ArenaSessionModel arenaModel)
        {
            using (var context = this.dbContext())
            {
                var arena = context.ArenaSessions.Query().FirstOrDefault(x => x.Id == arenaModel.Id);
                if (arena == null)
                {
                    throw new ArgumentException("arena does not exist", "arenaModel");
                }
                if (!Equals(arenaModel.Hero, arena.Hero))
                {
                    arena.Hero = context.Heroes.Find(arenaModel.Hero.Id);
                }
                if (arenaModel.Image1 != null)
                {
                    var img = context.ArenaDeckImages.Find(arenaModel.Image1.Id);
                    if (img == null)
                    {
                        img = arenaModel.Image1;
                        context.ArenaDeckImages.Add(img);
                    }
                    context.Entry(img).CurrentValues.SetValues(arenaModel.Image1);
                    arena.Image1 = img;
                }
                if (arenaModel.Image2 != null)
                {
                    var img = context.ArenaDeckImages.Find(arenaModel.Image2.Id);
                    if (img == null)
                    {
                        img = arenaModel.Image2;
                        context.ArenaDeckImages.Add(img);
                    }
                    context.Entry(img).CurrentValues.SetValues(arenaModel.Image2);
                    arena.Image2 = img;
                }

                context.Entry(arena).CurrentValues.SetValues(arenaModel);
                SetEndDateIfNeeded(arena);
                arena.Modified = DateTime.Now;
                await context.SaveChangesAsync();

                arena = context.ArenaSessions.Query().First(x => x.Id == arena.Id);
                var latestId = context.ArenaSessions.OrderByDescending(x => x.StartDate).Select(x => x.Id).FirstOrDefault();
                arenaModel.InjectFrom(arena);
                this.events.PublishOnBackgroundThread(new ArenaSessionUpdated(arenaModel.Id, latestId == arena.Id));
            }
        }
예제 #7
0
 public async Task<ArenaSessionModel> AddArenaSession(ArenaSessionModel arenaModel)
 {
     using (var context = this.dbContext())
     {
         var arena = new ArenaSession();
         arena.InjectFrom(arenaModel);
         if (arenaModel.Hero != null)
         {
             arena.Hero = context.Heroes.Find(arenaModel.Hero.Id);
         }
         if (arenaModel.Image1 != null)
         {
             var img = context.ArenaDeckImages.Find(arenaModel.Image1.Id);
             if (img == null)
             {
                 img = arenaModel.Image1;
                 context.ArenaDeckImages.Add(img);
             }
             context.Entry(img).CurrentValues.SetValues(arenaModel.Image1);
             arena.Image1 = img;
         }
         if (arenaModel.Image2 != null)
         {
             var img = context.ArenaDeckImages.Find(arenaModel.Image2.Id);
             if (img == null)
             {
                 img = arenaModel.Image2;
                 context.ArenaDeckImages.Add(img);
             }
             context.Entry(img).CurrentValues.SetValues(arenaModel.Image2);
             arena.Image2 = img;
         }
         context.ArenaSessions.Add(arena);
         await context.SaveChangesAsync();
         arenaModel.InjectFrom(arena);
     }
     this.events.PublishOnBackgroundThread(new ArenaSessionAdded(arenaModel));
     return arenaModel;
 }