TenantAtlas/apps/platform/app/Support/SystemConsole/SystemConsoleWindow.php
ahmido ce0615a9c1 Spec 182: relocate Laravel platform to apps/platform (#213)
## Summary
- move the Laravel application into `apps/platform` and keep the repository root for orchestration, docs, and tooling
- update the local command model, Sail/Docker wiring, runtime paths, and ignore rules around the new platform location
- add relocation quickstart/contracts plus focused smoke coverage for bootstrap, command model, routes, and runtime behavior

## Validation
- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/PlatformRelocation`
- integrated browser smoke validated `/up`, `/`, `/admin`, `/admin/choose-workspace`, and tenant route semantics for `200`, `403`, and `404`

## Remaining Rollout Checks
- validate Dokploy build context and working-directory assumptions against the new `apps/platform` layout
- confirm web, queue, and scheduler processes all start from the expected working directory in staging/production
- verify no legacy volume mounts or asset-publish paths still point at the old root-level `public/` or `storage/` locations

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #213
2026-04-08 08:40:47 +00:00

58 lines
1.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Support\SystemConsole;
use Carbon\CarbonImmutable;
final class SystemConsoleWindow
{
public const LastHour = '1h';
public const LastDay = '24h';
public const LastWeek = '7d';
private function __construct(
public readonly string $value,
private readonly int $minutes,
) {}
public static function fromNullable(?string $window): self
{
return match (trim((string) $window)) {
self::LastHour => new self(self::LastHour, 60),
self::LastWeek => new self(self::LastWeek, 10080),
default => new self(self::LastDay, 1440),
};
}
/**
* @return array<string, string>
*/
public static function options(): array
{
return [
self::LastHour => 'Last hour',
self::LastDay => 'Last 24 hours',
self::LastWeek => 'Last 7 days',
];
}
/**
* @return array<int, string>
*/
public static function allowed(): array
{
return array_keys(self::options());
}
public function startAt(?CarbonImmutable $now = null): CarbonImmutable
{
$now ??= CarbonImmutable::now();
return $now->subMinutes($this->minutes);
}
}