public async Task <Unit> Handle(CreateEstimateCommand request, CancellationToken cancellationToken)
        {
            if (request.ClientId <= 0)
            {
                throw new ValidationException("Invalid client id.");
            }

            if (String.IsNullOrEmpty(request.Name))
            {
                throw new ValidationException("Project Name cannot be null or empty.");
            }

            var client = _context.Clients.FirstOrDefault(c => c.Id == request.ClientId);

            if (client == null)
            {
                throw new ValidationException($"Client not found by id {request.ClientId}");
            }

            var entity = new Estimate
            {
                ProjectName = request.Name,
                Estimator   = String.IsNullOrEmpty(request.EstimatorName) ? null : new Contact(request.EstimatorEmail, request.EstimatorName),
                Client      = client
            };

            _context.Estimates.Add(entity);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
        public async Task <Unit> Handle(CreateClientCommand request, CancellationToken cancellationToken)
        {
            Validate(request);

            var entity = new Client
            {
                Name           = request.Name,
                AccountManager = new Contact(request.AccountManagerEmail, request.AccountManagerName)
            };

            _context.Clients.Add(entity);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
        public async Task <Unit> Handle(CreateBackloItemCommand request, CancellationToken cancellationToken)
        {
            ///#TODO: Convert to Mediatr validators
            if (request.EstimateId <= 0)
            {
                throw new ArgumentException("Invalid estimate id.");
            }

            if (String.IsNullOrEmpty(request.Task))
            {
                throw new ArgumentException("Task name cannot be null or empty.");
            }

            if (request.PessimisticEstimate <= 0 || request.OptimisticEstimate <= 0)
            {
                throw new ValidationException("Both optimistic and pessimistic estimates should be > 0.");
            }

            if (request.OptimisticEstimate > request.PessimisticEstimate)
            {
                throw new ValidationException("Optimistic estimate cannot be higher than pessimistic estimate");
            }

            var estimate = _context.Estimates.FirstOrDefault(e => e.Id == request.EstimateId);

            if (estimate == null)
            {
                throw new ValidationException($"Estimate not found by id {request.EstimateId}");
            }

            var entity = new BacklogItem
            {
                Estimate            = estimate,
                Task                = request.Task,
                OptimisticEstimate  = request.OptimisticEstimate,
                PessimisticEstimate = request.PessimisticEstimate
            };

            _context.BacklogItems.Add(entity);
            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
Esempio n. 4
0
        public async Task <Unit> Handle(DeleteBacklogItemCommand request, CancellationToken cancellationToken)
        {
            ///#TODO: Convert to Mediatr validators
            if (request.Id <= 0)
            {
                throw new ArgumentException("Invalid backlog item id.");
            }

            var backlogItem = _context.BacklogItems.FirstOrDefault(e => e.Id == request.Id);

            if (backlogItem == null)
            {
                throw new ValidationException($"Backlog item not found by id {request.Id}");
            }

            _context.BacklogItems.Remove(backlogItem);

            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
        public async Task <Unit> Handle(UpdateBackloItemCommand request, CancellationToken cancellationToken)
        {
            ///#TODO: Convert to Mediatr validators
            if (request.BacklogItemId <= 0)
            {
                throw new ArgumentException("Invalid backlog item id.");
            }

            if (String.IsNullOrEmpty(request.Task))
            {
                throw new ArgumentException("Task name cannot be null or empty.");
            }

            if (request.PessimisticEstimate <= 0 || request.OptimisticEstimate <= 0)
            {
                throw new ValidationException("Both optimistic and pessimistic estimates should be > 0.");
            }

            if (request.OptimisticEstimate > request.PessimisticEstimate)
            {
                throw new ValidationException("Optimistic estimate cannot be higher than pessimistic estimate");
            }

            var backlogItem = _context.BacklogItems.FirstOrDefault(e => e.Id == request.BacklogItemId);

            if (backlogItem == null)
            {
                throw new ValidationException($"Backlog item not found by id {request.BacklogItemId}");
            }

            backlogItem.Task                = request.Task;
            backlogItem.Confidence          = request.Confidence;
            backlogItem.OptimisticEstimate  = request.OptimisticEstimate;
            backlogItem.PessimisticEstimate = request.PessimisticEstimate;

            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }