Files
2026-04-01 10:30:52 +09:00

140 lines
4.0 KiB
PHP

<?php
namespace Database\Seeders\Sample;
use App\Models\Template;
use App\Models\TemplateLayout;
use Illuminate\Database\Seeder;
class TemplateSeeder extends Seeder
{
/**
* 기본 템플릿 정보
*/
private array $defaultTemplate = [
'identifier' => 'sirsoft-admin_basic',
'vendor' => 'sirsoft',
'name' => [
'ko' => 'Admin Basic',
'en' => 'Admin Basic',
],
'version' => '0.1.1',
'type' => 'admin',
'description' => [
'ko' => '그누보드7 기본 관리자 템플릿',
'en' => 'Gnuboard7 default admin template',
],
'status' => 'inactive',
];
/**
* 기본 레이아웃 정보
*/
private array $defaultLayout = [
'name' => '_admin_base',
'content' => [
'version' => '0.1.1',
'layout_name' => '_admin_base',
'meta' => [
'title' => '$t:common.admin',
'description' => 'Admin base layout',
],
'components' => [
[
'id' => 'root',
'type' => 'layout',
'name' => 'Container',
'props' => [
'layout' => 'flex',
'direction' => 'column',
],
'children' => [
[
'id' => 'header',
'type' => 'composite',
'name' => 'AdminHeader',
'props' => [],
],
[
'id' => 'content',
'type' => 'layout',
'name' => 'Slot',
'props' => [
'name' => 'content',
],
],
[
'id' => 'footer',
'type' => 'composite',
'name' => 'AdminFooter',
'props' => [],
],
],
],
],
],
];
/**
* 시더 실행
*/
public function run(): void
{
$this->command->info('템플릿 시더 생성을 시작합니다.');
// 기존 데이터 삭제
$this->deleteExistingTemplates();
// 기본 템플릿 생성
$template = $this->createDefaultTemplate();
// 기본 레이아웃 생성
$this->createTemplateLayouts($template);
$this->command->info('템플릿 시더가 성공적으로 생성되었습니다.');
}
/**
* 기존 템플릿 삭제
*/
private function deleteExistingTemplates(): void
{
$deletedCount = Template::where('identifier', $this->defaultTemplate['identifier'])->forceDelete();
if ($deletedCount > 0) {
$this->command->warn("기존 템플릿 {$deletedCount}건을 삭제했습니다.");
}
}
/**
* 기본 템플릿 생성
*/
private function createDefaultTemplate(): Template
{
// JSON 구조 검증
if (! is_array($this->defaultTemplate['name']) || ! is_array($this->defaultTemplate['description'])) {
throw new \Exception('Template name and description must be arrays');
}
$template = Template::create($this->defaultTemplate);
$this->command->info("템플릿이 생성되었습니다: {$template->identifier}");
return $template;
}
/**
* 기본 레이아웃 생성
*/
private function createTemplateLayouts(Template $template): void
{
$layout = TemplateLayout::create([
'template_id' => $template->id,
'name' => $this->defaultLayout['name'],
'content' => $this->defaultLayout['content'],
]);
$this->command->info("레이아웃이 생성되었습니다: {$layout->name}");
}
}