示例#1
0
        public AddToContest()
        {
            TUser1 = new ApplicationUser
            {
                Id   = Guid.NewGuid().ToString(),
                Name = nameof(TUser1)
            };
            TUser2 = new ApplicationUser
            {
                Id   = Guid.NewGuid().ToString(),
                Name = nameof(TUser2)
            };
            XUser1 = new ApplicationUser
            {
                Id   = Guid.NewGuid().ToString(),
                Name = nameof(XUser1)
            };

            Request = new AddToContestByNameRequest
            {
                ContestId = _category.Id,
                Pattern   = nameof(AddToContestByNameRequest.Pattern)
            };
        }
示例#2
0
        public async Task <ActionResult <IEnumerable <AddToContestView> > > AddToContest(AddToContestByNameRequest request)
        {
            if (string.IsNullOrEmpty(request.Pattern))
            {
                ModelState.AddModelError(nameof(request.Pattern), "Pattern required");
                return(BadRequest(ModelState));
            }

            if (request.ContestId == default)
            {
                ModelState.AddModelError(nameof(request.ContestId), "ContestId required");
                return(BadRequest(ModelState));
            }

            var category = await _context.Categories
                           .AsNoTracking().Include(c => c.Users)
                           .FirstOrDefaultAsync(c => c.Id == request.ContestId);

            if (category == null)
            {
                return(NotFound(nameof(request.ContestId)));
            }

            var users = _context.Users.Where(u => EF.Functions.Like(u.UserName, request.Pattern))
                        .Select(u => u.Id);

            var result = new List <AddToContestView>();

            foreach (var userId in users)
            {
                if (category.Users.Any(u => u.UserId == userId))
                {
                    continue;
                }

                category.Users.Add(new CategoryUser
                {
                    UserId  = userId,
                    CanRead = true
                });

                result.Add(new AddToContestView
                {
                    UserId = userId
                });
            }

            await _context.SaveChangesAsync();

            return(result);
        }