public async Task <IssueLogDTO> CreateAsync(IssueLogDTO issueLogDTO) { var oldIssueDTO = issueLogDTO.Issue; issueLogDTO.Issue = _mapper.Map <IssueDTO>(await _unitOfWork.IssueRepository.GetByIdAsync((int)issueLogDTO.Issue.Id)); issueLogDTO.OldState.Id = issueLogDTO.Issue.State.Id; issueLogDTO.Issue.State.Id = issueLogDTO.NewState.Id; issueLogDTO.Issue.Deadline = oldIssueDTO.Deadline; issueLogDTO.Issue.AssignedTo.Id = oldIssueDTO.AssignedTo.Id; if (issueLogDTO.OldState.Id != issueLogDTO.NewState.Id && !(await _unitOfWork.TransitionRepository.GetAllAsync(x => x.FromStateId == issueLogDTO.OldState.Id && x.ActionTypeId == issueLogDTO.ActionType.Id && x.ToStateId == issueLogDTO.NewState.Id) ).Any()) { throw new ConstraintException("Can not move to the state according to transition settings."); } var model = _mapper.Map <IssueLog>(issueLogDTO); await _unitOfWork.IssueLogRepository.AddAsync(model); await _unitOfWork.SaveAsync(); return(_mapper.Map <IssueLogDTO>(model)); }
public async Task <IssueLogDTO> CreateAsync(IssueLogDTO issueLogDTO) { //load previous state of issue and change AssignedTo, State, Deadline fields var oldIssueDTO = issueLogDTO.Issue; issueLogDTO.Issue = _mapper.Map <IssueDTO>(await _unitOfWork.IssueRepository.GetByIdAsync((int)issueLogDTO.Issue.Id)); issueLogDTO.OldState = issueLogDTO.Issue.State; if (issueLogDTO.OldState != issueLogDTO.NewState && !(await _unitOfWork.CoreAngularDemoionRepository.GetAllAsync(x => x.FromStateId == issueLogDTO.OldState.Id && x.ActionTypeId == issueLogDTO.ActionType.Id && x.ToStateId == issueLogDTO.NewState.Id) ).Any()) { throw new ConstraintException("Cannot change state according to the CoreAngularDemoion settings."); } var model = _mapper.Map <IssueLog>(issueLogDTO); await _unitOfWork.IssueLogRepository.AddAsync(model); //changed this fields in models, not DTO because GetByIdAsync and mapping doesn't allow saving changes model.Issue.StateId = model.NewStateId; model.Issue.AssignedToId = oldIssueDTO.AssignedTo.Id; model.Issue.Deadline = oldIssueDTO.Deadline; await _unitOfWork.SaveAsync(); return(_mapper.Map <IssueLogDTO>(model)); }
public async Task <IssueLogDTO> UpdateAsync(IssueLogDTO dto) { var model = _mapper.Map <IssueLog>(dto); _unitOfWork.IssueLogRepository.Update(model); await _unitOfWork.SaveAsync(); return(_mapper.Map <IssueLogDTO>(model)); }