public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var defect = await _context.Defects .Include(w => w.Workers).ThenInclude(u => u.AppUser) .SingleOrDefaultAsync(x => x.Id == request.Id); if (defect == null) { return(null); } var user = await _context.Users .FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); if (user == null) { return(null); } var ownerUsername = defect.Workers.FirstOrDefault(x => x.IsOwner)?.AppUser?.UserName; var workers = defect.Workers.FirstOrDefault(x => x.AppUser.UserName == user.UserName); if (workers != null && ownerUsername == user.UserName) { defect.isClosed = !defect.isClosed; } if (workers != null && ownerUsername != user.UserName) { defect.Workers.Remove(workers); } if (workers == null) { workers = new DefectWorker { AppUser = user, Defect = defect, IsOwner = false }; defect.Workers.Add(workers); } var result = await _context.SaveChangesAsync() > 0; return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating workers")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var worker = new DefectWorker { AppUser = user, Defect = request.Defect, IsOwner = true }; request.Defect.Workers.Add(worker); _context.Defects.Add(request.Defect); var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create defect")); } return(Result <Unit> .Success(Unit.Value)); }