forge/app/Observers/ModVersionObserver.php
Refringe db578071e4
SPT Semvar & Automatic Resolution
This update gives mod versions a supported SPT version field that accepts a semantic version. The latest supported SPT version will be automatically resolved based on the semvar.

Next up: I need to update the ModVersion to SptVersion relationship to be a many-to-many and expand the resolution to resolve multiple versions.
2024-08-22 17:04:07 -04:00

59 lines
1.6 KiB
PHP

<?php
namespace App\Observers;
use App\Exceptions\CircularDependencyException;
use App\Models\ModDependency;
use App\Models\ModVersion;
use App\Services\DependencyVersionService;
use App\Services\SptVersionService;
class ModVersionObserver
{
protected DependencyVersionService $dependencyVersionService;
protected SptVersionService $sptVersionService;
public function __construct(
DependencyVersionService $dependencyVersionService,
SptVersionService $sptVersionService,
) {
$this->dependencyVersionService = $dependencyVersionService;
$this->sptVersionService = $sptVersionService;
}
/**
* Handle the ModVersion "saved" event.
*
* @throws CircularDependencyException
*/
public function saved(ModVersion $modVersion): void
{
$this->resolveDependencyVersion($modVersion);
$this->sptVersionService->resolve($modVersion);
}
/**
* Resolve the ModVersion's dependencies.
*
* @throws CircularDependencyException
*/
private function resolveDependencyVersion(ModVersion $modVersion): void
{
$dependencies = ModDependency::where('resolved_version_id', $modVersion->id)->get();
foreach ($dependencies as $dependency) {
$this->dependencyVersionService->resolve($dependency->modVersion);
}
}
/**
* Handle the ModVersion "deleted" event.
*
* @throws CircularDependencyException
*/
public function deleted(ModVersion $modVersion): void
{
$this->resolveDependencyVersion($modVersion);
}
}