Added the support for generating docs from template doc

This commit is contained in:
Simon Pocrnjič
2025-10-06 21:46:28 +02:00
parent 0c8d1e0b5d
commit cec5796acf
69 changed files with 4570 additions and 374 deletions
@@ -0,0 +1,28 @@
<?php
namespace App\Services\Documents;
use App\Models\DocumentSetting;
use Illuminate\Support\Facades\Cache;
class DocumentSettings
{
private const CACHE_KEY = 'document_settings_singleton_v1';
public function get(): DocumentSetting
{
return Cache::remember(self::CACHE_KEY, 300, fn () => DocumentSetting::instance());
}
public function refresh(): DocumentSetting
{
Cache::forget(self::CACHE_KEY);
return $this->get();
}
public function fresh(): DocumentSetting
{
return $this->refresh();
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Services\Documents\Exceptions;
use RuntimeException;
class UnresolvedTokensException extends RuntimeException
{
/** @var array<int,string> */
public array $unresolved;
/**
* @param array<int,string> $unresolved
*/
public function __construct(array $unresolved, string $message = 'Unresolved tokens remain in template.')
{
parent::__construct($message);
$this->unresolved = $unresolved;
}
}
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App\Services\Documents;
class TokenScanner
{
private const REGEX = '/{{\s*([a-zA-Z0-9_]+\.[a-zA-Z0-9_]+)\s*}}/';
/**
* @return array<int,string>
*/
public function scan(string $content): array
{
preg_match_all(self::REGEX, $content, $m);
if (empty($m[1])) {
return [];
}
return array_values(array_unique($m[1]));
}
}