示例#1
0
        public async Task <IActionResult> Contacts(string tag)
        {
            if (tag == null)
            {
                return(BadRequest());
            }
            var uid       = UserId();
            var gid       = GameId();
            var character = await _context.Characters
                            .Include(p => p.Contacts)
                            .ThenInclude(p => p.Reflection)
                            .FirstOrDefaultAsync(p => p.UserId == uid);

            var target = await _context.Characters.FirstOrDefaultAsync(p => p.Tag == tag && p.GameId == gid);

            if (target == null)
            {
                return(RedirectToAction("NoContact"));
            }
            var contact = new CharacterReflection()
            {
                Owner      = character,
                Reflection = target
            };

            character.Contacts.Add(contact);
            target.Watchers.Add(contact);
            await _context.SaveChangesAsync();

            return(View(character.Contacts.Select(p => new ContactView(p.Reflection))));
        }
示例#2
0
        public async Task <ActionResult> EditContacts(long id, long[] ids)
        {
            var gid       = GameId();
            var character = await _context.Characters
                            .Include(p => p.Contacts)
                            .FirstOrDefaultAsync(p => p.Id == id && p.GameId == (Guid)gid);

            if (character == null)
            {
                return(NotFound());
            }
            var characters = await _context.Characters
                             .Include(p => p.Watchers)
                             .Where(p => p.GameId == gid)
                             .ToListAsync();

            var blackList = character.Contacts.Where(p => !ids.Contains((long)p.ReflectionId));

            foreach (var b in blackList)
            {
                character.Contacts.Remove(b);
            }
            var whiteList = characters.Where(p => ids.Contains(p.Id) && !character.Contacts.Select(c => c.ReflectionId).Contains(p.Id));

            foreach (var t in whiteList)
            {
                var contact = new CharacterReflection()
                {
                    Owner      = character,
                    Reflection = t
                };
                character.Contacts.Add(contact);
                t.Watchers.Add(contact);
            }
            try
            {
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index), new { id }));
            }
            catch
            {
                ViewBag.characters = characters
                                     .Select(p => new Selectable(p.Id.ToString(), p.Name))
                                     .ToList();
                return(View(new ContactList(character)));
            }
        }