From d7dd6cdbc51585ba794b7d00d1b155a1c7be044c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Mon, 2 Mar 2026 15:50:05 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[roadmap]=20=EC=A4=91=EC=9E=A5=EA=B8=B0?= =?UTF-8?q?=20=EA=B3=84=ED=9A=8D=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=A7=88?= =?UTF-8?q?=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - admin_roadmap_plans: 계획 테이블 (제목, 카테고리, 상태, Phase, 진행률 등) - admin_roadmap_milestones: 마일스톤 테이블 (plan_id FK, 상태, 예정일 등) --- ..._02_000000_create_admin_roadmap_tables.php | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 database/migrations/2026_03_02_000000_create_admin_roadmap_tables.php diff --git a/database/migrations/2026_03_02_000000_create_admin_roadmap_tables.php b/database/migrations/2026_03_02_000000_create_admin_roadmap_tables.php new file mode 100644 index 0000000..c786e5d --- /dev/null +++ b/database/migrations/2026_03_02_000000_create_admin_roadmap_tables.php @@ -0,0 +1,68 @@ +id(); + $table->string('title', 200); + $table->text('description')->nullable(); + $table->longText('content')->nullable(); + $table->string('category', 30)->default('general'); + $table->string('status', 20)->default('planned'); + $table->string('priority', 10)->default('medium'); + $table->string('phase', 30)->default('phase_1'); + $table->date('start_date')->nullable(); + $table->date('end_date')->nullable(); + $table->tinyInteger('progress')->unsigned()->default(0); + $table->string('color', 7)->default('#3B82F6'); + $table->integer('sort_order')->default(0); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->index('category'); + $table->index('status'); + $table->index('phase'); + $table->index('priority'); + }); + + Schema::create('admin_roadmap_milestones', function (Blueprint $table) { + $table->id(); + $table->unsignedBigInteger('plan_id'); + $table->string('title', 255); + $table->text('description')->nullable(); + $table->string('status', 20)->default('pending'); + $table->date('due_date')->nullable(); + $table->timestamp('completed_at')->nullable(); + $table->unsignedBigInteger('assignee_id')->nullable(); + $table->integer('sort_order')->default(0); + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->foreign('plan_id') + ->references('id') + ->on('admin_roadmap_plans') + ->cascadeOnDelete(); + + $table->index('status'); + $table->index('due_date'); + }); + } + + public function down(): void + { + Schema::dropIfExists('admin_roadmap_milestones'); + Schema::dropIfExists('admin_roadmap_plans'); + } +};