Skip to content

Commit

Permalink
Retry if exception is generated
Browse files Browse the repository at this point in the history
  • Loading branch information
famoser committed Nov 20, 2021
1 parent a54adb5 commit abee7af
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 28 deletions.
4 changes: 3 additions & 1 deletion src/Exception/GenerationException.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@

namespace App\Exception;

use App\Enum\GenerationStatus;

class GenerationException extends \Exception
{
public function __construct($generationStatus)
{
parent::__construct('', $generationStatus);
parent::__construct(GenerationStatus::getText($generationStatus));
}
}
74 changes: 47 additions & 27 deletions src/Service/EventGenerationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,53 @@ private function getPredeterminedEventTargetOfEvent($event, array $eventTargets)
* @throws \Exception
*/
public function generate(EventGeneration $eventGeneration)
{
$tries = 100;
$lastException = null;
while ($tries-- > 0) {
try {
$this->doGenerate($eventGeneration);

return;
} catch (GenerationException $exception) {
$lastException = $exception;
}
}

throw $lastException;
}

public function persist(EventGeneration $eventGeneration, Doctor $creator)
{
$manager = $this->doctrine->getManager();

//create events
foreach ($eventGeneration->getPreviewEvents() as $previewEvent) {
$event = Event::create($previewEvent);

//add past
$eventPast = EventPast::create($event, EventChangeType::GENERATED, $creator);
$event->getEventPast()->add($eventPast);

//add tags
foreach ($eventGeneration->getAssignEventTags() as $assignEventTag) {
$event->getEventTags()->add($assignEventTag);
}

//add to db
$manager->persist($event);
}

//apply & flush all
$eventGeneration->setIsApplied(true);
$manager->persist($eventGeneration);
$manager->flush();
}

/**
* @throws GenerationException
*/
private function doGenerate(EventGeneration $eventGeneration)
{
//create events & fill out properties
$events = $this->constructEvents($eventGeneration);
Expand Down Expand Up @@ -537,31 +584,4 @@ public function generate(EventGeneration $eventGeneration)
$event->setGeneratedBy($eventGeneration);
}
}

public function persist(EventGeneration $eventGeneration, Doctor $creator)
{
$manager = $this->doctrine->getManager();

//create events
foreach ($eventGeneration->getPreviewEvents() as $previewEvent) {
$event = Event::create($previewEvent);

//add past
$eventPast = EventPast::create($event, EventChangeType::GENERATED, $creator);
$event->getEventPast()->add($eventPast);

//add tags
foreach ($eventGeneration->getAssignEventTags() as $assignEventTag) {
$event->getEventTags()->add($assignEventTag);
}

//add to db
$manager->persist($event);
}

//apply & flush all
$eventGeneration->setIsApplied(true);
$manager->persist($eventGeneration);
$manager->flush();
}
}

0 comments on commit abee7af

Please sign in to comment.