feat: Initialize core application structure including authentication, role-based dashboards, service task management, and integration workflows.

This commit is contained in:
jeremy bayse
2026-02-16 09:30:23 +01:00
commit af060a8847
208 changed files with 26822 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
<?php
namespace App\States\Integration;
use App\Enums\IntegrationStatus;
class CancelledState extends IntegrationState
{
public function status(): IntegrationStatus
{
return IntegrationStatus::Cancelled;
}
protected function allowedTransitions(): array
{
return [];
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\States\Integration;
use App\Enums\IntegrationStatus;
class CompletedState extends IntegrationState
{
public function status(): IntegrationStatus
{
return IntegrationStatus::Completed;
}
protected function allowedTransitions(): array
{
return [];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\States\Integration;
use App\Enums\IntegrationStatus;
class DraftState extends IntegrationState
{
public function status(): IntegrationStatus
{
return IntegrationStatus::Draft;
}
protected function allowedTransitions(): array
{
return [
IntegrationStatus::PendingRHValidation,
IntegrationStatus::Cancelled,
];
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\States\Integration;
use App\Enums\IntegrationStatus;
class InProgressState extends IntegrationState
{
public function status(): IntegrationStatus
{
return IntegrationStatus::InProgress;
}
protected function allowedTransitions(): array
{
return [
IntegrationStatus::WaitingServices,
IntegrationStatus::Completed,
IntegrationStatus::Cancelled,
];
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace App\States\Integration;
use App\Models\IntegrationRequest;
use App\Enums\IntegrationStatus;
abstract class IntegrationState
{
public function __construct(protected IntegrationRequest $request)
{
}
abstract public function status(): IntegrationStatus;
public function canTransitionTo(IntegrationStatus $status): bool
{
return in_array($status, $this->allowedTransitions());
}
abstract protected function allowedTransitions(): array;
public function transitionTo(IntegrationStatus $status): void
{
if (!$this->canTransitionTo($status)) {
throw new \Exception("Transition from {$this->status()->value} to {$status->value} is not allowed.");
}
$this->request->update(['status' => $status]);
// Trigger events or notifications here
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\States\Integration;
use App\Enums\IntegrationStatus;
class PendingRHValidationState extends IntegrationState
{
public function status(): IntegrationStatus
{
return IntegrationStatus::PendingRHValidation;
}
protected function allowedTransitions(): array
{
return [
IntegrationStatus::InProgress,
IntegrationStatus::Rejected,
IntegrationStatus::Cancelled,
];
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\States\Integration;
use App\Enums\IntegrationStatus;
class RejectedState extends IntegrationState
{
public function status(): IntegrationStatus
{
return IntegrationStatus::Rejected;
}
protected function allowedTransitions(): array
{
return [
IntegrationStatus::Draft,
];
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\States\ServiceTask;
use App\Enums\ServiceTaskStatus;
class CompletedState extends ServiceTaskState
{
public function status(): ServiceTaskStatus
{
return ServiceTaskStatus::Completed;
}
protected function allowedTransitions(): array
{
return [];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\States\ServiceTask;
use App\Enums\ServiceTaskStatus;
class InProgressState extends ServiceTaskState
{
public function status(): ServiceTaskStatus
{
return ServiceTaskStatus::InProgress;
}
protected function allowedTransitions(): array
{
return [
ServiceTaskStatus::WaitingValidation,
ServiceTaskStatus::Rejected,
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\States\ServiceTask;
use App\Enums\ServiceTaskStatus;
class PendingState extends ServiceTaskState
{
public function status(): ServiceTaskStatus
{
return ServiceTaskStatus::Pending;
}
protected function allowedTransitions(): array
{
return [
ServiceTaskStatus::InProgress,
ServiceTaskStatus::Rejected,
];
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\States\ServiceTask;
use App\Enums\ServiceTaskStatus;
class RejectedState extends ServiceTaskState
{
public function status(): ServiceTaskStatus
{
return ServiceTaskStatus::Rejected;
}
protected function allowedTransitions(): array
{
return [
ServiceTaskStatus::Pending,
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\States\ServiceTask;
use App\Models\ServiceTask;
use App\Enums\ServiceTaskStatus;
abstract class ServiceTaskState
{
public function __construct(protected ServiceTask $task)
{
}
abstract public function status(): ServiceTaskStatus;
public function canTransitionTo(ServiceTaskStatus $status): bool
{
return in_array($status, $this->allowedTransitions());
}
abstract protected function allowedTransitions(): array;
public function transitionTo(ServiceTaskStatus $status): void
{
if (!$this->canTransitionTo($status)) {
throw new \Exception("Transition from {$this->status()->value} to {$status->value} is not allowed.");
}
$this->task->update(['status' => $status]);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\States\ServiceTask;
use App\Enums\ServiceTaskStatus;
class WaitingValidationState extends ServiceTaskState
{
public function status(): ServiceTaskStatus
{
return ServiceTaskStatus::WaitingValidation;
}
protected function allowedTransitions(): array
{
return [
ServiceTaskStatus::Completed,
ServiceTaskStatus::Rejected,
ServiceTaskStatus::InProgress, // In case of rework
];
}
}