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