/** * Set transaction messages * * @param Transaction $transaction Transaction * @return $this */ public function setTransactionMessages(Transaction $transaction) { $messages = $transaction->getMessages(); $messages->set('info', $this->messages); $transaction->setMessages($messages); return $this; }
/** * Setting transaction notices * * @param Transaction &$transaction * * @return void */ public function setTransactionNotices(Transaction &$transaction) { $messages = $transaction->getMessages(); if (!$this->isEmpty()) { $messages->set('notices', $this->getNotices()); } $transaction->setMessages($messages); }
/** * Handle * * @param Transaction $transaction transaction * @param mixed $data data * @param ConstraintViolationList $violations violations * * @throws FeatureNotImplementedException * @throws \Exception * * @return CollectionResponse|CrudEntityInterface */ public function handle(Transaction $transaction, $data, ConstraintViolationList $violations = null) { if (is_array($data)) { $data = new ArrayCollection($data); } $handled = false; foreach ($this->handlers as $handler) { if (!$handler instanceof TransactionHandlerInterface) { throw new \Exception('Handler must be instance of TransactionHandlerInterface'); } if ($handler->supports() === $transaction->getMethod()) { $data = $handler->handle($transaction, $data, $violations); $handled = true; } } if (!$handled) { throw new FeatureNotImplementedException('Method ' . $transaction->getMethod() . ' is not supported yet.'); } $data->setTransaction($transaction); return $data; }
/** * Handle individual entity * * @param Transaction $transaction Transaction * @param CrudEntityInterface $entity Entity * * @return void */ private function handleEntity($transaction, CrudEntityInterface $entity) { $transaction->setRequestSource(Transaction::SOURCE_SERVICE); $transaction->setId(UUID::generate()); $transaction->setRequestId(microtime()); $transaction->setRelatedIds($entity->getIds()); $errors = $this->errorBuilder->getEntityErrors($entity->getPrimaryKey()); $messages = new ArrayCollection(); $success = $errors->isEmpty(); $status = $success ? Transaction::STATUS_CREATED : Transaction::STATUS_CONFLICT; $transaction->setStatus($status); $transaction->setSuccess($success); if ($success) { $this->noticeBuilder->addSuccess(); } else { $messages->set('errors', $errors); $this->noticeBuilder->addFail(); } $transaction->setMessages($messages); $em = $this->registry->getManagerForClass(get_class($transaction)); $em->persist($transaction); $entity->setTransaction($transaction); }
/** * Building transaction * * @return Transaction */ public function build() { $datetime = new \DateTime(); $transaction = new Transaction(); $transaction->setMethod($this->requestMethod)->setRelatedRoute($this->relatedRoute)->setRelatedIds($this->relatedIds)->setRequestId(microtime())->setId(UUID::generate())->setRequestSource($this->requestSource)->setModel($this->model)->setCreatedAt($datetime)->setUpdatedAt($datetime); return $transaction; }
/** * Setting transaction errors * * @param Transaction &$transaction * * @return void */ public function setTransactionErrors(Transaction &$transaction) { $messages = new ArrayCollection(); $globalErrors = $this->getErrors(Error::CONTEXT_GLOBAL); if (!$globalErrors->isEmpty()) { $transaction->setStatus(Transaction::STATUS_NOT_FOUND); } $errors = $this->getErrors(); if (!$errors->isEmpty()) { $messages->set('errors', $errors); } if ($messages->count()) { $transaction->setMessages($messages); } }