Example #1
0
            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"));
            }
Example #2
0
            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));
            }