feat: WIP submission panel & submission stages (#1018)

This commit is contained in:
Kyrch
2025-12-09 12:04:48 -03:00
committed by GitHub
parent 8258bc05af
commit 696a9882a9
44 changed files with 1370 additions and 921 deletions
@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace Database\Factories\User\Submission;
use App\Models\User\Submission;
use App\Models\User\Submission\SubmissionStage;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @method SubmissionStage createOne($attributes = [])
* @method SubmissionStage makeOne($attributes = [])
*
* @extends Factory<SubmissionStage>
*/
class SubmissionStageFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var class-string<SubmissionStage>
*/
protected $model = SubmissionStage::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
SubmissionStage::ATTRIBUTE_SUBMISSION => Submission::factory(),
SubmissionStage::ATTRIBUTE_MODERATOR_NOTES => fake()->text(),
];
}
}
@@ -1,45 +0,0 @@
<?php
declare(strict_types=1);
namespace Database\Factories\User\Submission;
use App\Enums\Models\User\ApprovableStatus;
use App\Enums\Models\User\SubmissionActionType;
use App\Models\User\Submission;
use App\Models\User\Submission\SubmissionStep;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Arr;
/**
* @method SubmissionStep createOne($attributes = [])
* @method SubmissionStep makeOne($attributes = [])
*
* @extends Factory<SubmissionStep>
*/
class SubmissionStepFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var class-string<SubmissionStep>
*/
protected $model = SubmissionStep::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
$action = Arr::random(SubmissionActionType::cases());
$status = Arr::random(ApprovableStatus::cases());
return [
SubmissionStep::ATTRIBUTE_ACTION => $action->value,
SubmissionStep::ATTRIBUTE_STATUS => $status->value,
SubmissionStep::ATTRIBUTE_SUBMISSION => Submission::factory(),
];
}
}
@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace Database\Factories\User;
use App\Enums\Models\User\ApprovableStatus;
use App\Enums\Models\User\SubmissionStatus;
use App\Models\User\Submission;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Arr;
@@ -31,7 +31,7 @@ class SubmissionFactory extends Factory
*/
public function definition(): array
{
$status = Arr::random(ApprovableStatus::cases());
$status = Arr::random(SubmissionStatus::cases());
return [
Submission::ATTRIBUTE_MODERATOR_NOTES => fake()->text(),
@@ -4,7 +4,7 @@ declare(strict_types=1);
use App\Models\Auth\User;
use App\Models\User\Submission;
use App\Models\User\Submission\SubmissionStep;
use App\Models\User\Submission\SubmissionStage;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
@@ -20,7 +20,8 @@ return new class extends Migration
Schema::create(Submission::TABLE, function (Blueprint $table) {
$table->id(Submission::ATTRIBUTE_ID);
$table->longText(Submission::ATTRIBUTE_NOTES)->nullable();
$table->nullableUuidMorphs(Submission::RELATION_ACTIONABLE);
$table->string(Submission::ATTRIBUTE_TYPE);
$table->longText(Submission::ATTRIBUTE_MODERATOR_NOTES)->nullable();
$table->integer(Submission::ATTRIBUTE_STATUS)->nullable();
@@ -31,6 +32,7 @@ return new class extends Migration
$table->unsignedBigInteger(Submission::ATTRIBUTE_MODERATOR)->nullable();
$table->foreign(Submission::ATTRIBUTE_MODERATOR)->references(User::ATTRIBUTE_ID)->on(User::TABLE)->nullOnDelete();
$table->boolean(Submission::ATTRIBUTE_LOCKED)->default(false);
$table->timestamp(Submission::ATTRIBUTE_FINISHED_AT, 6)->nullable();
$table->timestamps(6);
@@ -38,22 +40,22 @@ return new class extends Migration
});
}
if (! Schema::hasTable(SubmissionStep::TABLE)) {
Schema::create(SubmissionStep::TABLE, function (Blueprint $table) {
$table->id(SubmissionStep::ATTRIBUTE_ID);
if (! Schema::hasTable(SubmissionStage::TABLE)) {
Schema::create(SubmissionStage::TABLE, function (Blueprint $table) {
$table->id(SubmissionStage::ATTRIBUTE_ID);
$table->integer(SubmissionStep::ATTRIBUTE_ACTION)->nullable();
$table->nullableMorphs(SubmissionStep::RELATION_ACTIONABLE);
$table->nullableMorphs(SubmissionStep::RELATION_TARGET);
$table->string(SubmissionStep::ATTRIBUTE_PIVOT)->nullable();
$table->integer(SubmissionStage::ATTRIBUTE_STAGE);
$table->json(SubmissionStep::ATTRIBUTE_FIELDS)->nullable();
$table->integer(SubmissionStep::ATTRIBUTE_STATUS)->nullable();
$table->json(SubmissionStage::ATTRIBUTE_FIELDS)->nullable();
$table->longText(SubmissionStage::ATTRIBUTE_NOTES)->nullable();
$table->longText(SubmissionStage::ATTRIBUTE_MODERATOR_NOTES)->nullable();
$table->unsignedBigInteger(SubmissionStep::ATTRIBUTE_SUBMISSION);
$table->foreign(SubmissionStep::ATTRIBUTE_SUBMISSION)->references(Submission::ATTRIBUTE_ID)->on(Submission::TABLE)->cascadeOnDelete();
$table->unsignedBigInteger(SubmissionStage::ATTRIBUTE_SUBMISSION);
$table->foreign(SubmissionStage::ATTRIBUTE_SUBMISSION)->references(Submission::ATTRIBUTE_ID)->on(Submission::TABLE)->cascadeOnDelete();
$table->unsignedBigInteger(SubmissionStage::ATTRIBUTE_MODERATOR)->nullable();
$table->foreign(SubmissionStage::ATTRIBUTE_MODERATOR)->references(User::ATTRIBUTE_ID)->on(User::TABLE)->nullOnDelete();
$table->timestamp(SubmissionStep::ATTRIBUTE_FINISHED_AT, 6)->nullable();
$table->timestamps(6);
});
}
@@ -64,7 +66,7 @@ return new class extends Migration
*/
public function down(): void
{
Schema::dropIfExists(SubmissionStep::TABLE);
Schema::dropIfExists(SubmissionStage::TABLE);
Schema::dropIfExists(Submission::TABLE);
}
};