feat(Production): Complete production deployment infrastructure

- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
This commit is contained in:
2025-10-25 19:18:37 +02:00
parent caa85db796
commit fc3d7e6357
83016 changed files with 378904 additions and 20919 deletions

View File

@@ -32,13 +32,13 @@ describe('Placeholder', function () {
});
it('validates placeholder names', function () {
expect(fn() => Placeholder::fromString(''))
expect(fn () => Placeholder::fromString(''))
->toThrow(InvalidArgumentException::class);
expect(fn() => Placeholder::fromString('123invalid'))
expect(fn () => Placeholder::fromString('123invalid'))
->toThrow(InvalidArgumentException::class);
expect(fn() => Placeholder::fromString('invalid-name'))
expect(fn () => Placeholder::fromString('invalid-name'))
->toThrow(InvalidArgumentException::class);
});
@@ -101,4 +101,4 @@ describe('Placeholder', function () {
expect($typed->getPattern())->toBe('(\d+)');
});
});
});
});

View File

@@ -42,7 +42,7 @@ describe('RoutePath', function () {
});
it('throws on empty path', function () {
expect(fn() => RoutePath::fromElements())
expect(fn () => RoutePath::fromElements())
->toThrow(InvalidArgumentException::class);
});
});
@@ -146,13 +146,13 @@ describe('RoutePath', function () {
describe('validation', function () {
it('validates segment content', function () {
expect(fn() => RoutePath::fromElements('api', ''))
expect(fn () => RoutePath::fromElements('api', ''))
->toThrow(InvalidArgumentException::class);
});
it('rejects invalid characters in segments', function () {
expect(fn() => RoutePath::fromElements('api', 'users{id}'))
expect(fn () => RoutePath::fromElements('api', 'users{id}'))
->toThrow(InvalidArgumentException::class);
});
});
});
});