feat: complete Epic 0 — foundation migration & infrastructure setup
Stories 0.2-0.5: rename folders→declarations (backend+frontend), configure Redis for cache/queue/sessions, add foundation database migrations (permissions, archived_at), replace DeclarationStatus enum with architecture lifecycle values, create DeclarationObserver for status transition validation and auto-archive, fix controller status transitions to respect observer rules. 93 tests pass (240 assertions). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
50
app/Enums/DeclarationStatus.php
Normal file
50
app/Enums/DeclarationStatus.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
use BenSampo\Enum\Enum;
|
||||
|
||||
final class DeclarationStatus extends Enum
|
||||
{
|
||||
const Created = 'created';
|
||||
|
||||
const EnCours = 'en_cours';
|
||||
|
||||
const EnAttenteClient = 'en_attente_client';
|
||||
|
||||
const Termine = 'termine';
|
||||
|
||||
const Ferme = 'ferme';
|
||||
|
||||
/**
|
||||
* Get French display labels for each status.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public static function labels(): array
|
||||
{
|
||||
return [
|
||||
self::Created => 'Créé',
|
||||
self::EnCours => 'En cours',
|
||||
self::EnAttenteClient => 'En attente client',
|
||||
self::Termine => 'Terminé',
|
||||
self::Ferme => 'Fermé',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the valid next statuses for each status per the architecture status flow.
|
||||
*
|
||||
* @return array<string, list<string>>
|
||||
*/
|
||||
public static function allowedTransitions(): array
|
||||
{
|
||||
return [
|
||||
self::Created => [self::EnCours],
|
||||
self::EnCours => [self::EnAttenteClient, self::Termine],
|
||||
self::EnAttenteClient => [self::EnCours],
|
||||
self::Termine => [self::Ferme],
|
||||
self::Ferme => [],
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user