Exemplo n.º 1
0
        public async Task <IActionResult> Edit(string id)
        {
            logger.LogInformation("Edit {0}", id);

            var tag = Utils.LinkIdToTag(id);

            if (tag == null)
            {
                return(NotFound());
            }

            var clanValidity = await db.ClanValidities.SingleOrDefaultAsync(m => m.Tag == tag);

            if (clanValidity == null)
            {
                var opp = db.Wars.FirstOrDefault(o => o.OpponentTag == tag);
                clanValidity = new ClanValidity()
                {
                    Tag = tag
                };
                if (opp != null)
                {
                    clanValidity.Name = opp.OpponentName;
                }

                var opponents = (from w in db.Wars
                                 where w.OpponentTag == tag
                                 group w by new { w.OpponentTag, w.OpponentName } into g
                                 select new {
                    Tag = g.Key.OpponentTag,
                    Name = g.Key.OpponentName,
                    MinEndTime = g.Min(w => w.EndTime),
                    MaxEndTime = g.Max(w => w.EndTime)
                }).ToList();

                foreach (var opponent in opponents)
                {
                    clanValidity.Name      = opponent.Name;
                    clanValidity.ValidFrom = opponent.MinEndTime.AddDays(-2);
                    clanValidity.ValidTo   = opponent.MaxEndTime.AddDays(1);
                }
            }

            return(View(clanValidity));
        }
Exemplo n.º 2
0
        public void UpdateValidities()
        {
            var currentClans = db.Clans.ToDictionary(c => c.Tag);
            var validClans   = db.ClanValidities.ToDictionary(l => l.Tag);

            //Deleted clans
            foreach (var clan in validClans)
            {
                if (!currentClans.ContainsKey(clan.Key))
                {
                    var validClan = clan.Value;
                    if (validClan.ValidTo > DateTime.UtcNow)
                    {
                        validClan.ValidTo = DateTime.UtcNow;
                    }
                }
            }

            //New or existing clans
            foreach (var clan in currentClans)
            {
                var currentClan = clan.Value;
                if (validClans.TryGetValue(clan.Key, out ClanValidity validClan))
                {
                    if (validClan.ValidTo < DateTime.UtcNow)
                    {
                        validClan.ValidTo = DateTime.MaxValue;
                    }
                }
                else
                {
                    validClan = new ClanValidity()
                    {
                        Tag = clan.Key, Name = currentClan.Name, ValidFrom = DateTime.UtcNow, ValidTo = DateTime.MaxValue, Group = currentClan.Group
                    };
                    db.ClanValidities.Add(validClan);
                }
            }

            db.SaveChanges();
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Edit(string id, [Bind("Tag,Name,LinkID,Group,ValidFrom,ValidTo")] ClanValidity clanValidity)
        {
            logger.LogInformation("Edit.Post {0}", id);

            var tag = Utils.LinkIdToTag(id);

            if (tag != clanValidity.Tag)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (!this.ClanValidityExists(tag))
                    {
                        if (clanValidity.ValidFrom < clanValidity.ValidTo)
                        {
                            db.Add(clanValidity);
                        }
                    }
                    else
                    {
                        if (clanValidity.ValidFrom == clanValidity.ValidTo)
                        {
                            db.Remove(clanValidity);
                        }
                        else if (clanValidity.ValidFrom < clanValidity.ValidTo)
                        {
                            db.Update(clanValidity);
                        }
                    }

                    foreach (var war in db.Wars.Where(w => w.ClanTag == tag || w.OpponentTag == w.ClanTag))
                    {
                        if (war.PreparationStartTime < clanValidity.ValidFrom || war.PreparationStartTime > clanValidity.ValidTo)
                        {
                            war.Synced  = false; // this is fixed in next sync
                            war.Matched = false;
                        }
                    }

                    await db.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ClanValidityExists(clanValidity.Tag))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Details", new { id }));
            }

            return(View(clanValidity));
        }