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:
@@ -4,7 +4,7 @@ namespace App\Enums;
|
||||
|
||||
use BenSampo\Enum\Enum;
|
||||
|
||||
final class FolderPriority extends Enum
|
||||
final class DeclarationPriority extends Enum
|
||||
{
|
||||
const Low = 'low';
|
||||
|
||||
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 => [],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ namespace App\Enums;
|
||||
|
||||
use BenSampo\Enum\Enum;
|
||||
|
||||
final class FolderType extends Enum
|
||||
final class DeclarationType extends Enum
|
||||
{
|
||||
const VAT = 'vat';
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
use BenSampo\Enum\Enum;
|
||||
|
||||
final class FolderStatus extends Enum
|
||||
{
|
||||
const Draft = 'draft';
|
||||
|
||||
const WaitingDocuments = 'waiting_documents';
|
||||
|
||||
const DocumentsReceived = 'documents_received';
|
||||
|
||||
const Processing = 'processing';
|
||||
|
||||
const AdditionalDocumentsRequested = 'additional_documents_requested';
|
||||
|
||||
const WaitingClientValidation = 'waiting_client_validation';
|
||||
|
||||
const Validated = 'validated';
|
||||
|
||||
const Closed = 'closed';
|
||||
|
||||
const Cancelled = 'cancelled';
|
||||
}
|
||||
Reference in New Issue
Block a user