From 94ecbe588784b258b40f6fefc6c4c2ce271386ee Mon Sep 17 00:00:00 2001 From: ISMAIL MASSERAN Date: Mon, 8 Jun 2026 11:37:14 +0800 Subject: [PATCH] first init --- .gitignore | 16 + README.md | 142 + TODO.md | 15 + be/.dockerignore | 25 + be/.editorconfig | 18 + be/.env.development | 98 + be/.env.example | 79 + be/.env.production | 104 + be/.env.staging | 88 + be/.env.training | 101 + be/.gitattributes | 11 + be/.gitignore | 23 + be/Modules/ActivityLog/Actions/.gitkeep | 0 be/Modules/ActivityLog/Config/.gitkeep | 0 be/Modules/ActivityLog/Config/config.php | 5 + be/Modules/ActivityLog/Console/.gitkeep | 0 .../ActivityLog/Database/Factories/.gitkeep | 0 .../ActivityLog/Database/Migrations/.gitkeep | 0 .../ActivityLog/Database/Seeders/.gitkeep | 0 .../Seeders/ActivityLogDatabaseSeeder.php | 16 + be/Modules/ActivityLog/Emails/.gitkeep | 0 be/Modules/ActivityLog/Entities/.gitkeep | 0 be/Modules/ActivityLog/Helpers/.gitkeep | 0 .../ActivityLog/Http/Controllers/.gitkeep | 0 .../Controllers/ActivityLogController.php | 97 + be/Modules/ActivityLog/Http/Requests/.gitkeep | 0 be/Modules/ActivityLog/Jobs/.gitkeep | 0 be/Modules/ActivityLog/Notifications/.gitkeep | 0 be/Modules/ActivityLog/Policies/.gitkeep | 0 .../Policies/ActivityLogPolicy.php | 27 + be/Modules/ActivityLog/Providers/.gitkeep | 0 .../Providers/ActivityLogServiceProvider.php | 154 + .../Providers/EventServiceProvider.php | 27 + .../Providers/RouteServiceProvider.php | 49 + be/Modules/ActivityLog/Repositories/.gitkeep | 0 .../Repositories/Contracts/.gitkeep | 0 be/Modules/ActivityLog/Routes/.gitkeep | 0 be/Modules/ActivityLog/Routes/api.php | 8 + be/Modules/ActivityLog/Services/.gitkeep | 0 be/Modules/ActivityLog/Tests/Feature/.gitkeep | 0 be/Modules/ActivityLog/Tests/Unit/.gitkeep | 0 be/Modules/ActivityLog/Transformers/.gitkeep | 0 be/Modules/ActivityLog/composer.json | 30 + be/Modules/ActivityLog/module.json | 11 + be/Modules/ActivityLog/package.json | 15 + .../Auth/Actions/Fortify/CreateNewUser.php | 91 + .../Auth/Actions/Fortify/LoginResponse.php | 42 + .../Auth/Actions/Fortify/LogoutResponse.php | 39 + .../Fortify/PasswordValidationRules.php | 18 + .../Auth/Actions/Fortify/RegisterResponse.php | 26 + .../Actions/Fortify/ResetUserPassword.php | 29 + .../Actions/Fortify/UpdateUserPassword.php | 32 + .../Fortify/UpdateUserProfileInformation.php | 58 + be/Modules/Auth/Config/.gitkeep | 0 be/Modules/Auth/Config/config.php | 5 + be/Modules/Auth/Console/.gitkeep | 0 be/Modules/Auth/Database/Factories/.gitkeep | 0 be/Modules/Auth/Database/Migrations/.gitkeep | 0 be/Modules/Auth/Database/Seeders/.gitkeep | 0 .../Database/Seeders/AuthDatabaseSeeder.php | 16 + be/Modules/Auth/Emails/.gitkeep | 0 .../Auth/Emails/EmailVerificationOtpEmail.php | 35 + .../Auth/Entities/EmailVerificationOtp.php | 44 + be/Modules/Auth/Entities/User.php | 252 + be/Modules/Auth/Helpers/.gitkeep | 0 .../EmailVerificationController.php | 62 + .../Http/Controllers/SessionController.php | 66 + be/Modules/Auth/Jobs/.gitkeep | 0 be/Modules/Auth/Notifications/.gitkeep | 0 be/Modules/Auth/Policies/.gitkeep | 0 .../Auth/Providers/AuthServiceProvider.php | 171 + .../Auth/Providers/EventServiceProvider.php | 27 + .../Auth/Providers/RouteServiceProvider.php | 35 + be/Modules/Auth/Repositories/.gitkeep | 0 be/Modules/Auth/Routes/.gitkeep | 0 be/Modules/Auth/Routes/api.php | 27 + be/Modules/Auth/Services/.gitkeep | 0 .../Auth/Services/AuthSessionService.php | 49 + .../Services/EmailVerificationOtpService.php | 98 + be/Modules/Auth/Tests/Feature/.gitkeep | 0 be/Modules/Auth/Tests/Unit/.gitkeep | 0 be/Modules/Auth/Transformers/.gitkeep | 0 be/Modules/Auth/Transformers/AuthResource.php | 22 + .../Auth/Transformers/SSOUserResource.php | 62 + be/Modules/Auth/Transformers/UserResource.php | 61 + be/Modules/Auth/composer.json | 30 + be/Modules/Auth/module.json | 11 + be/Modules/Auth/package.json | 15 + .../views/emails/verification-otp.blade.php | 26 + be/Modules/Dashboard/Actions/.gitkeep | 0 be/Modules/Dashboard/Config/.gitkeep | 0 be/Modules/Dashboard/Config/config.php | 5 + be/Modules/Dashboard/Console/.gitkeep | 0 .../Dashboard/Database/Factories/.gitkeep | 0 .../Dashboard/Database/Migrations/.gitkeep | 0 .../Dashboard/Database/Seeders/.gitkeep | 0 .../Seeders/DashboardDatabaseSeeder.php | 16 + be/Modules/Dashboard/Emails/.gitkeep | 0 be/Modules/Dashboard/Entities/.gitkeep | 0 be/Modules/Dashboard/Helpers/.gitkeep | 0 .../Dashboard/Http/Controllers/.gitkeep | 0 .../Http/Controllers/DashboardController.php | 109 + .../KJC/KJCDashboardController.php | 302 + .../PKJ/PKJDashboardController.php | 188 + be/Modules/Dashboard/Http/Requests/.gitkeep | 0 be/Modules/Dashboard/Jobs/.gitkeep | 0 be/Modules/Dashboard/Notifications/.gitkeep | 0 be/Modules/Dashboard/Policies/.gitkeep | 0 be/Modules/Dashboard/Providers/.gitkeep | 0 .../Providers/DashboardServiceProvider.php | 169 + .../Providers/EventServiceProvider.php | 27 + .../Providers/RouteServiceProvider.php | 49 + be/Modules/Dashboard/Repositories/.gitkeep | 0 .../Dashboard/Repositories/Contracts/.gitkeep | 0 .../KJCDashboardRepositoryInterface.php | 57 + .../PKJDashboardRepositoryInterface.php | 51 + .../Repositories/KJCDashboardRepository.php | 645 + .../Repositories/PKJDashboardRepository.php | 495 + be/Modules/Dashboard/Routes/.gitkeep | 0 be/Modules/Dashboard/Routes/api.php | 44 + be/Modules/Dashboard/Services/.gitkeep | 0 .../Dashboard/Services/DashboardService.php | 486 + .../Services/KJC/KJCDashboardService.php | 315 + .../Services/PKJ/PKJDashboardService.php | 319 + be/Modules/Dashboard/Tests/Feature/.gitkeep | 0 be/Modules/Dashboard/Tests/Unit/.gitkeep | 0 be/Modules/Dashboard/Transformers/.gitkeep | 0 be/Modules/Dashboard/composer.json | 28 + be/Modules/Dashboard/module.json | 11 + be/Modules/Dashboard/package.json | 15 + be/Modules/Notification/Actions/.gitkeep | 0 be/Modules/Notification/Config/.gitkeep | 0 be/Modules/Notification/Config/config.php | 5 + be/Modules/Notification/Console/.gitkeep | 0 .../Notification/Database/Factories/.gitkeep | 0 .../Notification/Database/Migrations/.gitkeep | 0 .../Notification/Database/Seeders/.gitkeep | 0 .../Seeders/NotificationDatabaseSeeder.php | 16 + be/Modules/Notification/Emails/.gitkeep | 0 be/Modules/Notification/Entities/.gitkeep | 0 .../Notification/Entities/Notification.php | 21 + be/Modules/Notification/Helpers/.gitkeep | 0 .../Notification/Http/Controllers/.gitkeep | 0 .../Controllers/NotificationController.php | 469 + .../Notification/Http/Requests/.gitkeep | 0 be/Modules/Notification/Jobs/.gitkeep | 0 .../Notification/Notifications/.gitkeep | 0 be/Modules/Notification/Policies/.gitkeep | 0 be/Modules/Notification/Providers/.gitkeep | 0 .../Providers/EventServiceProvider.php | 27 + .../Providers/NotificationServiceProvider.php | 154 + .../Providers/RouteServiceProvider.php | 50 + be/Modules/Notification/Repositories/.gitkeep | 0 .../Repositories/Contracts/.gitkeep | 0 be/Modules/Notification/Routes/.gitkeep | 0 be/Modules/Notification/Routes/api.php | 11 + be/Modules/Notification/Routes/web.php | 8 + be/Modules/Notification/Services/.gitkeep | 0 .../Notification/Tests/Feature/.gitkeep | 0 be/Modules/Notification/Tests/Unit/.gitkeep | 0 be/Modules/Notification/Transformers/.gitkeep | 0 be/Modules/Notification/composer.json | 30 + be/Modules/Notification/module.json | 11 + be/Modules/Notification/package.json | 15 + be/Modules/Role/Actions/.gitkeep | 0 be/Modules/Role/Config/.gitkeep | 0 be/Modules/Role/Config/config.php | 5 + be/Modules/Role/Console/.gitkeep | 0 be/Modules/Role/Database/Factories/.gitkeep | 0 be/Modules/Role/Database/Migrations/.gitkeep | 0 be/Modules/Role/Database/Seeders/.gitkeep | 0 .../Database/Seeders/RoleDatabaseSeeder.php | 16 + be/Modules/Role/Emails/.gitkeep | 0 be/Modules/Role/Entities/.gitkeep | 0 be/Modules/Role/Entities/Role.php | 17 + be/Modules/Role/Helpers/.gitkeep | 0 be/Modules/Role/Http/Controllers/.gitkeep | 0 .../Role/Http/Controllers/RoleController.php | 181 + be/Modules/Role/Http/Requests/.gitkeep | 0 be/Modules/Role/Http/Requests/RoleRequest.php | 101 + be/Modules/Role/Jobs/.gitkeep | 0 be/Modules/Role/Notifications/.gitkeep | 0 be/Modules/Role/Policies/.gitkeep | 0 be/Modules/Role/Policies/RolePolicy.php | 59 + be/Modules/Role/Providers/.gitkeep | 0 .../Role/Providers/EventServiceProvider.php | 27 + .../Role/Providers/RoleServiceProvider.php | 160 + .../Role/Providers/RouteServiceProvider.php | 50 + be/Modules/Role/Repositories/.gitkeep | 0 .../Role/Repositories/Contracts/.gitkeep | 0 .../Contracts/RoleRepositoryInterface.php | 48 + .../Role/Repositories/RoleRepository.php | 132 + be/Modules/Role/Routes/.gitkeep | 0 be/Modules/Role/Routes/api.php | 18 + be/Modules/Role/Services/.gitkeep | 0 be/Modules/Role/Tests/Feature/.gitkeep | 0 be/Modules/Role/Tests/Unit/.gitkeep | 0 be/Modules/Role/Transformers/.gitkeep | 0 be/Modules/Role/Transformers/RoleResource.php | 34 + be/Modules/Role/composer.json | 30 + be/Modules/Role/module.json | 11 + be/Modules/Role/package.json | 15 + be/Modules/User/Actions/.gitkeep | 0 be/Modules/User/Config/.gitkeep | 0 be/Modules/User/Config/config.php | 5 + be/Modules/User/Console/.gitkeep | 0 be/Modules/User/Database/Factories/.gitkeep | 0 be/Modules/User/Database/Migrations/.gitkeep | 0 be/Modules/User/Database/Seeders/.gitkeep | 0 .../Database/Seeders/UserDatabaseSeeder.php | 16 + be/Modules/User/Emails/.gitkeep | 0 be/Modules/User/Entities/.gitkeep | 0 be/Modules/User/Helpers/.gitkeep | 0 be/Modules/User/Http/Controllers/.gitkeep | 0 .../User/Http/Controllers/UserController.php | 210 + be/Modules/User/Http/Requests/.gitkeep | 0 be/Modules/User/Http/Requests/UserRequest.php | 110 + be/Modules/User/Jobs/.gitkeep | 0 be/Modules/User/Notifications/.gitkeep | 0 .../UserActivationNotification.php | 64 + be/Modules/User/Policies/.gitkeep | 0 be/Modules/User/Policies/UserPolicy.php | 59 + be/Modules/User/Providers/.gitkeep | 0 .../User/Providers/EventServiceProvider.php | 27 + .../User/Providers/RouteServiceProvider.php | 49 + .../User/Providers/UserServiceProvider.php | 172 + be/Modules/User/Repositories/.gitkeep | 0 .../User/Repositories/Contracts/.gitkeep | 0 .../Contracts/UserRepositoryInterface.php | 50 + .../User/Repositories/UserRepository.php | 160 + be/Modules/User/Routes/.gitkeep | 0 be/Modules/User/Routes/api.php | 21 + be/Modules/User/Services/.gitkeep | 0 be/Modules/User/Services/UserService.php | 116 + be/Modules/User/Tests/Feature/.gitkeep | 0 be/Modules/User/Tests/Unit/.gitkeep | 0 be/Modules/User/Transformers/.gitkeep | 0 .../User/Transformers/UserListResource.php | 35 + be/Modules/User/Transformers/UserResource.php | 54 + be/Modules/User/composer.json | 30 + be/Modules/User/module.json | 11 + be/Modules/User/package.json | 15 + be/README.md | 61 + .../AutoGenerateWeeklyReportForUnit.php | 56 + .../TriggerKJCHistoricalDataCapture.php | 68 + .../TriggerPKJHistoricalDataCapture.php | 55 + .../Http/Controllers/BaseCrudController.php | 378 + be/app/Http/Controllers/ContactController.php | 209 + be/app/Http/Controllers/Controller.php | 8 + be/app/Http/Controllers/CountryController.php | 24 + .../Controllers/ImpersonateController.php | 151 + .../Controllers/OnlineUsersController.php | 183 + .../Controllers/SocialMediaController.php | 206 + .../ApiKeyAuthenticationMiddleware.php | 114 + .../Middleware/AuthenticateFromCookie.php | 27 + .../Middleware/BlockApiToolsMiddleware.php | 157 + .../Middleware/SingleSessionMiddleware.php | 279 + be/app/Jobs/CaptureKJCHistoricalDataJob.php | 102 + be/app/Jobs/CapturePKJHistoricalDataJob.php | 102 + be/app/Models/Country.php | 12 + be/app/Models/Permission.php | 15 + be/app/Models/PersonalAccessToken.php | 22 + be/app/Policies/ImpersonatePolicy.php | 49 + be/app/Providers/AppServiceProvider.php | 34 + be/app/Providers/FortifyServiceProvider.php | 92 + be/app/Providers/HorizonServiceProvider.php | 32 + be/app/Providers/TelescopeServiceProvider.php | 64 + be/app/Services/ActiveRoleService.php | 131 + be/app/Services/ActivityLogger.php | 92 + be/app/Services/ContactService.php | 198 + be/app/Services/DocumentService.php | 174 + be/app/Services/OnlineUsersService.php | 212 + be/app/Services/SocialMediaService.php | 193 + be/app/Services/VisibilityService.php | 304 + be/app/Support/AuthCookie.php | 96 + be/app/Traits/HasDocuments.php | 91 + be/app/Traits/HasVisibility.php | 58 + be/app/Traits/HttpClientTrait.php | 104 + be/app/Traits/NotifiesAdmins.php | 55 + be/artisan | 18 + be/bootstrap/app.php | 124 + be/bootstrap/cache/.gitignore | 2 + be/bootstrap/providers.php | 8 + be/composer.json | 91 + be/composer.lock | 10287 ++++++++++++++++ be/config/active_role.php | 17 + be/config/api_security.php | 167 + be/config/app.php | 126 + be/config/auth.php | 125 + be/config/auth_cookie.php | 29 + be/config/cache.php | 108 + be/config/cors.php | 38 + be/config/database.php | 183 + be/config/filesystems.php | 80 + be/config/fortify.php | 159 + be/config/horizon.php | 230 + be/config/http.php | 33 + be/config/laravel-impersonate.php | 41 + be/config/logging.php | 132 + be/config/mail.php | 118 + be/config/modules.php | 301 + be/config/permission.php | 202 + be/config/queue.php | 112 + be/config/services.php | 38 + be/config/session.php | 217 + be/config/sso.php | 15 + be/config/telescope.php | 207 + be/database/.gitignore | 1 + be/database/factories/UserFactory.php | 44 + .../0001_01_01_000000_create_users_table.php | 54 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 57 + ...25_07_25_051334_create_countries_table.php | 30 + ...25_08_02_061334_create_documents_table.php | 39 + ...23_create_personal_access_tokens_table.php | 33 + ..._add_two_factor_columns_to_users_table.php | 42 + ..._093654_create_telescope_entries_table.php | 70 + ..._09_20_121315_create_permission_tables.php | 136 + ...09_20_121526_create_activity_log_table.php | 27 + ...add_event_column_to_activity_log_table.php | 22 + ...atch_uuid_column_to_activity_log_table.php | 22 + ...14_add_route_name_to_permissions_table.php | 28 + ...9_30_232256_create_notifications_table.php | 31 + ..._05_144351_add_fullname_to_roles_table.php | 28 + ...10_08_104950_add_status_to_users_table.php | 42 + ...add_performance_indexes_to_users_table.php | 41 + ...access_tokens_table_for_single_session.php | 44 + ...ole_id_to_personal_access_tokens_table.php | 27 + ...5_25_000002_add_context_to_roles_table.php | 28 + ...1_create_email_verification_otps_table.php | 33 + be/database/seeders/DatabaseSeeder.php | 30 + be/database/seeders/PermissionsSeeder.php | 29 + .../seeders/RoleHasPermissionsSeeder.php | 35 + be/database/seeders/RolesSeeder.php | 29 + be/database/seeders/UserSeeder.php | 33 + .../seeders/VisibilityPermissionsSeeder.php | 37 + .../seeders/json/permissions_20251014.json | 11 + .../json/role_has_permissions_20251014.json | 9 + be/database/seeders/json/roles_20251014.json | 12 + be/docker-compose.yml | 89 + .../supervisor/historical-data-capture.conf | 12 + .../supervisor/historical-data-scheduler.conf | 12 + .../php-fpm/supervisor/laravel-horizon.conf | 12 + .../php-fpm/supervisor/laravel-scheduler.conf | 8 + .../php-fpm/supervisor/laravel-worker.conf | 12 + .../common/php-fpm/supervisor/php-fpm.conf | 7 + .../php-fpm/supervisor/supervisord.conf | 18 + be/docker/common/unified/Dockerfile | 175 + be/docker/common/unified/entrypoint.sh | 69 + be/docker/common/unified/nginx/nginx.conf | 108 + be/docker/common/unified/redis/redis.conf | 3 + .../unified/supervisor/supervisord.conf | 19 + .../common/unified/supervisor/unified.conf | 48 + .../production/docker-compose.production.yml | 77 + be/docker/production/nginx/nginx.conf | 100 + be/docker/production/redis/redis.conf | 3 + be/docker/staging/docker-compose.staging.yml | 117 + be/docker/staging/nginx/nginx.conf | 100 + be/docker/staging/redis/redis.conf | 3 + .../training/docker-compose.training.yml | 114 + be/docker/training/nginx/nginx.conf | 106 + be/docker/training/redis/redis.conf | 3 + be/modules_statuses.json | 29 + be/package.json | 17 + be/phpunit.xml | 33 + be/public/.htaccess | 25 + be/public/favicon.ico | 0 be/public/images/logo/Logo-RAJD.png | Bin 0 -> 923290 bytes be/public/index.php | 20 + be/public/robots.txt | 2 + be/resources/css/app.css | 11 + be/resources/js/app.js | 1 + be/resources/js/bootstrap.js | 4 + be/resources/views/errors/503.blade.php | 186 + be/routes/api.php | 32 + be/routes/console.php | 29 + be/routes/web.php | 7 + be/storage/app/.gitignore | 4 + be/storage/app/private/.gitignore | 2 + be/storage/app/public/.gitignore | 2 + be/storage/framework/.gitignore | 9 + be/storage/framework/cache/.gitignore | 3 + be/storage/framework/cache/data/.gitignore | 2 + be/storage/framework/sessions/.gitignore | 2 + be/storage/framework/testing/.gitignore | 2 + be/storage/framework/views/.gitignore | 2 + be/storage/logs/.gitignore | 2 + be/stubs/nwidart-stubs/action-invoke.stub | 8 + be/stubs/nwidart-stubs/action.stub | 8 + be/stubs/nwidart-stubs/assets/js/app.stub | 0 be/stubs/nwidart-stubs/assets/sass/app.stub | 0 be/stubs/nwidart-stubs/cast.stub | 25 + be/stubs/nwidart-stubs/channel.stub | 16 + be/stubs/nwidart-stubs/class-invoke.stub | 8 + be/stubs/nwidart-stubs/class.stub | 8 + be/stubs/nwidart-stubs/command.stub | 53 + be/stubs/nwidart-stubs/component-class.stub | 22 + be/stubs/nwidart-stubs/component-view.stub | 3 + be/stubs/nwidart-stubs/composer.stub | 30 + be/stubs/nwidart-stubs/controller-api.stub | 59 + .../nwidart-stubs/controller-basecrud.stub | 49 + be/stubs/nwidart-stubs/controller-plain.stub | 7 + .../nwidart-stubs/controller.invokable.stub | 17 + be/stubs/nwidart-stubs/controller.stub | 56 + be/stubs/nwidart-stubs/enum.stub | 5 + be/stubs/nwidart-stubs/event-provider.stub | 27 + be/stubs/nwidart-stubs/event.stub | 31 + .../exception-render-report.stub | 20 + be/stubs/nwidart-stubs/exception-render.stub | 15 + be/stubs/nwidart-stubs/exception-report.stub | 13 + be/stubs/nwidart-stubs/exception.stub | 7 + be/stubs/nwidart-stubs/factory.stub | 22 + be/stubs/nwidart-stubs/helper-invoke.stub | 8 + be/stubs/nwidart-stubs/helper.stub | 8 + be/stubs/nwidart-stubs/interface.stub | 5 + be/stubs/nwidart-stubs/job-queued.stub | 24 + be/stubs/nwidart-stubs/job.stub | 21 + be/stubs/nwidart-stubs/json.stub | 11 + be/stubs/nwidart-stubs/listener-duck.stub | 19 + .../nwidart-stubs/listener-queued-duck.stub | 21 + be/stubs/nwidart-stubs/listener-queued.stub | 22 + be/stubs/nwidart-stubs/listener.stub | 20 + be/stubs/nwidart-stubs/mail.stub | 26 + be/stubs/nwidart-stubs/middleware.stub | 17 + be/stubs/nwidart-stubs/migration/add.stub | 28 + be/stubs/nwidart-stubs/migration/create.stub | 28 + be/stubs/nwidart-stubs/migration/delete.stub | 28 + be/stubs/nwidart-stubs/migration/drop.stub | 28 + be/stubs/nwidart-stubs/migration/plain.stub | 18 + be/stubs/nwidart-stubs/model.stub | 22 + be/stubs/nwidart-stubs/notification.stub | 45 + be/stubs/nwidart-stubs/observer.stub | 33 + be/stubs/nwidart-stubs/package.stub | 15 + be/stubs/nwidart-stubs/policy.plain.stub | 59 + be/stubs/nwidart-stubs/provider.stub | 21 + be/stubs/nwidart-stubs/repository-crud.stub | 94 + .../nwidart-stubs/repository-interface.stub | 44 + be/stubs/nwidart-stubs/repository-invoke.stub | 8 + be/stubs/nwidart-stubs/repository.stub | 8 + be/stubs/nwidart-stubs/request.stub | 39 + .../nwidart-stubs/resource-collection.stub | 17 + be/stubs/nwidart-stubs/resource.stub | 24 + be/stubs/nwidart-stubs/route-provider.stub | 50 + be/stubs/nwidart-stubs/routes/api.stub | 8 + be/stubs/nwidart-stubs/routes/web.stub | 8 + be/stubs/nwidart-stubs/rule.implicit.stub | 19 + be/stubs/nwidart-stubs/rule.stub | 14 + be/stubs/nwidart-stubs/scaffold/config.stub | 5 + be/stubs/nwidart-stubs/scaffold/provider.stub | 160 + be/stubs/nwidart-stubs/scope.stub | 15 + be/stubs/nwidart-stubs/seeder.stub | 16 + be/stubs/nwidart-stubs/service-invoke.stub | 8 + be/stubs/nwidart-stubs/service.stub | 8 + be/stubs/nwidart-stubs/tests/feature.stub | 18 + be/stubs/nwidart-stubs/tests/unit.stub | 16 + be/stubs/nwidart-stubs/trait.stub | 5 + be/stubs/nwidart-stubs/view.stub | 3 + be/stubs/nwidart-stubs/views/index.stub | 5 + be/stubs/nwidart-stubs/views/master.stub | 30 + be/stubs/nwidart-stubs/vite.stub | 57 + be/tests/Feature/ExampleTest.php | 19 + be/tests/TestCase.php | 10 + be/tests/Unit/ExampleTest.php | 16 + be/vite-module-loader.js | 51 + be/vite.config.js | 13 + docs/BORANG-MENJADI-ANGGOTA-2024.pdf | Bin 0 -> 788397 bytes ...RANG-PERMOHONAN-PEMBIAYAAN-ANGGOTA-new.pdf | Bin 0 -> 464227 bytes docs/Flowchart-MyKOPKB.drawio | 653 + ...dangan Kerja - Penggunaan sistem iKOOP.pdf | Bin 0 -> 826117 bytes docs/SENARAI DAFTAR ANGGOTA 2026.xls | Bin 0 -> 1387520 bytes docs/architecture.md | 150 + docs/db_design.md | 248 + fe/.DS_Store | Bin 0 -> 8196 bytes fe/.editorconfig | 8 + fe/.env.development | 7 + fe/.gitignore | 4 + fe/.prettierrc.json | 6 + fe/README.md | 70 + fe/cypress.config.ts | 8 + fe/env.d.ts | 15 + fe/eslint.config.ts | 38 + fe/index.html | 16 + fe/package.json | 95 + fe/pnpm-lock.yaml | 6852 ++++++++++ fe/public/favicon.ico | Bin 0 -> 15406 bytes fe/src/App.vue | 3 + fe/src/assets/css/themes/enigma/side-menu.css | 309 + fe/src/assets/css/themes/enigma/top-menu.css | 262 + fe/src/assets/images/Logo-RAJD.png | Bin 0 -> 923290 bytes fe/src/assets/images/accent.svg | 44 + fe/src/assets/images/bg-pattern.svg | 66 + fe/src/assets/images/error-illustration.svg | 72 + .../assets/images/fakers/food-beverage-1.jpg | Bin 0 -> 98611 bytes .../assets/images/fakers/food-beverage-10.jpg | Bin 0 -> 42802 bytes .../assets/images/fakers/food-beverage-11.jpg | Bin 0 -> 42356 bytes .../assets/images/fakers/food-beverage-12.jpg | Bin 0 -> 84057 bytes .../assets/images/fakers/food-beverage-13.jpg | Bin 0 -> 69920 bytes .../assets/images/fakers/food-beverage-14.jpg | Bin 0 -> 44940 bytes .../assets/images/fakers/food-beverage-15.jpg | Bin 0 -> 64029 bytes .../assets/images/fakers/food-beverage-16.jpg | Bin 0 -> 49705 bytes .../assets/images/fakers/food-beverage-17.jpg | Bin 0 -> 57231 bytes .../assets/images/fakers/food-beverage-18.jpg | Bin 0 -> 98973 bytes .../assets/images/fakers/food-beverage-19.jpg | Bin 0 -> 46130 bytes .../assets/images/fakers/food-beverage-2.jpg | Bin 0 -> 67006 bytes .../assets/images/fakers/food-beverage-3.jpg | Bin 0 -> 80739 bytes .../assets/images/fakers/food-beverage-4.jpg | Bin 0 -> 95556 bytes .../assets/images/fakers/food-beverage-5.jpg | Bin 0 -> 96972 bytes .../assets/images/fakers/food-beverage-6.jpg | Bin 0 -> 53536 bytes .../assets/images/fakers/food-beverage-7.jpg | Bin 0 -> 48767 bytes .../assets/images/fakers/food-beverage-8.jpg | Bin 0 -> 77577 bytes .../assets/images/fakers/food-beverage-9.jpg | Bin 0 -> 79605 bytes fe/src/assets/images/fakers/preview-1.jpg | Bin 0 -> 62297 bytes fe/src/assets/images/fakers/preview-10.jpg | Bin 0 -> 73457 bytes fe/src/assets/images/fakers/preview-11.jpg | Bin 0 -> 94381 bytes fe/src/assets/images/fakers/preview-12.jpg | Bin 0 -> 41262 bytes fe/src/assets/images/fakers/preview-13.jpg | Bin 0 -> 93742 bytes fe/src/assets/images/fakers/preview-14.jpg | Bin 0 -> 63174 bytes fe/src/assets/images/fakers/preview-15.jpg | Bin 0 -> 65671 bytes fe/src/assets/images/fakers/preview-2.jpg | Bin 0 -> 97637 bytes fe/src/assets/images/fakers/preview-3.jpg | Bin 0 -> 69615 bytes fe/src/assets/images/fakers/preview-4.jpg | Bin 0 -> 62358 bytes fe/src/assets/images/fakers/preview-5.jpg | Bin 0 -> 51272 bytes fe/src/assets/images/fakers/preview-6.jpg | Bin 0 -> 48041 bytes fe/src/assets/images/fakers/preview-7.jpg | Bin 0 -> 85120 bytes fe/src/assets/images/fakers/preview-8.jpg | Bin 0 -> 98858 bytes fe/src/assets/images/fakers/preview-9.jpg | Bin 0 -> 62501 bytes fe/src/assets/images/fakers/profile-1.jpg | Bin 0 -> 5560 bytes fe/src/assets/images/fakers/profile-10.jpg | Bin 0 -> 19629 bytes fe/src/assets/images/fakers/profile-11.jpg | Bin 0 -> 9464 bytes fe/src/assets/images/fakers/profile-12.jpg | Bin 0 -> 9503 bytes fe/src/assets/images/fakers/profile-13.jpg | Bin 0 -> 7742 bytes fe/src/assets/images/fakers/profile-14.jpg | Bin 0 -> 8507 bytes fe/src/assets/images/fakers/profile-15.jpg | Bin 0 -> 6453 bytes fe/src/assets/images/fakers/profile-2.jpg | Bin 0 -> 13043 bytes fe/src/assets/images/fakers/profile-3.jpg | Bin 0 -> 26025 bytes fe/src/assets/images/fakers/profile-4.jpg | Bin 0 -> 12468 bytes fe/src/assets/images/fakers/profile-5.jpg | Bin 0 -> 7737 bytes fe/src/assets/images/fakers/profile-6.jpg | Bin 0 -> 11533 bytes fe/src/assets/images/fakers/profile-7.jpg | Bin 0 -> 8795 bytes fe/src/assets/images/fakers/profile-8.jpg | Bin 0 -> 12389 bytes fe/src/assets/images/fakers/profile-9.jpg | Bin 0 -> 9726 bytes fe/src/assets/images/illustration.svg | 121 + fe/src/assets/images/logo-kopkb.svg | 418 + fe/src/assets/images/logo.svg | 9 + fe/src/assets/images/noise.png | Bin 0 -> 63712 bytes fe/src/assets/images/phone-illustration.svg | 11 + fe/src/assets/images/placeholders/200x200.jpg | Bin 0 -> 1851 bytes fe/src/assets/images/placeholders/800x800.jpg | Bin 0 -> 14451 bytes fe/src/assets/images/woman-illustration.svg | 32 + .../account-dropdown/AccountDropdown.vue | 122 + .../account-dropdown/AccountTrigger.vue | 66 + fe/src/components/account-dropdown/index.ts | 2 + fe/src/components/chart-presets/Bar1.vue | 99 + fe/src/components/chart-presets/Bar2.vue | 85 + fe/src/components/chart-presets/Donut1.vue | 43 + fe/src/components/chart-presets/Donut2.vue | 43 + fe/src/components/chart-presets/Line1.vue | 92 + fe/src/components/chart-presets/Line2.vue | 72 + fe/src/components/chart-presets/Line3.vue | 82 + fe/src/components/chart-presets/Pie1.vue | 42 + fe/src/components/chart-presets/index.ts | 8 + fe/src/components/daily-notes/DailyNotes.vue | 132 + fe/src/components/daily-notes/index.ts | 1 + fe/src/components/docs/ApiButton.vue | 9 + fe/src/components/docs/InstallPackage.vue | 101 + fe/src/components/docs/Menu.vue | 8 + fe/src/components/docs/Preview.vue | 42 + fe/src/components/docs/PreviewCode.vue | 88 + fe/src/components/docs/SectionContent.vue | 13 + fe/src/components/docs/SectionTitle.vue | 5 + fe/src/components/docs/Subtitle.vue | 5 + fe/src/components/docs/Title.vue | 5 + fe/src/components/docs/Wrapper.vue | 18 + fe/src/components/docs/index.ts | 10 + .../NotificationDropdown.vue | 55 + .../components/notification-dropdown/index.ts | 1 + .../official-stores/OfficialStores.vue | 151 + fe/src/components/official-stores/index.ts | 1 + .../quick-search-dialog/QuickSearchDialog.vue | 142 + .../components/quick-search-dialog/index.ts | 1 + .../recent-activities/RecentActivities.vue | 191 + fe/src/components/recent-activities/index.ts | 1 + fe/src/components/schedules/Schedules.vue | 167 + fe/src/components/schedules/index.ts | 1 + fe/src/components/side-menu/SideMenu.vue | 245 + fe/src/components/side-menu/index.ts | 1 + .../theme-switcher/ThemeSwitcher.vue | 131 + fe/src/components/theme-switcher/index.ts | 1 + fe/src/components/top-menu/TopMenu.vue | 166 + fe/src/components/top-menu/index.ts | 3 + .../components/transactions/Transactions.vue | 109 + fe/src/components/transactions/index.ts | 1 + .../ui/accordion/AccordionContent.vue | 28 + .../components/ui/accordion/AccordionItem.vue | 39 + .../components/ui/accordion/AccordionRoot.vue | 44 + .../ui/accordion/AccordionTrigger.vue | 35 + fe/src/components/ui/accordion/index.ts | 4 + .../components/ui/alert/AlertCloseTrigger.vue | 32 + .../components/ui/alert/AlertDescription.vue | 23 + fe/src/components/ui/alert/AlertRoot.vue | 36 + fe/src/components/ui/alert/AlertTitle.vue | 23 + fe/src/components/ui/alert/index.ts | 4 + .../components/ui/avatar/AvatarFallback.vue | 27 + fe/src/components/ui/avatar/AvatarImage.vue | 16 + fe/src/components/ui/avatar/AvatarRoot.vue | 50 + fe/src/components/ui/avatar/index.ts | 3 + fe/src/components/ui/badge/Badge.vue | 39 + fe/src/components/ui/badge/index.ts | 1 + fe/src/components/ui/box/box.vue | 29 + fe/src/components/ui/box/index.ts | 1 + .../components/ui/breadcrumb/Breadcrumb.vue | 61 + .../ui/breadcrumb/BreadcrumbItem.vue | 14 + .../ui/breadcrumb/BreadcrumbLink.vue | 14 + .../ui/breadcrumb/BreadcrumbList.vue | 14 + fe/src/components/ui/breadcrumb/index.ts | 4 + fe/src/components/ui/button/Button.vue | 31 + fe/src/components/ui/button/index.ts | 1 + .../ui/carousel/CarouselControl.vue | 27 + .../ui/carousel/CarouselIndicator.vue | 25 + .../ui/carousel/CarouselIndicatorGroup.vue | 28 + .../components/ui/carousel/CarouselItem.vue | 31 + .../ui/carousel/CarouselItemGroup.vue | 27 + .../ui/carousel/CarouselNextTrigger.vue | 30 + .../ui/carousel/CarouselPrevTrigger.vue | 30 + .../components/ui/carousel/CarouselRoot.vue | 41 + fe/src/components/ui/carousel/index.ts | 8 + fe/src/components/ui/chart/Chart.vue | 36 + fe/src/components/ui/chart/index.ts | 2 + fe/src/components/ui/chart/utils.ts | 11 + .../ui/checkbox/CheckboxControl.vue | 31 + .../ui/checkbox/CheckboxHiddenInput.vue | 16 + .../ui/checkbox/CheckboxIndicator.vue | 27 + .../components/ui/checkbox/CheckboxLabel.vue | 28 + .../components/ui/checkbox/CheckboxRoot.vue | 35 + fe/src/components/ui/checkbox/index.ts | 5 + .../ui/combobox/ComboboxClearTrigger.vue | 27 + .../ui/combobox/ComboboxContent.vue | 35 + .../ui/combobox/ComboboxControl.vue | 27 + .../components/ui/combobox/ComboboxInput.vue | 17 + .../components/ui/combobox/ComboboxItem.vue | 29 + .../ui/combobox/ComboboxItemGroup.vue | 31 + .../ui/combobox/ComboboxItemGroupLabel.vue | 32 + .../ui/combobox/ComboboxItemIndicator.vue | 31 + .../ui/combobox/ComboboxItemText.vue | 28 + .../components/ui/combobox/ComboboxLabel.vue | 28 + .../ui/combobox/ComboboxPositioner.vue | 27 + .../components/ui/combobox/ComboboxRoot.vue | 47 + .../ui/combobox/ComboboxTrigger.vue | 32 + fe/src/components/ui/combobox/index.ts | 13 + .../ui/datepicker/DatePickerClearTrigger.vue | 30 + .../ui/datepicker/DatePickerContent.vue | 30 + .../ui/datepicker/DatePickerContext.vue | 10 + .../ui/datepicker/DatePickerControl.vue | 27 + .../ui/datepicker/DatePickerInput.vue | 26 + .../ui/datepicker/DatePickerLabel.vue | 28 + .../ui/datepicker/DatePickerMonthSelect.vue | 30 + .../ui/datepicker/DatePickerNextTrigger.vue | 29 + .../ui/datepicker/DatePickerPositioner.vue | 29 + .../ui/datepicker/DatePickerPresetTrigger.vue | 30 + .../ui/datepicker/DatePickerPrevTrigger.vue | 29 + .../ui/datepicker/DatePickerRangeText.vue | 18 + .../ui/datepicker/DatePickerRoot.vue | 40 + .../ui/datepicker/DatePickerTable.vue | 27 + .../ui/datepicker/DatePickerTableBody.vue | 27 + .../ui/datepicker/DatePickerTableCell.vue | 45 + .../datepicker/DatePickerTableCellTrigger.vue | 44 + .../ui/datepicker/DatePickerTableHead.vue | 27 + .../ui/datepicker/DatePickerTableHeader.vue | 27 + .../ui/datepicker/DatePickerTableRow.vue | 27 + .../ui/datepicker/DatePickerTrigger.vue | 30 + .../ui/datepicker/DatePickerView.vue | 31 + .../ui/datepicker/DatePickerViewControl.vue | 30 + .../ui/datepicker/DatePickerViewTrigger.vue | 28 + .../ui/datepicker/DatePickerYearSelect.vue | 30 + fe/src/components/ui/datepicker/index.ts | 25 + .../components/ui/dialog/DialogBackdrop.vue | 27 + .../ui/dialog/DialogCloseTrigger.vue | 44 + fe/src/components/ui/dialog/DialogContent.vue | 38 + .../ui/dialog/DialogDescription.vue | 27 + .../components/ui/dialog/DialogPositioner.vue | 27 + fe/src/components/ui/dialog/DialogRoot.vue | 36 + fe/src/components/ui/dialog/DialogTitle.vue | 27 + fe/src/components/ui/dialog/DialogTrigger.vue | 28 + fe/src/components/ui/dialog/index.ts | 8 + fe/src/components/ui/field/Field.vue | 24 + fe/src/components/ui/field/FieldContent.vue | 14 + .../components/ui/field/FieldDescription.vue | 14 + fe/src/components/ui/field/FieldError.vue | 32 + fe/src/components/ui/field/FieldGroup.vue | 14 + fe/src/components/ui/field/FieldLabel.vue | 15 + fe/src/components/ui/field/FieldLegend.vue | 19 + fe/src/components/ui/field/FieldSeparator.vue | 19 + fe/src/components/ui/field/FieldSet.vue | 14 + fe/src/components/ui/field/FieldTitle.vue | 14 + fe/src/components/ui/field/index.ts | 10 + fe/src/components/ui/file-icon/FileIcon.vue | 37 + fe/src/components/ui/file-icon/index.ts | 1 + fe/src/components/ui/frame/Frame.vue | 53 + fe/src/components/ui/frame/index.ts | 1 + fe/src/components/ui/input/Input.vue | 18 + fe/src/components/ui/input/index.ts | 1 + fe/src/components/ui/label/Label.vue | 14 + fe/src/components/ui/label/index.ts | 1 + fe/src/components/ui/lucide/Lucide.vue | 22 + fe/src/components/ui/lucide/index.ts | 1 + fe/src/components/ui/map/Map.vue | 224 + fe/src/components/ui/map/index.ts | 1 + .../components/ui/menu/MenuCheckboxItem.vue | 41 + fe/src/components/ui/menu/MenuContent.vue | 30 + fe/src/components/ui/menu/MenuIndicator.vue | 21 + fe/src/components/ui/menu/MenuItem.vue | 34 + .../components/ui/menu/MenuItemGroupLabel.vue | 23 + fe/src/components/ui/menu/MenuPositioner.vue | 29 + fe/src/components/ui/menu/MenuRadioItem.vue | 43 + .../components/ui/menu/MenuRadioItemGroup.vue | 26 + fe/src/components/ui/menu/MenuRoot.vue | 36 + fe/src/components/ui/menu/MenuSeparator.vue | 31 + fe/src/components/ui/menu/MenuTrigger.vue | 30 + fe/src/components/ui/menu/MenuTriggerItem.vue | 27 + fe/src/components/ui/menu/index.ts | 12 + .../ui/native-select/NativeSelect.vue | 15 + .../ui/native-select/NativeSelectOption.vue | 14 + .../native-select/NativeSelectOptionGroup.vue | 14 + fe/src/components/ui/native-select/index.ts | 3 + .../ui/pagination/PaginationContext.vue | 10 + .../ui/pagination/PaginationEllipsis.vue | 32 + .../ui/pagination/PaginationItem.vue | 29 + .../ui/pagination/PaginationNextTrigger.vue | 27 + .../ui/pagination/PaginationPrevTrigger.vue | 27 + .../ui/pagination/PaginationRoot.vue | 38 + fe/src/components/ui/pagination/index.ts | 6 + .../ui/password-input/PasswordInput.vue | 57 + fe/src/components/ui/password-input/index.ts | 1 + fe/src/components/ui/popover/PopoverArrow.vue | 18 + .../components/ui/popover/PopoverArrowTip.vue | 18 + .../components/ui/popover/PopoverContent.vue | 34 + .../ui/popover/PopoverDescription.vue | 27 + .../ui/popover/PopoverIndicator.vue | 26 + .../ui/popover/PopoverPositioner.vue | 29 + fe/src/components/ui/popover/PopoverRoot.vue | 36 + fe/src/components/ui/popover/PopoverTitle.vue | 27 + .../components/ui/popover/PopoverTrigger.vue | 30 + fe/src/components/ui/popover/index.ts | 9 + fe/src/components/ui/presence/Presence.vue | 44 + fe/src/components/ui/presence/index.ts | 1 + .../ui/progress-circular/ProgressCircle.vue | 18 + .../progress-circular/ProgressCircleRange.vue | 16 + .../progress-circular/ProgressCircleTrack.vue | 16 + .../ui/progress-circular/ProgressLabel.vue | 28 + .../ui/progress-circular/ProgressRoot.vue | 32 + .../progress-circular/ProgressValueText.vue | 23 + .../components/ui/progress-circular/index.ts | 6 + .../ui/progress-linear/ProgressLabel.vue | 28 + .../ui/progress-linear/ProgressRange.vue | 16 + .../ui/progress-linear/ProgressRoot.vue | 32 + .../ui/progress-linear/ProgressTrack.vue | 18 + .../ui/progress-linear/ProgressValueText.vue | 23 + fe/src/components/ui/progress-linear/index.ts | 5 + .../ui/radio-group/RadioGroupIndicator.vue | 27 + .../ui/radio-group/RadioGroupItem.vue | 33 + .../ui/radio-group/RadioGroupItemControl.vue | 29 + .../radio-group/RadioGroupItemHiddenInput.vue | 18 + .../ui/radio-group/RadioGroupItemText.vue | 29 + .../ui/radio-group/RadioGroupLabel.vue | 28 + .../ui/radio-group/RadioGroupRoot.vue | 37 + fe/src/components/ui/radio-group/index.ts | 7 + .../ui/scroll-area/ScrollAreaContent.vue | 16 + .../ui/scroll-area/ScrollAreaCorner.vue | 14 + .../ui/scroll-area/ScrollAreaRoot.vue | 29 + .../ui/scroll-area/ScrollAreaScrollbar.vue | 18 + .../ui/scroll-area/ScrollAreaThumb.vue | 16 + .../ui/scroll-area/ScrollAreaViewport.vue | 16 + fe/src/components/ui/scroll-area/index.ts | 7 + .../ui/select/SelectClearTrigger.vue | 27 + fe/src/components/ui/select/SelectContent.vue | 35 + fe/src/components/ui/select/SelectControl.vue | 27 + .../ui/select/SelectHiddenSelect.vue | 16 + .../components/ui/select/SelectIndicator.vue | 29 + fe/src/components/ui/select/SelectItem.vue | 33 + .../components/ui/select/SelectItemGroup.vue | 31 + .../ui/select/SelectItemGroupLabel.vue | 32 + .../ui/select/SelectItemIndicator.vue | 31 + .../components/ui/select/SelectItemText.vue | 28 + fe/src/components/ui/select/SelectLabel.vue | 28 + .../components/ui/select/SelectPositioner.vue | 27 + fe/src/components/ui/select/SelectRoot.vue | 41 + fe/src/components/ui/select/SelectTrigger.vue | 31 + .../components/ui/select/SelectValueText.vue | 26 + fe/src/components/ui/select/index.ts | 15 + fe/src/components/ui/separator/Separator.vue | 21 + fe/src/components/ui/separator/index.ts | 1 + fe/src/components/ui/sheet/SheetBackdrop.vue | 27 + .../components/ui/sheet/SheetCloseTrigger.vue | 44 + fe/src/components/ui/sheet/SheetContent.vue | 40 + .../components/ui/sheet/SheetDescription.vue | 27 + .../components/ui/sheet/SheetPositioner.vue | 27 + fe/src/components/ui/sheet/SheetRoot.vue | 36 + fe/src/components/ui/sheet/SheetTitle.vue | 27 + fe/src/components/ui/sheet/SheetTrigger.vue | 28 + fe/src/components/ui/sheet/index.ts | 8 + fe/src/components/ui/slider/SliderControl.vue | 27 + .../ui/slider/SliderHiddenInput.vue | 18 + fe/src/components/ui/slider/SliderLabel.vue | 28 + fe/src/components/ui/slider/SliderMarker.vue | 29 + .../ui/slider/SliderMarkerGroup.vue | 27 + fe/src/components/ui/slider/SliderRange.vue | 27 + fe/src/components/ui/slider/SliderRoot.vue | 32 + fe/src/components/ui/slider/SliderThumb.vue | 31 + fe/src/components/ui/slider/SliderTrack.vue | 27 + .../components/ui/slider/SliderValueText.vue | 25 + fe/src/components/ui/slider/index.ts | 10 + fe/src/components/ui/slot/index.ts | 59 + fe/src/components/ui/slot/slot.ts | 133 + .../components/ui/styles/accordion.styles.ts | 39 + fe/src/components/ui/styles/alert.styles.ts | 134 + fe/src/components/ui/styles/avatar.styles.ts | 24 + fe/src/components/ui/styles/badge.styles.ts | 130 + fe/src/components/ui/styles/box.styles.ts | 24 + .../components/ui/styles/breadcrumb.styles.ts | 4 + fe/src/components/ui/styles/button.styles.ts | 137 + .../components/ui/styles/carousel.styles.ts | 14 + fe/src/components/ui/styles/chart.styles.ts | 1 + .../components/ui/styles/checkbox.styles.ts | 7 + .../components/ui/styles/combobox.styles.ts | 18 + .../components/ui/styles/datepicker.styles.ts | 34 + fe/src/components/ui/styles/dialog.styles.ts | 14 + fe/src/components/ui/styles/field.styles.ts | 51 + fe/src/components/ui/styles/input.styles.ts | 5 + fe/src/components/ui/styles/label.styles.ts | 1 + fe/src/components/ui/styles/map.styles.ts | 9 + fe/src/components/ui/styles/menu.styles.ts | 33 + .../ui/styles/native-select.styles.ts | 3 + .../components/ui/styles/pagination.styles.ts | 9 + fe/src/components/ui/styles/popover.styles.ts | 13 + .../ui/styles/progress-circular.styles.ts | 8 + .../ui/styles/progress-linear.styles.ts | 6 + .../ui/styles/radio-group.styles.ts | 9 + .../ui/styles/scroll-area.styles.ts | 16 + fe/src/components/ui/styles/select.styles.ts | 21 + .../components/ui/styles/separator.style.ts | 2 + .../components/ui/styles/separator.styles.ts | 2 + fe/src/components/ui/styles/sheet.styles.ts | 30 + fe/src/components/ui/styles/slider.styles.ts | 14 + fe/src/components/ui/styles/switch.styles.ts | 7 + fe/src/components/ui/styles/table.styles.ts | 63 + fe/src/components/ui/styles/tabs.styles.ts | 8 + .../components/ui/styles/textarea.styles.ts | 5 + fe/src/components/ui/styles/toast.styles.ts | 15 + fe/src/components/ui/styles/tooltip.styles.ts | 9 + fe/src/components/ui/switch/SwitchControl.vue | 28 + .../ui/switch/SwitchHiddenInput.vue | 21 + fe/src/components/ui/switch/SwitchLabel.vue | 28 + fe/src/components/ui/switch/SwitchRoot.vue | 36 + fe/src/components/ui/switch/SwitchThumb.vue | 27 + fe/src/components/ui/switch/index.ts | 5 + fe/src/components/ui/table/Table.vue | 31 + fe/src/components/ui/table/TableBody.vue | 14 + fe/src/components/ui/table/TableCaption.vue | 14 + fe/src/components/ui/table/TableCell.vue | 23 + fe/src/components/ui/table/TableContainer.vue | 14 + fe/src/components/ui/table/TableFooter.vue | 14 + fe/src/components/ui/table/TableHead.vue | 14 + fe/src/components/ui/table/TableHeader.vue | 14 + fe/src/components/ui/table/TableRow.vue | 14 + fe/src/components/ui/table/index.ts | 9 + fe/src/components/ui/tabs/TabsContent.vue | 29 + fe/src/components/ui/tabs/TabsIndicator.vue | 27 + fe/src/components/ui/tabs/TabsList.vue | 29 + fe/src/components/ui/tabs/TabsRoot.vue | 32 + fe/src/components/ui/tabs/TabsTrigger.vue | 29 + fe/src/components/ui/tabs/index.ts | 5 + fe/src/components/ui/textarea/Textarea.vue | 12 + fe/src/components/ui/textarea/index.ts | 1 + .../components/ui/toast/ToastCloseTrigger.vue | 44 + .../components/ui/toast/ToastDescription.vue | 27 + fe/src/components/ui/toast/ToastItem.vue | 32 + fe/src/components/ui/toast/ToastRoot.vue | 38 + fe/src/components/ui/toast/ToastTitle.vue | 27 + .../components/ui/toast/ToasterContainer.vue | 35 + fe/src/components/ui/toast/index.ts | 7 + fe/src/components/ui/toast/toaster.ts | 9 + fe/src/components/ui/tooltip/TooltipArrow.vue | 27 + .../components/ui/tooltip/TooltipArrowTip.vue | 27 + .../components/ui/tooltip/TooltipContent.vue | 31 + .../ui/tooltip/TooltipPositioner.vue | 29 + fe/src/components/ui/tooltip/TooltipRoot.vue | 34 + .../components/ui/tooltip/TooltipTrigger.vue | 28 + fe/src/components/ui/tooltip/index.ts | 6 + fe/src/components/ui/usage/Accordion.vue | 126 + fe/src/components/ui/usage/Alert.vue | 207 + fe/src/components/ui/usage/Avatar.vue | 38 + fe/src/components/ui/usage/Badge.vue | 115 + fe/src/components/ui/usage/Box.vue | 32 + fe/src/components/ui/usage/Breadcrumb.vue | 15 + fe/src/components/ui/usage/Button.vue | 905 ++ fe/src/components/ui/usage/Carousel.vue | 85 + fe/src/components/ui/usage/Chart.vue | 64 + fe/src/components/ui/usage/Checkbox.vue | 22 + fe/src/components/ui/usage/Combobox.vue | 244 + fe/src/components/ui/usage/DataTable.vue | 874 ++ fe/src/components/ui/usage/Datepicker.vue | 493 + fe/src/components/ui/usage/Dialog.vue | 96 + fe/src/components/ui/usage/Field.vue | 227 + fe/src/components/ui/usage/Input.vue | 15 + fe/src/components/ui/usage/Map.vue | 74 + fe/src/components/ui/usage/Menu.vue | 157 + fe/src/components/ui/usage/NativeSelect.vue | 72 + fe/src/components/ui/usage/Pagination.vue | 25 + fe/src/components/ui/usage/Popover.vue | 44 + .../components/ui/usage/ProgressCircular.vue | 21 + fe/src/components/ui/usage/ProgressLinear.vue | 19 + fe/src/components/ui/usage/RadioGroup.vue | 21 + fe/src/components/ui/usage/Select.vue | 174 + fe/src/components/ui/usage/Sheet.vue | 77 + fe/src/components/ui/usage/Slider.vue | 70 + fe/src/components/ui/usage/Switch.vue | 16 + fe/src/components/ui/usage/Table.vue | 226 + fe/src/components/ui/usage/Tabs.vue | 57 + fe/src/components/ui/usage/Textarea.vue | 13 + fe/src/components/ui/usage/Toast.vue | 37 + fe/src/components/ui/usage/Tooltip.vue | 17 + fe/src/components/ui/utils/cn.ts | 15 + .../weekly-best-sellers/WeeklyBestSellers.vue | 102 + .../components/weekly-best-sellers/index.ts | 1 + .../weekly-top-products/WeeklyTopProducts.vue | 175 + .../components/weekly-top-products/index.ts | 1 + fe/src/composables/useApiPagination.ts | 51 + fe/src/composables/useBreadcrumb.ts | 83 + fe/src/composables/useQuickSearch.ts | 30 + fe/src/composables/useRoleSwitcher.ts | 127 + fe/src/composables/useSideMenu.ts | 84 + fe/src/core/services/api.ts | 10 + fe/src/core/types/api.ts | 16 + fe/src/core/types/menu.ts | 10 + fe/src/core/utils/getApiErrorMessage.ts | 30 + fe/src/docs/DocsLayout.vue | 11 + fe/src/docs/pages/accordion.vue | 486 + fe/src/docs/pages/alert.vue | 639 + fe/src/docs/pages/avatar.vue | 239 + fe/src/docs/pages/badge.vue | 351 + fe/src/docs/pages/box.vue | 199 + fe/src/docs/pages/breadcrumb.vue | 181 + fe/src/docs/pages/button.vue | 1743 +++ fe/src/docs/pages/carousel.vue | 445 + fe/src/docs/pages/chart.vue | 235 + fe/src/docs/pages/checkbox.vue | 235 + fe/src/docs/pages/combobox.vue | 1111 ++ fe/src/docs/pages/data-table.vue | 197 + fe/src/docs/pages/datepicker.vue | 1777 +++ fe/src/docs/pages/dialog.vue | 560 + fe/src/docs/pages/field.vue | 484 + fe/src/docs/pages/input.vue | 74 + fe/src/docs/pages/map.vue | 369 + fe/src/docs/pages/menu.vue | 831 ++ fe/src/docs/pages/native-select.vue | 210 + fe/src/docs/pages/pagination.vue | 298 + fe/src/docs/pages/popover.vue | 447 + fe/src/docs/pages/progress-circular.vue | 255 + fe/src/docs/pages/progress-linear.vue | 227 + fe/src/docs/pages/radio-group.vue | 325 + fe/src/docs/pages/scroll-area.vue | 259 + fe/src/docs/pages/select.vue | 886 ++ fe/src/docs/pages/sheet.vue | 508 + fe/src/docs/pages/slider.vue | 493 + fe/src/docs/pages/slot.vue | 196 + fe/src/docs/pages/switch.vue | 230 + fe/src/docs/pages/table.vue | 653 + fe/src/docs/pages/tabs.vue | 361 + fe/src/docs/pages/textarea.vue | 69 + fe/src/docs/pages/toast.vue | 371 + fe/src/docs/pages/tooltip.vue | 287 + fe/src/index.css | 162 + fe/src/main.ts | 14 + fe/src/main/side-menu.ts | 491 + fe/src/modules/auth/index.ts | 28 + fe/src/modules/auth/menu.ts | 14 + fe/src/modules/auth/pages/AccountPending.vue | 118 + fe/src/modules/auth/pages/Login.vue | 131 + fe/src/modules/auth/pages/PrivacyPolicy.vue | 128 + fe/src/modules/auth/pages/Register.vue | 138 + fe/src/modules/auth/pages/TermsConditions.vue | 139 + fe/src/modules/auth/pages/VerifyEmail.vue | 164 + fe/src/modules/auth/routes.ts | 40 + fe/src/modules/auth/services/auth.service.ts | 90 + fe/src/modules/auth/types/auth.types.ts | 93 + fe/src/modules/profile/index.ts | 2 + fe/src/modules/profile/menu.ts | 9 + .../modules/profile/pages/ChangePassword.vue | 136 + .../profile/pages/ProfileOverview2.vue | 650 + .../modules/profile/pages/UpdateProfile.vue | 353 + fe/src/modules/profile/routes.ts | 22 + .../profile/services/profile.service.ts | 57 + fe/src/modules/profile/types/profile.types.ts | 26 + .../user/composables/useImpersonate.ts | 146 + .../modules/user/composables/useUserList.ts | 89 + fe/src/modules/user/index.ts | 2 + fe/src/modules/user/menu.ts | 9 + fe/src/modules/user/pages/UserList.vue | 111 + fe/src/modules/user/routes.ts | 10 + .../user/services/impersonate.service.ts | 21 + fe/src/modules/user/services/user.service.ts | 17 + .../modules/user/types/impersonate.types.ts | 31 + fe/src/modules/user/types/user.types.ts | 26 + fe/src/pinia.ts | 4 + fe/src/router/index.ts | 436 + fe/src/stores/auth.ts | 101 + fe/src/stores/color-scheme.ts | 39 + fe/src/stores/dark-mode.ts | 26 + fe/src/stores/theme.ts | 76 + fe/src/themes/Enigma/SideMenu/SideMenu.vue | 165 + fe/src/themes/Enigma/SideMenu/index.ts | 3 + fe/src/themes/Layout.vue | 114 + fe/src/themes/index.ts | 3 + fe/src/utils/cn.ts | 15 + fe/src/utils/faker.ts | 407 + fe/src/utils/frame.ts | 325 + fe/src/utils/helper.ts | 201 + fe/src/views/AddProduct.vue | 1016 ++ fe/src/views/BlogLayout1.vue | 235 + fe/src/views/BlogLayout2.vue | 239 + fe/src/views/BlogLayout3.vue | 236 + fe/src/views/Categories.vue | 203 + fe/src/views/Chat.vue | 2120 ++++ fe/src/views/CrudDataList.vue | 200 + fe/src/views/CrudForm.vue | 141 + fe/src/views/DashboardOverview1.vue | 591 + fe/src/views/ErrorPage.vue | 43 + fe/src/views/FaqLayout1.vue | 271 + fe/src/views/FaqLayout2.vue | 232 + fe/src/views/FaqLayout3.vue | 271 + fe/src/views/FileManager.vue | 265 + fe/src/views/Inbox.vue | 296 + fe/src/views/InvoiceLayout1.vue | 137 + fe/src/views/InvoiceLayout2.vue | 142 + fe/src/views/PointOfSale.vue | 333 + fe/src/views/Post.vue | 481 + fe/src/views/PricingLayout1.vue | 131 + fe/src/views/PricingLayout2.vue | 279 + fe/src/views/ProductGrid.vue | 180 + fe/src/views/ProductList.vue | 202 + fe/src/views/Reviews.vue | 206 + fe/src/views/SellerDetail.vue | 287 + fe/src/views/SellerList.vue | 224 + fe/src/views/TransactionDetail.vue | 209 + fe/src/views/TransactionList.vue | 220 + fe/src/views/UsersLayout1.vue | 168 + fe/src/views/UsersLayout2.vue | 108 + fe/src/views/UsersLayout3.vue | 142 + fe/src/views/WizardLayout1.vue | 76 + fe/src/views/WizardLayout2.vue | 97 + fe/src/views/WizardLayout3.vue | 101 + fe/tsconfig.app.json | 22 + fe/tsconfig.json | 17 + fe/tsconfig.node.json | 19 + fe/tsconfig.vitest.json | 11 + fe/vite.config.ts | 21 + fe/vitest.config.ts | 14 + my-kopkb.code-workspace | 7 + 1058 files changed, 87732 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 TODO.md create mode 100644 be/.dockerignore create mode 100644 be/.editorconfig create mode 100644 be/.env.development create mode 100644 be/.env.example create mode 100644 be/.env.production create mode 100644 be/.env.staging create mode 100644 be/.env.training create mode 100644 be/.gitattributes create mode 100644 be/.gitignore create mode 100644 be/Modules/ActivityLog/Actions/.gitkeep create mode 100644 be/Modules/ActivityLog/Config/.gitkeep create mode 100644 be/Modules/ActivityLog/Config/config.php create mode 100644 be/Modules/ActivityLog/Console/.gitkeep create mode 100644 be/Modules/ActivityLog/Database/Factories/.gitkeep create mode 100644 be/Modules/ActivityLog/Database/Migrations/.gitkeep create mode 100644 be/Modules/ActivityLog/Database/Seeders/.gitkeep create mode 100644 be/Modules/ActivityLog/Database/Seeders/ActivityLogDatabaseSeeder.php create mode 100644 be/Modules/ActivityLog/Emails/.gitkeep create mode 100644 be/Modules/ActivityLog/Entities/.gitkeep create mode 100644 be/Modules/ActivityLog/Helpers/.gitkeep create mode 100644 be/Modules/ActivityLog/Http/Controllers/.gitkeep create mode 100644 be/Modules/ActivityLog/Http/Controllers/ActivityLogController.php create mode 100644 be/Modules/ActivityLog/Http/Requests/.gitkeep create mode 100644 be/Modules/ActivityLog/Jobs/.gitkeep create mode 100644 be/Modules/ActivityLog/Notifications/.gitkeep create mode 100644 be/Modules/ActivityLog/Policies/.gitkeep create mode 100644 be/Modules/ActivityLog/Policies/ActivityLogPolicy.php create mode 100644 be/Modules/ActivityLog/Providers/.gitkeep create mode 100644 be/Modules/ActivityLog/Providers/ActivityLogServiceProvider.php create mode 100644 be/Modules/ActivityLog/Providers/EventServiceProvider.php create mode 100644 be/Modules/ActivityLog/Providers/RouteServiceProvider.php create mode 100644 be/Modules/ActivityLog/Repositories/.gitkeep create mode 100644 be/Modules/ActivityLog/Repositories/Contracts/.gitkeep create mode 100644 be/Modules/ActivityLog/Routes/.gitkeep create mode 100644 be/Modules/ActivityLog/Routes/api.php create mode 100644 be/Modules/ActivityLog/Services/.gitkeep create mode 100644 be/Modules/ActivityLog/Tests/Feature/.gitkeep create mode 100644 be/Modules/ActivityLog/Tests/Unit/.gitkeep create mode 100644 be/Modules/ActivityLog/Transformers/.gitkeep create mode 100644 be/Modules/ActivityLog/composer.json create mode 100644 be/Modules/ActivityLog/module.json create mode 100644 be/Modules/ActivityLog/package.json create mode 100644 be/Modules/Auth/Actions/Fortify/CreateNewUser.php create mode 100644 be/Modules/Auth/Actions/Fortify/LoginResponse.php create mode 100644 be/Modules/Auth/Actions/Fortify/LogoutResponse.php create mode 100644 be/Modules/Auth/Actions/Fortify/PasswordValidationRules.php create mode 100644 be/Modules/Auth/Actions/Fortify/RegisterResponse.php create mode 100644 be/Modules/Auth/Actions/Fortify/ResetUserPassword.php create mode 100644 be/Modules/Auth/Actions/Fortify/UpdateUserPassword.php create mode 100644 be/Modules/Auth/Actions/Fortify/UpdateUserProfileInformation.php create mode 100644 be/Modules/Auth/Config/.gitkeep create mode 100644 be/Modules/Auth/Config/config.php create mode 100644 be/Modules/Auth/Console/.gitkeep create mode 100644 be/Modules/Auth/Database/Factories/.gitkeep create mode 100644 be/Modules/Auth/Database/Migrations/.gitkeep create mode 100644 be/Modules/Auth/Database/Seeders/.gitkeep create mode 100644 be/Modules/Auth/Database/Seeders/AuthDatabaseSeeder.php create mode 100644 be/Modules/Auth/Emails/.gitkeep create mode 100644 be/Modules/Auth/Emails/EmailVerificationOtpEmail.php create mode 100644 be/Modules/Auth/Entities/EmailVerificationOtp.php create mode 100644 be/Modules/Auth/Entities/User.php create mode 100644 be/Modules/Auth/Helpers/.gitkeep create mode 100644 be/Modules/Auth/Http/Controllers/EmailVerificationController.php create mode 100644 be/Modules/Auth/Http/Controllers/SessionController.php create mode 100644 be/Modules/Auth/Jobs/.gitkeep create mode 100644 be/Modules/Auth/Notifications/.gitkeep create mode 100644 be/Modules/Auth/Policies/.gitkeep create mode 100644 be/Modules/Auth/Providers/AuthServiceProvider.php create mode 100644 be/Modules/Auth/Providers/EventServiceProvider.php create mode 100644 be/Modules/Auth/Providers/RouteServiceProvider.php create mode 100644 be/Modules/Auth/Repositories/.gitkeep create mode 100644 be/Modules/Auth/Routes/.gitkeep create mode 100644 be/Modules/Auth/Routes/api.php create mode 100644 be/Modules/Auth/Services/.gitkeep create mode 100644 be/Modules/Auth/Services/AuthSessionService.php create mode 100644 be/Modules/Auth/Services/EmailVerificationOtpService.php create mode 100644 be/Modules/Auth/Tests/Feature/.gitkeep create mode 100644 be/Modules/Auth/Tests/Unit/.gitkeep create mode 100644 be/Modules/Auth/Transformers/.gitkeep create mode 100644 be/Modules/Auth/Transformers/AuthResource.php create mode 100644 be/Modules/Auth/Transformers/SSOUserResource.php create mode 100644 be/Modules/Auth/Transformers/UserResource.php create mode 100644 be/Modules/Auth/composer.json create mode 100644 be/Modules/Auth/module.json create mode 100644 be/Modules/Auth/package.json create mode 100644 be/Modules/Auth/resources/views/emails/verification-otp.blade.php create mode 100644 be/Modules/Dashboard/Actions/.gitkeep create mode 100644 be/Modules/Dashboard/Config/.gitkeep create mode 100644 be/Modules/Dashboard/Config/config.php create mode 100644 be/Modules/Dashboard/Console/.gitkeep create mode 100644 be/Modules/Dashboard/Database/Factories/.gitkeep create mode 100644 be/Modules/Dashboard/Database/Migrations/.gitkeep create mode 100644 be/Modules/Dashboard/Database/Seeders/.gitkeep create mode 100644 be/Modules/Dashboard/Database/Seeders/DashboardDatabaseSeeder.php create mode 100644 be/Modules/Dashboard/Emails/.gitkeep create mode 100644 be/Modules/Dashboard/Entities/.gitkeep create mode 100644 be/Modules/Dashboard/Helpers/.gitkeep create mode 100644 be/Modules/Dashboard/Http/Controllers/.gitkeep create mode 100644 be/Modules/Dashboard/Http/Controllers/DashboardController.php create mode 100644 be/Modules/Dashboard/Http/Controllers/KJC/KJCDashboardController.php create mode 100644 be/Modules/Dashboard/Http/Controllers/PKJ/PKJDashboardController.php create mode 100644 be/Modules/Dashboard/Http/Requests/.gitkeep create mode 100644 be/Modules/Dashboard/Jobs/.gitkeep create mode 100644 be/Modules/Dashboard/Notifications/.gitkeep create mode 100644 be/Modules/Dashboard/Policies/.gitkeep create mode 100644 be/Modules/Dashboard/Providers/.gitkeep create mode 100644 be/Modules/Dashboard/Providers/DashboardServiceProvider.php create mode 100644 be/Modules/Dashboard/Providers/EventServiceProvider.php create mode 100644 be/Modules/Dashboard/Providers/RouteServiceProvider.php create mode 100644 be/Modules/Dashboard/Repositories/.gitkeep create mode 100644 be/Modules/Dashboard/Repositories/Contracts/.gitkeep create mode 100644 be/Modules/Dashboard/Repositories/Contracts/KJCDashboardRepositoryInterface.php create mode 100644 be/Modules/Dashboard/Repositories/Contracts/PKJDashboardRepositoryInterface.php create mode 100644 be/Modules/Dashboard/Repositories/KJCDashboardRepository.php create mode 100644 be/Modules/Dashboard/Repositories/PKJDashboardRepository.php create mode 100644 be/Modules/Dashboard/Routes/.gitkeep create mode 100644 be/Modules/Dashboard/Routes/api.php create mode 100644 be/Modules/Dashboard/Services/.gitkeep create mode 100644 be/Modules/Dashboard/Services/DashboardService.php create mode 100644 be/Modules/Dashboard/Services/KJC/KJCDashboardService.php create mode 100644 be/Modules/Dashboard/Services/PKJ/PKJDashboardService.php create mode 100644 be/Modules/Dashboard/Tests/Feature/.gitkeep create mode 100644 be/Modules/Dashboard/Tests/Unit/.gitkeep create mode 100644 be/Modules/Dashboard/Transformers/.gitkeep create mode 100644 be/Modules/Dashboard/composer.json create mode 100644 be/Modules/Dashboard/module.json create mode 100644 be/Modules/Dashboard/package.json create mode 100644 be/Modules/Notification/Actions/.gitkeep create mode 100644 be/Modules/Notification/Config/.gitkeep create mode 100644 be/Modules/Notification/Config/config.php create mode 100644 be/Modules/Notification/Console/.gitkeep create mode 100644 be/Modules/Notification/Database/Factories/.gitkeep create mode 100644 be/Modules/Notification/Database/Migrations/.gitkeep create mode 100644 be/Modules/Notification/Database/Seeders/.gitkeep create mode 100644 be/Modules/Notification/Database/Seeders/NotificationDatabaseSeeder.php create mode 100644 be/Modules/Notification/Emails/.gitkeep create mode 100644 be/Modules/Notification/Entities/.gitkeep create mode 100644 be/Modules/Notification/Entities/Notification.php create mode 100644 be/Modules/Notification/Helpers/.gitkeep create mode 100644 be/Modules/Notification/Http/Controllers/.gitkeep create mode 100644 be/Modules/Notification/Http/Controllers/NotificationController.php create mode 100644 be/Modules/Notification/Http/Requests/.gitkeep create mode 100644 be/Modules/Notification/Jobs/.gitkeep create mode 100644 be/Modules/Notification/Notifications/.gitkeep create mode 100644 be/Modules/Notification/Policies/.gitkeep create mode 100644 be/Modules/Notification/Providers/.gitkeep create mode 100644 be/Modules/Notification/Providers/EventServiceProvider.php create mode 100644 be/Modules/Notification/Providers/NotificationServiceProvider.php create mode 100644 be/Modules/Notification/Providers/RouteServiceProvider.php create mode 100644 be/Modules/Notification/Repositories/.gitkeep create mode 100644 be/Modules/Notification/Repositories/Contracts/.gitkeep create mode 100644 be/Modules/Notification/Routes/.gitkeep create mode 100644 be/Modules/Notification/Routes/api.php create mode 100644 be/Modules/Notification/Routes/web.php create mode 100644 be/Modules/Notification/Services/.gitkeep create mode 100644 be/Modules/Notification/Tests/Feature/.gitkeep create mode 100644 be/Modules/Notification/Tests/Unit/.gitkeep create mode 100644 be/Modules/Notification/Transformers/.gitkeep create mode 100644 be/Modules/Notification/composer.json create mode 100644 be/Modules/Notification/module.json create mode 100644 be/Modules/Notification/package.json create mode 100644 be/Modules/Role/Actions/.gitkeep create mode 100644 be/Modules/Role/Config/.gitkeep create mode 100644 be/Modules/Role/Config/config.php create mode 100644 be/Modules/Role/Console/.gitkeep create mode 100644 be/Modules/Role/Database/Factories/.gitkeep create mode 100644 be/Modules/Role/Database/Migrations/.gitkeep create mode 100644 be/Modules/Role/Database/Seeders/.gitkeep create mode 100644 be/Modules/Role/Database/Seeders/RoleDatabaseSeeder.php create mode 100644 be/Modules/Role/Emails/.gitkeep create mode 100644 be/Modules/Role/Entities/.gitkeep create mode 100644 be/Modules/Role/Entities/Role.php create mode 100644 be/Modules/Role/Helpers/.gitkeep create mode 100644 be/Modules/Role/Http/Controllers/.gitkeep create mode 100644 be/Modules/Role/Http/Controllers/RoleController.php create mode 100644 be/Modules/Role/Http/Requests/.gitkeep create mode 100644 be/Modules/Role/Http/Requests/RoleRequest.php create mode 100644 be/Modules/Role/Jobs/.gitkeep create mode 100644 be/Modules/Role/Notifications/.gitkeep create mode 100644 be/Modules/Role/Policies/.gitkeep create mode 100644 be/Modules/Role/Policies/RolePolicy.php create mode 100644 be/Modules/Role/Providers/.gitkeep create mode 100644 be/Modules/Role/Providers/EventServiceProvider.php create mode 100644 be/Modules/Role/Providers/RoleServiceProvider.php create mode 100644 be/Modules/Role/Providers/RouteServiceProvider.php create mode 100644 be/Modules/Role/Repositories/.gitkeep create mode 100644 be/Modules/Role/Repositories/Contracts/.gitkeep create mode 100644 be/Modules/Role/Repositories/Contracts/RoleRepositoryInterface.php create mode 100644 be/Modules/Role/Repositories/RoleRepository.php create mode 100644 be/Modules/Role/Routes/.gitkeep create mode 100644 be/Modules/Role/Routes/api.php create mode 100644 be/Modules/Role/Services/.gitkeep create mode 100644 be/Modules/Role/Tests/Feature/.gitkeep create mode 100644 be/Modules/Role/Tests/Unit/.gitkeep create mode 100644 be/Modules/Role/Transformers/.gitkeep create mode 100644 be/Modules/Role/Transformers/RoleResource.php create mode 100644 be/Modules/Role/composer.json create mode 100644 be/Modules/Role/module.json create mode 100644 be/Modules/Role/package.json create mode 100644 be/Modules/User/Actions/.gitkeep create mode 100644 be/Modules/User/Config/.gitkeep create mode 100644 be/Modules/User/Config/config.php create mode 100644 be/Modules/User/Console/.gitkeep create mode 100644 be/Modules/User/Database/Factories/.gitkeep create mode 100644 be/Modules/User/Database/Migrations/.gitkeep create mode 100644 be/Modules/User/Database/Seeders/.gitkeep create mode 100644 be/Modules/User/Database/Seeders/UserDatabaseSeeder.php create mode 100644 be/Modules/User/Emails/.gitkeep create mode 100644 be/Modules/User/Entities/.gitkeep create mode 100644 be/Modules/User/Helpers/.gitkeep create mode 100644 be/Modules/User/Http/Controllers/.gitkeep create mode 100644 be/Modules/User/Http/Controllers/UserController.php create mode 100644 be/Modules/User/Http/Requests/.gitkeep create mode 100644 be/Modules/User/Http/Requests/UserRequest.php create mode 100644 be/Modules/User/Jobs/.gitkeep create mode 100644 be/Modules/User/Notifications/.gitkeep create mode 100644 be/Modules/User/Notifications/UserActivationNotification.php create mode 100644 be/Modules/User/Policies/.gitkeep create mode 100644 be/Modules/User/Policies/UserPolicy.php create mode 100644 be/Modules/User/Providers/.gitkeep create mode 100644 be/Modules/User/Providers/EventServiceProvider.php create mode 100644 be/Modules/User/Providers/RouteServiceProvider.php create mode 100644 be/Modules/User/Providers/UserServiceProvider.php create mode 100644 be/Modules/User/Repositories/.gitkeep create mode 100644 be/Modules/User/Repositories/Contracts/.gitkeep create mode 100644 be/Modules/User/Repositories/Contracts/UserRepositoryInterface.php create mode 100644 be/Modules/User/Repositories/UserRepository.php create mode 100644 be/Modules/User/Routes/.gitkeep create mode 100644 be/Modules/User/Routes/api.php create mode 100644 be/Modules/User/Services/.gitkeep create mode 100644 be/Modules/User/Services/UserService.php create mode 100644 be/Modules/User/Tests/Feature/.gitkeep create mode 100644 be/Modules/User/Tests/Unit/.gitkeep create mode 100644 be/Modules/User/Transformers/.gitkeep create mode 100644 be/Modules/User/Transformers/UserListResource.php create mode 100644 be/Modules/User/Transformers/UserResource.php create mode 100644 be/Modules/User/composer.json create mode 100644 be/Modules/User/module.json create mode 100644 be/Modules/User/package.json create mode 100644 be/README.md create mode 100644 be/app/Console/Commands/AutoGenerateWeeklyReportForUnit.php create mode 100644 be/app/Console/Commands/TriggerKJCHistoricalDataCapture.php create mode 100644 be/app/Console/Commands/TriggerPKJHistoricalDataCapture.php create mode 100644 be/app/Http/Controllers/BaseCrudController.php create mode 100644 be/app/Http/Controllers/ContactController.php create mode 100644 be/app/Http/Controllers/Controller.php create mode 100644 be/app/Http/Controllers/CountryController.php create mode 100644 be/app/Http/Controllers/ImpersonateController.php create mode 100644 be/app/Http/Controllers/OnlineUsersController.php create mode 100644 be/app/Http/Controllers/SocialMediaController.php create mode 100644 be/app/Http/Middleware/ApiKeyAuthenticationMiddleware.php create mode 100644 be/app/Http/Middleware/AuthenticateFromCookie.php create mode 100644 be/app/Http/Middleware/BlockApiToolsMiddleware.php create mode 100644 be/app/Http/Middleware/SingleSessionMiddleware.php create mode 100644 be/app/Jobs/CaptureKJCHistoricalDataJob.php create mode 100644 be/app/Jobs/CapturePKJHistoricalDataJob.php create mode 100644 be/app/Models/Country.php create mode 100644 be/app/Models/Permission.php create mode 100644 be/app/Models/PersonalAccessToken.php create mode 100644 be/app/Policies/ImpersonatePolicy.php create mode 100644 be/app/Providers/AppServiceProvider.php create mode 100644 be/app/Providers/FortifyServiceProvider.php create mode 100644 be/app/Providers/HorizonServiceProvider.php create mode 100644 be/app/Providers/TelescopeServiceProvider.php create mode 100644 be/app/Services/ActiveRoleService.php create mode 100644 be/app/Services/ActivityLogger.php create mode 100644 be/app/Services/ContactService.php create mode 100644 be/app/Services/DocumentService.php create mode 100644 be/app/Services/OnlineUsersService.php create mode 100644 be/app/Services/SocialMediaService.php create mode 100644 be/app/Services/VisibilityService.php create mode 100644 be/app/Support/AuthCookie.php create mode 100644 be/app/Traits/HasDocuments.php create mode 100644 be/app/Traits/HasVisibility.php create mode 100644 be/app/Traits/HttpClientTrait.php create mode 100644 be/app/Traits/NotifiesAdmins.php create mode 100755 be/artisan create mode 100644 be/bootstrap/app.php create mode 100644 be/bootstrap/cache/.gitignore create mode 100644 be/bootstrap/providers.php create mode 100644 be/composer.json create mode 100644 be/composer.lock create mode 100644 be/config/active_role.php create mode 100644 be/config/api_security.php create mode 100644 be/config/app.php create mode 100644 be/config/auth.php create mode 100644 be/config/auth_cookie.php create mode 100644 be/config/cache.php create mode 100644 be/config/cors.php create mode 100644 be/config/database.php create mode 100644 be/config/filesystems.php create mode 100644 be/config/fortify.php create mode 100644 be/config/horizon.php create mode 100644 be/config/http.php create mode 100644 be/config/laravel-impersonate.php create mode 100644 be/config/logging.php create mode 100644 be/config/mail.php create mode 100644 be/config/modules.php create mode 100644 be/config/permission.php create mode 100644 be/config/queue.php create mode 100644 be/config/services.php create mode 100644 be/config/session.php create mode 100644 be/config/sso.php create mode 100644 be/config/telescope.php create mode 100644 be/database/.gitignore create mode 100644 be/database/factories/UserFactory.php create mode 100644 be/database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 be/database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 be/database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 be/database/migrations/2025_07_25_051334_create_countries_table.php create mode 100644 be/database/migrations/2025_08_02_061334_create_documents_table.php create mode 100644 be/database/migrations/2025_09_16_215723_create_personal_access_tokens_table.php create mode 100644 be/database/migrations/2025_09_19_133435_add_two_factor_columns_to_users_table.php create mode 100644 be/database/migrations/2025_09_20_093654_create_telescope_entries_table.php create mode 100644 be/database/migrations/2025_09_20_121315_create_permission_tables.php create mode 100644 be/database/migrations/2025_09_20_121526_create_activity_log_table.php create mode 100644 be/database/migrations/2025_09_20_121527_add_event_column_to_activity_log_table.php create mode 100644 be/database/migrations/2025_09_20_121528_add_batch_uuid_column_to_activity_log_table.php create mode 100644 be/database/migrations/2025_09_30_223214_add_route_name_to_permissions_table.php create mode 100644 be/database/migrations/2025_09_30_232256_create_notifications_table.php create mode 100644 be/database/migrations/2025_10_05_144351_add_fullname_to_roles_table.php create mode 100644 be/database/migrations/2025_10_08_104950_add_status_to_users_table.php create mode 100644 be/database/migrations/2025_10_21_100954_add_performance_indexes_to_users_table.php create mode 100644 be/database/migrations/2025_11_19_035019_add_indexes_to_personal_access_tokens_table_for_single_session.php create mode 100644 be/database/migrations/2026_05_25_000001_add_active_role_id_to_personal_access_tokens_table.php create mode 100644 be/database/migrations/2026_05_25_000002_add_context_to_roles_table.php create mode 100644 be/database/migrations/2026_06_04_000001_create_email_verification_otps_table.php create mode 100644 be/database/seeders/DatabaseSeeder.php create mode 100644 be/database/seeders/PermissionsSeeder.php create mode 100644 be/database/seeders/RoleHasPermissionsSeeder.php create mode 100644 be/database/seeders/RolesSeeder.php create mode 100644 be/database/seeders/UserSeeder.php create mode 100644 be/database/seeders/VisibilityPermissionsSeeder.php create mode 100644 be/database/seeders/json/permissions_20251014.json create mode 100644 be/database/seeders/json/role_has_permissions_20251014.json create mode 100644 be/database/seeders/json/roles_20251014.json create mode 100644 be/docker-compose.yml create mode 100644 be/docker/common/php-fpm/supervisor/historical-data-capture.conf create mode 100644 be/docker/common/php-fpm/supervisor/historical-data-scheduler.conf create mode 100644 be/docker/common/php-fpm/supervisor/laravel-horizon.conf create mode 100644 be/docker/common/php-fpm/supervisor/laravel-scheduler.conf create mode 100644 be/docker/common/php-fpm/supervisor/laravel-worker.conf create mode 100644 be/docker/common/php-fpm/supervisor/php-fpm.conf create mode 100644 be/docker/common/php-fpm/supervisor/supervisord.conf create mode 100644 be/docker/common/unified/Dockerfile create mode 100644 be/docker/common/unified/entrypoint.sh create mode 100644 be/docker/common/unified/nginx/nginx.conf create mode 100644 be/docker/common/unified/redis/redis.conf create mode 100644 be/docker/common/unified/supervisor/supervisord.conf create mode 100644 be/docker/common/unified/supervisor/unified.conf create mode 100644 be/docker/production/docker-compose.production.yml create mode 100644 be/docker/production/nginx/nginx.conf create mode 100644 be/docker/production/redis/redis.conf create mode 100644 be/docker/staging/docker-compose.staging.yml create mode 100644 be/docker/staging/nginx/nginx.conf create mode 100644 be/docker/staging/redis/redis.conf create mode 100644 be/docker/training/docker-compose.training.yml create mode 100644 be/docker/training/nginx/nginx.conf create mode 100644 be/docker/training/redis/redis.conf create mode 100644 be/modules_statuses.json create mode 100644 be/package.json create mode 100644 be/phpunit.xml create mode 100644 be/public/.htaccess create mode 100644 be/public/favicon.ico create mode 100644 be/public/images/logo/Logo-RAJD.png create mode 100644 be/public/index.php create mode 100644 be/public/robots.txt create mode 100644 be/resources/css/app.css create mode 100644 be/resources/js/app.js create mode 100644 be/resources/js/bootstrap.js create mode 100644 be/resources/views/errors/503.blade.php create mode 100644 be/routes/api.php create mode 100644 be/routes/console.php create mode 100644 be/routes/web.php create mode 100644 be/storage/app/.gitignore create mode 100644 be/storage/app/private/.gitignore create mode 100644 be/storage/app/public/.gitignore create mode 100644 be/storage/framework/.gitignore create mode 100644 be/storage/framework/cache/.gitignore create mode 100644 be/storage/framework/cache/data/.gitignore create mode 100644 be/storage/framework/sessions/.gitignore create mode 100644 be/storage/framework/testing/.gitignore create mode 100644 be/storage/framework/views/.gitignore create mode 100644 be/storage/logs/.gitignore create mode 100644 be/stubs/nwidart-stubs/action-invoke.stub create mode 100644 be/stubs/nwidart-stubs/action.stub create mode 100644 be/stubs/nwidart-stubs/assets/js/app.stub create mode 100644 be/stubs/nwidart-stubs/assets/sass/app.stub create mode 100644 be/stubs/nwidart-stubs/cast.stub create mode 100644 be/stubs/nwidart-stubs/channel.stub create mode 100644 be/stubs/nwidart-stubs/class-invoke.stub create mode 100644 be/stubs/nwidart-stubs/class.stub create mode 100644 be/stubs/nwidart-stubs/command.stub create mode 100644 be/stubs/nwidart-stubs/component-class.stub create mode 100644 be/stubs/nwidart-stubs/component-view.stub create mode 100644 be/stubs/nwidart-stubs/composer.stub create mode 100644 be/stubs/nwidart-stubs/controller-api.stub create mode 100644 be/stubs/nwidart-stubs/controller-basecrud.stub create mode 100644 be/stubs/nwidart-stubs/controller-plain.stub create mode 100644 be/stubs/nwidart-stubs/controller.invokable.stub create mode 100644 be/stubs/nwidart-stubs/controller.stub create mode 100644 be/stubs/nwidart-stubs/enum.stub create mode 100644 be/stubs/nwidart-stubs/event-provider.stub create mode 100644 be/stubs/nwidart-stubs/event.stub create mode 100644 be/stubs/nwidart-stubs/exception-render-report.stub create mode 100644 be/stubs/nwidart-stubs/exception-render.stub create mode 100644 be/stubs/nwidart-stubs/exception-report.stub create mode 100644 be/stubs/nwidart-stubs/exception.stub create mode 100644 be/stubs/nwidart-stubs/factory.stub create mode 100644 be/stubs/nwidart-stubs/helper-invoke.stub create mode 100644 be/stubs/nwidart-stubs/helper.stub create mode 100644 be/stubs/nwidart-stubs/interface.stub create mode 100644 be/stubs/nwidart-stubs/job-queued.stub create mode 100644 be/stubs/nwidart-stubs/job.stub create mode 100644 be/stubs/nwidart-stubs/json.stub create mode 100644 be/stubs/nwidart-stubs/listener-duck.stub create mode 100644 be/stubs/nwidart-stubs/listener-queued-duck.stub create mode 100644 be/stubs/nwidart-stubs/listener-queued.stub create mode 100644 be/stubs/nwidart-stubs/listener.stub create mode 100644 be/stubs/nwidart-stubs/mail.stub create mode 100644 be/stubs/nwidart-stubs/middleware.stub create mode 100644 be/stubs/nwidart-stubs/migration/add.stub create mode 100644 be/stubs/nwidart-stubs/migration/create.stub create mode 100644 be/stubs/nwidart-stubs/migration/delete.stub create mode 100644 be/stubs/nwidart-stubs/migration/drop.stub create mode 100644 be/stubs/nwidart-stubs/migration/plain.stub create mode 100644 be/stubs/nwidart-stubs/model.stub create mode 100644 be/stubs/nwidart-stubs/notification.stub create mode 100644 be/stubs/nwidart-stubs/observer.stub create mode 100644 be/stubs/nwidart-stubs/package.stub create mode 100644 be/stubs/nwidart-stubs/policy.plain.stub create mode 100644 be/stubs/nwidart-stubs/provider.stub create mode 100644 be/stubs/nwidart-stubs/repository-crud.stub create mode 100644 be/stubs/nwidart-stubs/repository-interface.stub create mode 100644 be/stubs/nwidart-stubs/repository-invoke.stub create mode 100644 be/stubs/nwidart-stubs/repository.stub create mode 100644 be/stubs/nwidart-stubs/request.stub create mode 100644 be/stubs/nwidart-stubs/resource-collection.stub create mode 100644 be/stubs/nwidart-stubs/resource.stub create mode 100644 be/stubs/nwidart-stubs/route-provider.stub create mode 100644 be/stubs/nwidart-stubs/routes/api.stub create mode 100644 be/stubs/nwidart-stubs/routes/web.stub create mode 100644 be/stubs/nwidart-stubs/rule.implicit.stub create mode 100644 be/stubs/nwidart-stubs/rule.stub create mode 100644 be/stubs/nwidart-stubs/scaffold/config.stub create mode 100644 be/stubs/nwidart-stubs/scaffold/provider.stub create mode 100644 be/stubs/nwidart-stubs/scope.stub create mode 100644 be/stubs/nwidart-stubs/seeder.stub create mode 100644 be/stubs/nwidart-stubs/service-invoke.stub create mode 100644 be/stubs/nwidart-stubs/service.stub create mode 100644 be/stubs/nwidart-stubs/tests/feature.stub create mode 100644 be/stubs/nwidart-stubs/tests/unit.stub create mode 100644 be/stubs/nwidart-stubs/trait.stub create mode 100644 be/stubs/nwidart-stubs/view.stub create mode 100644 be/stubs/nwidart-stubs/views/index.stub create mode 100644 be/stubs/nwidart-stubs/views/master.stub create mode 100644 be/stubs/nwidart-stubs/vite.stub create mode 100644 be/tests/Feature/ExampleTest.php create mode 100644 be/tests/TestCase.php create mode 100644 be/tests/Unit/ExampleTest.php create mode 100644 be/vite-module-loader.js create mode 100644 be/vite.config.js create mode 100644 docs/BORANG-MENJADI-ANGGOTA-2024.pdf create mode 100644 docs/BORANG-PERMOHONAN-PEMBIAYAAN-ANGGOTA-new.pdf create mode 100644 docs/Flowchart-MyKOPKB.drawio create mode 100644 docs/Kertas Cadangan Kerja - Penggunaan sistem iKOOP.pdf create mode 100644 docs/SENARAI DAFTAR ANGGOTA 2026.xls create mode 100644 docs/architecture.md create mode 100644 docs/db_design.md create mode 100644 fe/.DS_Store create mode 100644 fe/.editorconfig create mode 100644 fe/.env.development create mode 100644 fe/.gitignore create mode 100644 fe/.prettierrc.json create mode 100644 fe/README.md create mode 100644 fe/cypress.config.ts create mode 100644 fe/env.d.ts create mode 100644 fe/eslint.config.ts create mode 100644 fe/index.html create mode 100644 fe/package.json create mode 100644 fe/pnpm-lock.yaml create mode 100644 fe/public/favicon.ico create mode 100644 fe/src/App.vue create mode 100644 fe/src/assets/css/themes/enigma/side-menu.css create mode 100644 fe/src/assets/css/themes/enigma/top-menu.css create mode 100644 fe/src/assets/images/Logo-RAJD.png create mode 100644 fe/src/assets/images/accent.svg create mode 100644 fe/src/assets/images/bg-pattern.svg create mode 100644 fe/src/assets/images/error-illustration.svg create mode 100755 fe/src/assets/images/fakers/food-beverage-1.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-10.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-11.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-12.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-13.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-14.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-15.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-16.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-17.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-18.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-19.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-2.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-3.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-4.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-5.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-6.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-7.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-8.jpg create mode 100755 fe/src/assets/images/fakers/food-beverage-9.jpg create mode 100755 fe/src/assets/images/fakers/preview-1.jpg create mode 100755 fe/src/assets/images/fakers/preview-10.jpg create mode 100755 fe/src/assets/images/fakers/preview-11.jpg create mode 100755 fe/src/assets/images/fakers/preview-12.jpg create mode 100755 fe/src/assets/images/fakers/preview-13.jpg create mode 100755 fe/src/assets/images/fakers/preview-14.jpg create mode 100755 fe/src/assets/images/fakers/preview-15.jpg create mode 100755 fe/src/assets/images/fakers/preview-2.jpg create mode 100755 fe/src/assets/images/fakers/preview-3.jpg create mode 100755 fe/src/assets/images/fakers/preview-4.jpg create mode 100755 fe/src/assets/images/fakers/preview-5.jpg create mode 100755 fe/src/assets/images/fakers/preview-6.jpg create mode 100755 fe/src/assets/images/fakers/preview-7.jpg create mode 100755 fe/src/assets/images/fakers/preview-8.jpg create mode 100755 fe/src/assets/images/fakers/preview-9.jpg create mode 100755 fe/src/assets/images/fakers/profile-1.jpg create mode 100755 fe/src/assets/images/fakers/profile-10.jpg create mode 100755 fe/src/assets/images/fakers/profile-11.jpg create mode 100755 fe/src/assets/images/fakers/profile-12.jpg create mode 100755 fe/src/assets/images/fakers/profile-13.jpg create mode 100755 fe/src/assets/images/fakers/profile-14.jpg create mode 100755 fe/src/assets/images/fakers/profile-15.jpg create mode 100755 fe/src/assets/images/fakers/profile-2.jpg create mode 100755 fe/src/assets/images/fakers/profile-3.jpg create mode 100755 fe/src/assets/images/fakers/profile-4.jpg create mode 100755 fe/src/assets/images/fakers/profile-5.jpg create mode 100755 fe/src/assets/images/fakers/profile-6.jpg create mode 100755 fe/src/assets/images/fakers/profile-7.jpg create mode 100755 fe/src/assets/images/fakers/profile-8.jpg create mode 100755 fe/src/assets/images/fakers/profile-9.jpg create mode 100644 fe/src/assets/images/illustration.svg create mode 100644 fe/src/assets/images/logo-kopkb.svg create mode 100644 fe/src/assets/images/logo.svg create mode 100644 fe/src/assets/images/noise.png create mode 100644 fe/src/assets/images/phone-illustration.svg create mode 100755 fe/src/assets/images/placeholders/200x200.jpg create mode 100755 fe/src/assets/images/placeholders/800x800.jpg create mode 100644 fe/src/assets/images/woman-illustration.svg create mode 100644 fe/src/components/account-dropdown/AccountDropdown.vue create mode 100644 fe/src/components/account-dropdown/AccountTrigger.vue create mode 100644 fe/src/components/account-dropdown/index.ts create mode 100644 fe/src/components/chart-presets/Bar1.vue create mode 100644 fe/src/components/chart-presets/Bar2.vue create mode 100644 fe/src/components/chart-presets/Donut1.vue create mode 100644 fe/src/components/chart-presets/Donut2.vue create mode 100644 fe/src/components/chart-presets/Line1.vue create mode 100644 fe/src/components/chart-presets/Line2.vue create mode 100644 fe/src/components/chart-presets/Line3.vue create mode 100644 fe/src/components/chart-presets/Pie1.vue create mode 100644 fe/src/components/chart-presets/index.ts create mode 100644 fe/src/components/daily-notes/DailyNotes.vue create mode 100644 fe/src/components/daily-notes/index.ts create mode 100644 fe/src/components/docs/ApiButton.vue create mode 100644 fe/src/components/docs/InstallPackage.vue create mode 100644 fe/src/components/docs/Menu.vue create mode 100644 fe/src/components/docs/Preview.vue create mode 100644 fe/src/components/docs/PreviewCode.vue create mode 100644 fe/src/components/docs/SectionContent.vue create mode 100644 fe/src/components/docs/SectionTitle.vue create mode 100644 fe/src/components/docs/Subtitle.vue create mode 100644 fe/src/components/docs/Title.vue create mode 100644 fe/src/components/docs/Wrapper.vue create mode 100644 fe/src/components/docs/index.ts create mode 100644 fe/src/components/notification-dropdown/NotificationDropdown.vue create mode 100644 fe/src/components/notification-dropdown/index.ts create mode 100644 fe/src/components/official-stores/OfficialStores.vue create mode 100644 fe/src/components/official-stores/index.ts create mode 100644 fe/src/components/quick-search-dialog/QuickSearchDialog.vue create mode 100644 fe/src/components/quick-search-dialog/index.ts create mode 100644 fe/src/components/recent-activities/RecentActivities.vue create mode 100644 fe/src/components/recent-activities/index.ts create mode 100644 fe/src/components/schedules/Schedules.vue create mode 100644 fe/src/components/schedules/index.ts create mode 100644 fe/src/components/side-menu/SideMenu.vue create mode 100644 fe/src/components/side-menu/index.ts create mode 100644 fe/src/components/theme-switcher/ThemeSwitcher.vue create mode 100644 fe/src/components/theme-switcher/index.ts create mode 100644 fe/src/components/top-menu/TopMenu.vue create mode 100644 fe/src/components/top-menu/index.ts create mode 100644 fe/src/components/transactions/Transactions.vue create mode 100644 fe/src/components/transactions/index.ts create mode 100644 fe/src/components/ui/accordion/AccordionContent.vue create mode 100644 fe/src/components/ui/accordion/AccordionItem.vue create mode 100644 fe/src/components/ui/accordion/AccordionRoot.vue create mode 100644 fe/src/components/ui/accordion/AccordionTrigger.vue create mode 100644 fe/src/components/ui/accordion/index.ts create mode 100644 fe/src/components/ui/alert/AlertCloseTrigger.vue create mode 100644 fe/src/components/ui/alert/AlertDescription.vue create mode 100644 fe/src/components/ui/alert/AlertRoot.vue create mode 100644 fe/src/components/ui/alert/AlertTitle.vue create mode 100644 fe/src/components/ui/alert/index.ts create mode 100644 fe/src/components/ui/avatar/AvatarFallback.vue create mode 100644 fe/src/components/ui/avatar/AvatarImage.vue create mode 100644 fe/src/components/ui/avatar/AvatarRoot.vue create mode 100644 fe/src/components/ui/avatar/index.ts create mode 100644 fe/src/components/ui/badge/Badge.vue create mode 100644 fe/src/components/ui/badge/index.ts create mode 100644 fe/src/components/ui/box/box.vue create mode 100644 fe/src/components/ui/box/index.ts create mode 100644 fe/src/components/ui/breadcrumb/Breadcrumb.vue create mode 100644 fe/src/components/ui/breadcrumb/BreadcrumbItem.vue create mode 100644 fe/src/components/ui/breadcrumb/BreadcrumbLink.vue create mode 100644 fe/src/components/ui/breadcrumb/BreadcrumbList.vue create mode 100644 fe/src/components/ui/breadcrumb/index.ts create mode 100644 fe/src/components/ui/button/Button.vue create mode 100644 fe/src/components/ui/button/index.ts create mode 100644 fe/src/components/ui/carousel/CarouselControl.vue create mode 100644 fe/src/components/ui/carousel/CarouselIndicator.vue create mode 100644 fe/src/components/ui/carousel/CarouselIndicatorGroup.vue create mode 100644 fe/src/components/ui/carousel/CarouselItem.vue create mode 100644 fe/src/components/ui/carousel/CarouselItemGroup.vue create mode 100644 fe/src/components/ui/carousel/CarouselNextTrigger.vue create mode 100644 fe/src/components/ui/carousel/CarouselPrevTrigger.vue create mode 100644 fe/src/components/ui/carousel/CarouselRoot.vue create mode 100644 fe/src/components/ui/carousel/index.ts create mode 100644 fe/src/components/ui/chart/Chart.vue create mode 100644 fe/src/components/ui/chart/index.ts create mode 100644 fe/src/components/ui/chart/utils.ts create mode 100644 fe/src/components/ui/checkbox/CheckboxControl.vue create mode 100644 fe/src/components/ui/checkbox/CheckboxHiddenInput.vue create mode 100644 fe/src/components/ui/checkbox/CheckboxIndicator.vue create mode 100644 fe/src/components/ui/checkbox/CheckboxLabel.vue create mode 100644 fe/src/components/ui/checkbox/CheckboxRoot.vue create mode 100644 fe/src/components/ui/checkbox/index.ts create mode 100644 fe/src/components/ui/combobox/ComboboxClearTrigger.vue create mode 100644 fe/src/components/ui/combobox/ComboboxContent.vue create mode 100644 fe/src/components/ui/combobox/ComboboxControl.vue create mode 100644 fe/src/components/ui/combobox/ComboboxInput.vue create mode 100644 fe/src/components/ui/combobox/ComboboxItem.vue create mode 100644 fe/src/components/ui/combobox/ComboboxItemGroup.vue create mode 100644 fe/src/components/ui/combobox/ComboboxItemGroupLabel.vue create mode 100644 fe/src/components/ui/combobox/ComboboxItemIndicator.vue create mode 100644 fe/src/components/ui/combobox/ComboboxItemText.vue create mode 100644 fe/src/components/ui/combobox/ComboboxLabel.vue create mode 100644 fe/src/components/ui/combobox/ComboboxPositioner.vue create mode 100644 fe/src/components/ui/combobox/ComboboxRoot.vue create mode 100644 fe/src/components/ui/combobox/ComboboxTrigger.vue create mode 100644 fe/src/components/ui/combobox/index.ts create mode 100644 fe/src/components/ui/datepicker/DatePickerClearTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerContent.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerContext.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerControl.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerInput.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerLabel.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerMonthSelect.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerNextTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerPositioner.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerPresetTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerPrevTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerRangeText.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerRoot.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTable.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTableBody.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTableCell.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTableCellTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTableHead.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTableHeader.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTableRow.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerView.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerViewControl.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerViewTrigger.vue create mode 100644 fe/src/components/ui/datepicker/DatePickerYearSelect.vue create mode 100644 fe/src/components/ui/datepicker/index.ts create mode 100644 fe/src/components/ui/dialog/DialogBackdrop.vue create mode 100644 fe/src/components/ui/dialog/DialogCloseTrigger.vue create mode 100644 fe/src/components/ui/dialog/DialogContent.vue create mode 100644 fe/src/components/ui/dialog/DialogDescription.vue create mode 100644 fe/src/components/ui/dialog/DialogPositioner.vue create mode 100644 fe/src/components/ui/dialog/DialogRoot.vue create mode 100644 fe/src/components/ui/dialog/DialogTitle.vue create mode 100644 fe/src/components/ui/dialog/DialogTrigger.vue create mode 100644 fe/src/components/ui/dialog/index.ts create mode 100644 fe/src/components/ui/field/Field.vue create mode 100644 fe/src/components/ui/field/FieldContent.vue create mode 100644 fe/src/components/ui/field/FieldDescription.vue create mode 100644 fe/src/components/ui/field/FieldError.vue create mode 100644 fe/src/components/ui/field/FieldGroup.vue create mode 100644 fe/src/components/ui/field/FieldLabel.vue create mode 100644 fe/src/components/ui/field/FieldLegend.vue create mode 100644 fe/src/components/ui/field/FieldSeparator.vue create mode 100644 fe/src/components/ui/field/FieldSet.vue create mode 100644 fe/src/components/ui/field/FieldTitle.vue create mode 100644 fe/src/components/ui/field/index.ts create mode 100644 fe/src/components/ui/file-icon/FileIcon.vue create mode 100644 fe/src/components/ui/file-icon/index.ts create mode 100644 fe/src/components/ui/frame/Frame.vue create mode 100644 fe/src/components/ui/frame/index.ts create mode 100644 fe/src/components/ui/input/Input.vue create mode 100644 fe/src/components/ui/input/index.ts create mode 100644 fe/src/components/ui/label/Label.vue create mode 100644 fe/src/components/ui/label/index.ts create mode 100644 fe/src/components/ui/lucide/Lucide.vue create mode 100644 fe/src/components/ui/lucide/index.ts create mode 100644 fe/src/components/ui/map/Map.vue create mode 100644 fe/src/components/ui/map/index.ts create mode 100644 fe/src/components/ui/menu/MenuCheckboxItem.vue create mode 100644 fe/src/components/ui/menu/MenuContent.vue create mode 100644 fe/src/components/ui/menu/MenuIndicator.vue create mode 100644 fe/src/components/ui/menu/MenuItem.vue create mode 100644 fe/src/components/ui/menu/MenuItemGroupLabel.vue create mode 100644 fe/src/components/ui/menu/MenuPositioner.vue create mode 100644 fe/src/components/ui/menu/MenuRadioItem.vue create mode 100644 fe/src/components/ui/menu/MenuRadioItemGroup.vue create mode 100644 fe/src/components/ui/menu/MenuRoot.vue create mode 100644 fe/src/components/ui/menu/MenuSeparator.vue create mode 100644 fe/src/components/ui/menu/MenuTrigger.vue create mode 100644 fe/src/components/ui/menu/MenuTriggerItem.vue create mode 100644 fe/src/components/ui/menu/index.ts create mode 100644 fe/src/components/ui/native-select/NativeSelect.vue create mode 100644 fe/src/components/ui/native-select/NativeSelectOption.vue create mode 100644 fe/src/components/ui/native-select/NativeSelectOptionGroup.vue create mode 100644 fe/src/components/ui/native-select/index.ts create mode 100644 fe/src/components/ui/pagination/PaginationContext.vue create mode 100644 fe/src/components/ui/pagination/PaginationEllipsis.vue create mode 100644 fe/src/components/ui/pagination/PaginationItem.vue create mode 100644 fe/src/components/ui/pagination/PaginationNextTrigger.vue create mode 100644 fe/src/components/ui/pagination/PaginationPrevTrigger.vue create mode 100644 fe/src/components/ui/pagination/PaginationRoot.vue create mode 100644 fe/src/components/ui/pagination/index.ts create mode 100644 fe/src/components/ui/password-input/PasswordInput.vue create mode 100644 fe/src/components/ui/password-input/index.ts create mode 100644 fe/src/components/ui/popover/PopoverArrow.vue create mode 100644 fe/src/components/ui/popover/PopoverArrowTip.vue create mode 100644 fe/src/components/ui/popover/PopoverContent.vue create mode 100644 fe/src/components/ui/popover/PopoverDescription.vue create mode 100644 fe/src/components/ui/popover/PopoverIndicator.vue create mode 100644 fe/src/components/ui/popover/PopoverPositioner.vue create mode 100644 fe/src/components/ui/popover/PopoverRoot.vue create mode 100644 fe/src/components/ui/popover/PopoverTitle.vue create mode 100644 fe/src/components/ui/popover/PopoverTrigger.vue create mode 100644 fe/src/components/ui/popover/index.ts create mode 100644 fe/src/components/ui/presence/Presence.vue create mode 100644 fe/src/components/ui/presence/index.ts create mode 100644 fe/src/components/ui/progress-circular/ProgressCircle.vue create mode 100644 fe/src/components/ui/progress-circular/ProgressCircleRange.vue create mode 100644 fe/src/components/ui/progress-circular/ProgressCircleTrack.vue create mode 100644 fe/src/components/ui/progress-circular/ProgressLabel.vue create mode 100644 fe/src/components/ui/progress-circular/ProgressRoot.vue create mode 100644 fe/src/components/ui/progress-circular/ProgressValueText.vue create mode 100644 fe/src/components/ui/progress-circular/index.ts create mode 100644 fe/src/components/ui/progress-linear/ProgressLabel.vue create mode 100644 fe/src/components/ui/progress-linear/ProgressRange.vue create mode 100644 fe/src/components/ui/progress-linear/ProgressRoot.vue create mode 100644 fe/src/components/ui/progress-linear/ProgressTrack.vue create mode 100644 fe/src/components/ui/progress-linear/ProgressValueText.vue create mode 100644 fe/src/components/ui/progress-linear/index.ts create mode 100644 fe/src/components/ui/radio-group/RadioGroupIndicator.vue create mode 100644 fe/src/components/ui/radio-group/RadioGroupItem.vue create mode 100644 fe/src/components/ui/radio-group/RadioGroupItemControl.vue create mode 100644 fe/src/components/ui/radio-group/RadioGroupItemHiddenInput.vue create mode 100644 fe/src/components/ui/radio-group/RadioGroupItemText.vue create mode 100644 fe/src/components/ui/radio-group/RadioGroupLabel.vue create mode 100644 fe/src/components/ui/radio-group/RadioGroupRoot.vue create mode 100644 fe/src/components/ui/radio-group/index.ts create mode 100644 fe/src/components/ui/scroll-area/ScrollAreaContent.vue create mode 100644 fe/src/components/ui/scroll-area/ScrollAreaCorner.vue create mode 100644 fe/src/components/ui/scroll-area/ScrollAreaRoot.vue create mode 100644 fe/src/components/ui/scroll-area/ScrollAreaScrollbar.vue create mode 100644 fe/src/components/ui/scroll-area/ScrollAreaThumb.vue create mode 100644 fe/src/components/ui/scroll-area/ScrollAreaViewport.vue create mode 100644 fe/src/components/ui/scroll-area/index.ts create mode 100644 fe/src/components/ui/select/SelectClearTrigger.vue create mode 100644 fe/src/components/ui/select/SelectContent.vue create mode 100644 fe/src/components/ui/select/SelectControl.vue create mode 100644 fe/src/components/ui/select/SelectHiddenSelect.vue create mode 100644 fe/src/components/ui/select/SelectIndicator.vue create mode 100644 fe/src/components/ui/select/SelectItem.vue create mode 100644 fe/src/components/ui/select/SelectItemGroup.vue create mode 100644 fe/src/components/ui/select/SelectItemGroupLabel.vue create mode 100644 fe/src/components/ui/select/SelectItemIndicator.vue create mode 100644 fe/src/components/ui/select/SelectItemText.vue create mode 100644 fe/src/components/ui/select/SelectLabel.vue create mode 100644 fe/src/components/ui/select/SelectPositioner.vue create mode 100644 fe/src/components/ui/select/SelectRoot.vue create mode 100644 fe/src/components/ui/select/SelectTrigger.vue create mode 100644 fe/src/components/ui/select/SelectValueText.vue create mode 100644 fe/src/components/ui/select/index.ts create mode 100644 fe/src/components/ui/separator/Separator.vue create mode 100644 fe/src/components/ui/separator/index.ts create mode 100644 fe/src/components/ui/sheet/SheetBackdrop.vue create mode 100644 fe/src/components/ui/sheet/SheetCloseTrigger.vue create mode 100644 fe/src/components/ui/sheet/SheetContent.vue create mode 100644 fe/src/components/ui/sheet/SheetDescription.vue create mode 100644 fe/src/components/ui/sheet/SheetPositioner.vue create mode 100644 fe/src/components/ui/sheet/SheetRoot.vue create mode 100644 fe/src/components/ui/sheet/SheetTitle.vue create mode 100644 fe/src/components/ui/sheet/SheetTrigger.vue create mode 100644 fe/src/components/ui/sheet/index.ts create mode 100644 fe/src/components/ui/slider/SliderControl.vue create mode 100644 fe/src/components/ui/slider/SliderHiddenInput.vue create mode 100644 fe/src/components/ui/slider/SliderLabel.vue create mode 100644 fe/src/components/ui/slider/SliderMarker.vue create mode 100644 fe/src/components/ui/slider/SliderMarkerGroup.vue create mode 100644 fe/src/components/ui/slider/SliderRange.vue create mode 100644 fe/src/components/ui/slider/SliderRoot.vue create mode 100644 fe/src/components/ui/slider/SliderThumb.vue create mode 100644 fe/src/components/ui/slider/SliderTrack.vue create mode 100644 fe/src/components/ui/slider/SliderValueText.vue create mode 100644 fe/src/components/ui/slider/index.ts create mode 100644 fe/src/components/ui/slot/index.ts create mode 100644 fe/src/components/ui/slot/slot.ts create mode 100644 fe/src/components/ui/styles/accordion.styles.ts create mode 100644 fe/src/components/ui/styles/alert.styles.ts create mode 100644 fe/src/components/ui/styles/avatar.styles.ts create mode 100644 fe/src/components/ui/styles/badge.styles.ts create mode 100644 fe/src/components/ui/styles/box.styles.ts create mode 100644 fe/src/components/ui/styles/breadcrumb.styles.ts create mode 100644 fe/src/components/ui/styles/button.styles.ts create mode 100644 fe/src/components/ui/styles/carousel.styles.ts create mode 100644 fe/src/components/ui/styles/chart.styles.ts create mode 100644 fe/src/components/ui/styles/checkbox.styles.ts create mode 100644 fe/src/components/ui/styles/combobox.styles.ts create mode 100644 fe/src/components/ui/styles/datepicker.styles.ts create mode 100644 fe/src/components/ui/styles/dialog.styles.ts create mode 100644 fe/src/components/ui/styles/field.styles.ts create mode 100644 fe/src/components/ui/styles/input.styles.ts create mode 100644 fe/src/components/ui/styles/label.styles.ts create mode 100644 fe/src/components/ui/styles/map.styles.ts create mode 100644 fe/src/components/ui/styles/menu.styles.ts create mode 100644 fe/src/components/ui/styles/native-select.styles.ts create mode 100644 fe/src/components/ui/styles/pagination.styles.ts create mode 100644 fe/src/components/ui/styles/popover.styles.ts create mode 100644 fe/src/components/ui/styles/progress-circular.styles.ts create mode 100644 fe/src/components/ui/styles/progress-linear.styles.ts create mode 100644 fe/src/components/ui/styles/radio-group.styles.ts create mode 100644 fe/src/components/ui/styles/scroll-area.styles.ts create mode 100644 fe/src/components/ui/styles/select.styles.ts create mode 100644 fe/src/components/ui/styles/separator.style.ts create mode 100644 fe/src/components/ui/styles/separator.styles.ts create mode 100644 fe/src/components/ui/styles/sheet.styles.ts create mode 100644 fe/src/components/ui/styles/slider.styles.ts create mode 100644 fe/src/components/ui/styles/switch.styles.ts create mode 100644 fe/src/components/ui/styles/table.styles.ts create mode 100644 fe/src/components/ui/styles/tabs.styles.ts create mode 100644 fe/src/components/ui/styles/textarea.styles.ts create mode 100644 fe/src/components/ui/styles/toast.styles.ts create mode 100644 fe/src/components/ui/styles/tooltip.styles.ts create mode 100644 fe/src/components/ui/switch/SwitchControl.vue create mode 100644 fe/src/components/ui/switch/SwitchHiddenInput.vue create mode 100644 fe/src/components/ui/switch/SwitchLabel.vue create mode 100644 fe/src/components/ui/switch/SwitchRoot.vue create mode 100644 fe/src/components/ui/switch/SwitchThumb.vue create mode 100644 fe/src/components/ui/switch/index.ts create mode 100644 fe/src/components/ui/table/Table.vue create mode 100644 fe/src/components/ui/table/TableBody.vue create mode 100644 fe/src/components/ui/table/TableCaption.vue create mode 100644 fe/src/components/ui/table/TableCell.vue create mode 100644 fe/src/components/ui/table/TableContainer.vue create mode 100644 fe/src/components/ui/table/TableFooter.vue create mode 100644 fe/src/components/ui/table/TableHead.vue create mode 100644 fe/src/components/ui/table/TableHeader.vue create mode 100644 fe/src/components/ui/table/TableRow.vue create mode 100644 fe/src/components/ui/table/index.ts create mode 100644 fe/src/components/ui/tabs/TabsContent.vue create mode 100644 fe/src/components/ui/tabs/TabsIndicator.vue create mode 100644 fe/src/components/ui/tabs/TabsList.vue create mode 100644 fe/src/components/ui/tabs/TabsRoot.vue create mode 100644 fe/src/components/ui/tabs/TabsTrigger.vue create mode 100644 fe/src/components/ui/tabs/index.ts create mode 100644 fe/src/components/ui/textarea/Textarea.vue create mode 100644 fe/src/components/ui/textarea/index.ts create mode 100644 fe/src/components/ui/toast/ToastCloseTrigger.vue create mode 100644 fe/src/components/ui/toast/ToastDescription.vue create mode 100644 fe/src/components/ui/toast/ToastItem.vue create mode 100644 fe/src/components/ui/toast/ToastRoot.vue create mode 100644 fe/src/components/ui/toast/ToastTitle.vue create mode 100644 fe/src/components/ui/toast/ToasterContainer.vue create mode 100644 fe/src/components/ui/toast/index.ts create mode 100644 fe/src/components/ui/toast/toaster.ts create mode 100644 fe/src/components/ui/tooltip/TooltipArrow.vue create mode 100644 fe/src/components/ui/tooltip/TooltipArrowTip.vue create mode 100644 fe/src/components/ui/tooltip/TooltipContent.vue create mode 100644 fe/src/components/ui/tooltip/TooltipPositioner.vue create mode 100644 fe/src/components/ui/tooltip/TooltipRoot.vue create mode 100644 fe/src/components/ui/tooltip/TooltipTrigger.vue create mode 100644 fe/src/components/ui/tooltip/index.ts create mode 100644 fe/src/components/ui/usage/Accordion.vue create mode 100644 fe/src/components/ui/usage/Alert.vue create mode 100644 fe/src/components/ui/usage/Avatar.vue create mode 100644 fe/src/components/ui/usage/Badge.vue create mode 100644 fe/src/components/ui/usage/Box.vue create mode 100644 fe/src/components/ui/usage/Breadcrumb.vue create mode 100644 fe/src/components/ui/usage/Button.vue create mode 100644 fe/src/components/ui/usage/Carousel.vue create mode 100644 fe/src/components/ui/usage/Chart.vue create mode 100644 fe/src/components/ui/usage/Checkbox.vue create mode 100644 fe/src/components/ui/usage/Combobox.vue create mode 100644 fe/src/components/ui/usage/DataTable.vue create mode 100644 fe/src/components/ui/usage/Datepicker.vue create mode 100644 fe/src/components/ui/usage/Dialog.vue create mode 100644 fe/src/components/ui/usage/Field.vue create mode 100644 fe/src/components/ui/usage/Input.vue create mode 100644 fe/src/components/ui/usage/Map.vue create mode 100644 fe/src/components/ui/usage/Menu.vue create mode 100644 fe/src/components/ui/usage/NativeSelect.vue create mode 100644 fe/src/components/ui/usage/Pagination.vue create mode 100644 fe/src/components/ui/usage/Popover.vue create mode 100644 fe/src/components/ui/usage/ProgressCircular.vue create mode 100644 fe/src/components/ui/usage/ProgressLinear.vue create mode 100644 fe/src/components/ui/usage/RadioGroup.vue create mode 100644 fe/src/components/ui/usage/Select.vue create mode 100644 fe/src/components/ui/usage/Sheet.vue create mode 100644 fe/src/components/ui/usage/Slider.vue create mode 100644 fe/src/components/ui/usage/Switch.vue create mode 100644 fe/src/components/ui/usage/Table.vue create mode 100644 fe/src/components/ui/usage/Tabs.vue create mode 100644 fe/src/components/ui/usage/Textarea.vue create mode 100644 fe/src/components/ui/usage/Toast.vue create mode 100644 fe/src/components/ui/usage/Tooltip.vue create mode 100644 fe/src/components/ui/utils/cn.ts create mode 100644 fe/src/components/weekly-best-sellers/WeeklyBestSellers.vue create mode 100644 fe/src/components/weekly-best-sellers/index.ts create mode 100644 fe/src/components/weekly-top-products/WeeklyTopProducts.vue create mode 100644 fe/src/components/weekly-top-products/index.ts create mode 100644 fe/src/composables/useApiPagination.ts create mode 100644 fe/src/composables/useBreadcrumb.ts create mode 100644 fe/src/composables/useQuickSearch.ts create mode 100644 fe/src/composables/useRoleSwitcher.ts create mode 100644 fe/src/composables/useSideMenu.ts create mode 100644 fe/src/core/services/api.ts create mode 100644 fe/src/core/types/api.ts create mode 100644 fe/src/core/types/menu.ts create mode 100644 fe/src/core/utils/getApiErrorMessage.ts create mode 100644 fe/src/docs/DocsLayout.vue create mode 100644 fe/src/docs/pages/accordion.vue create mode 100644 fe/src/docs/pages/alert.vue create mode 100644 fe/src/docs/pages/avatar.vue create mode 100644 fe/src/docs/pages/badge.vue create mode 100644 fe/src/docs/pages/box.vue create mode 100644 fe/src/docs/pages/breadcrumb.vue create mode 100644 fe/src/docs/pages/button.vue create mode 100644 fe/src/docs/pages/carousel.vue create mode 100644 fe/src/docs/pages/chart.vue create mode 100644 fe/src/docs/pages/checkbox.vue create mode 100644 fe/src/docs/pages/combobox.vue create mode 100644 fe/src/docs/pages/data-table.vue create mode 100644 fe/src/docs/pages/datepicker.vue create mode 100644 fe/src/docs/pages/dialog.vue create mode 100644 fe/src/docs/pages/field.vue create mode 100644 fe/src/docs/pages/input.vue create mode 100644 fe/src/docs/pages/map.vue create mode 100644 fe/src/docs/pages/menu.vue create mode 100644 fe/src/docs/pages/native-select.vue create mode 100644 fe/src/docs/pages/pagination.vue create mode 100644 fe/src/docs/pages/popover.vue create mode 100644 fe/src/docs/pages/progress-circular.vue create mode 100644 fe/src/docs/pages/progress-linear.vue create mode 100644 fe/src/docs/pages/radio-group.vue create mode 100644 fe/src/docs/pages/scroll-area.vue create mode 100644 fe/src/docs/pages/select.vue create mode 100644 fe/src/docs/pages/sheet.vue create mode 100644 fe/src/docs/pages/slider.vue create mode 100644 fe/src/docs/pages/slot.vue create mode 100644 fe/src/docs/pages/switch.vue create mode 100644 fe/src/docs/pages/table.vue create mode 100644 fe/src/docs/pages/tabs.vue create mode 100644 fe/src/docs/pages/textarea.vue create mode 100644 fe/src/docs/pages/toast.vue create mode 100644 fe/src/docs/pages/tooltip.vue create mode 100644 fe/src/index.css create mode 100644 fe/src/main.ts create mode 100644 fe/src/main/side-menu.ts create mode 100644 fe/src/modules/auth/index.ts create mode 100644 fe/src/modules/auth/menu.ts create mode 100644 fe/src/modules/auth/pages/AccountPending.vue create mode 100644 fe/src/modules/auth/pages/Login.vue create mode 100644 fe/src/modules/auth/pages/PrivacyPolicy.vue create mode 100644 fe/src/modules/auth/pages/Register.vue create mode 100644 fe/src/modules/auth/pages/TermsConditions.vue create mode 100644 fe/src/modules/auth/pages/VerifyEmail.vue create mode 100644 fe/src/modules/auth/routes.ts create mode 100644 fe/src/modules/auth/services/auth.service.ts create mode 100644 fe/src/modules/auth/types/auth.types.ts create mode 100644 fe/src/modules/profile/index.ts create mode 100644 fe/src/modules/profile/menu.ts create mode 100644 fe/src/modules/profile/pages/ChangePassword.vue create mode 100644 fe/src/modules/profile/pages/ProfileOverview2.vue create mode 100644 fe/src/modules/profile/pages/UpdateProfile.vue create mode 100644 fe/src/modules/profile/routes.ts create mode 100644 fe/src/modules/profile/services/profile.service.ts create mode 100644 fe/src/modules/profile/types/profile.types.ts create mode 100644 fe/src/modules/user/composables/useImpersonate.ts create mode 100644 fe/src/modules/user/composables/useUserList.ts create mode 100644 fe/src/modules/user/index.ts create mode 100644 fe/src/modules/user/menu.ts create mode 100644 fe/src/modules/user/pages/UserList.vue create mode 100644 fe/src/modules/user/routes.ts create mode 100644 fe/src/modules/user/services/impersonate.service.ts create mode 100644 fe/src/modules/user/services/user.service.ts create mode 100644 fe/src/modules/user/types/impersonate.types.ts create mode 100644 fe/src/modules/user/types/user.types.ts create mode 100644 fe/src/pinia.ts create mode 100644 fe/src/router/index.ts create mode 100644 fe/src/stores/auth.ts create mode 100644 fe/src/stores/color-scheme.ts create mode 100644 fe/src/stores/dark-mode.ts create mode 100644 fe/src/stores/theme.ts create mode 100644 fe/src/themes/Enigma/SideMenu/SideMenu.vue create mode 100644 fe/src/themes/Enigma/SideMenu/index.ts create mode 100644 fe/src/themes/Layout.vue create mode 100644 fe/src/themes/index.ts create mode 100644 fe/src/utils/cn.ts create mode 100644 fe/src/utils/faker.ts create mode 100644 fe/src/utils/frame.ts create mode 100644 fe/src/utils/helper.ts create mode 100644 fe/src/views/AddProduct.vue create mode 100644 fe/src/views/BlogLayout1.vue create mode 100644 fe/src/views/BlogLayout2.vue create mode 100644 fe/src/views/BlogLayout3.vue create mode 100644 fe/src/views/Categories.vue create mode 100644 fe/src/views/Chat.vue create mode 100644 fe/src/views/CrudDataList.vue create mode 100644 fe/src/views/CrudForm.vue create mode 100644 fe/src/views/DashboardOverview1.vue create mode 100644 fe/src/views/ErrorPage.vue create mode 100644 fe/src/views/FaqLayout1.vue create mode 100644 fe/src/views/FaqLayout2.vue create mode 100644 fe/src/views/FaqLayout3.vue create mode 100644 fe/src/views/FileManager.vue create mode 100644 fe/src/views/Inbox.vue create mode 100644 fe/src/views/InvoiceLayout1.vue create mode 100644 fe/src/views/InvoiceLayout2.vue create mode 100644 fe/src/views/PointOfSale.vue create mode 100644 fe/src/views/Post.vue create mode 100644 fe/src/views/PricingLayout1.vue create mode 100644 fe/src/views/PricingLayout2.vue create mode 100644 fe/src/views/ProductGrid.vue create mode 100644 fe/src/views/ProductList.vue create mode 100644 fe/src/views/Reviews.vue create mode 100644 fe/src/views/SellerDetail.vue create mode 100644 fe/src/views/SellerList.vue create mode 100644 fe/src/views/TransactionDetail.vue create mode 100644 fe/src/views/TransactionList.vue create mode 100644 fe/src/views/UsersLayout1.vue create mode 100644 fe/src/views/UsersLayout2.vue create mode 100644 fe/src/views/UsersLayout3.vue create mode 100644 fe/src/views/WizardLayout1.vue create mode 100644 fe/src/views/WizardLayout2.vue create mode 100644 fe/src/views/WizardLayout3.vue create mode 100644 fe/tsconfig.app.json create mode 100644 fe/tsconfig.json create mode 100644 fe/tsconfig.node.json create mode 100644 fe/tsconfig.vitest.json create mode 100644 fe/vite.config.ts create mode 100644 fe/vitest.config.ts create mode 100644 my-kopkb.code-workspace diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e3cfa5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Ignore everything +/* + +# But keep these folders +!/be/ +!/fe/ +!/SUTERA-server-credential.txt/ +!/TODO.md +!/README.md +!/redis-config +!/.gitea +!/my-kopkb.code-workspace +!/docs + +# Also keep .gitignore itself +!.gitignore diff --git a/README.md b/README.md new file mode 100644 index 0000000..5cecd01 --- /dev/null +++ b/README.md @@ -0,0 +1,142 @@ +# SUTERA 3.0 – Guide + +Welcome to **SUTERA 3.0**, the streamlined training deployment setup using **Docker**, **Laravel**, and **Vite**. + +--- + +## 🔐 Login Credentials + +> Use the following to log into the system: + +- **Email**: `isml.msrn11@gmail.com` +- **Password**: `TOPAZTHEGOAT` + +--- + +## Formula Used: +1. KEUPAYAAN (%) = (PEGANGAN/PERJAWATAN) * 100 +2. SIAPSIAGA or KESIAGAAN (%) = (BDG/perjawatan) * 100 +3. SERVISIBILITI (%) = (BDG/pegangan) * 100 + +## Laravel command to clear +```bash +sail artisan config:clear +sail artisan cache:clear +sail artisan permission:cache-reset +``` + +--- + +# 🎯 Addtional Notes to consider +- Make sure `/var/www/public/build` exists inside your PHP-FPM container (handled by Dockerfile). +- Assets are built via Vite in the **Node.js stage** and injected into the Laravel `public/` directory. +- Use `entrypoint.sh` for Laravel setup like `php artisan migrate` or `storage:link` if needed. +- 'DEVELOPER' roles can bypassed all permissions by default and cannot be deleted even through database +- Use delete in controller not directly in routes because no authorization and validation +- Use Gate for non-model-specific permissions. general-purpose or simple logic, +- Use policy when need structured authorization for CRUD operations. anything tied to a model/resource +- Servisibility always higher than siapsiaga +- Solution — put specific routes first before resource routes +- to use soft delete, make id and deleted_at as unique +- to make new module, run: +```bash +sail artisan module:make Example +``` +- There are two User model files + +## PKJ Default Varian (DO NOT DELETE) or update. If require update, be sure to update the export name for each PKJ report: +- BANTUAN MOBILITI +- BEKALAN AIR +- EOD/IED/PEMUSNAHAN +- JURUUKUR +- KENDERAAN JENIS A +- KENDERAAN JENIS B +- OPTRONIK DAN PERALATAN LATIHAN +- PELURU DAN BAHAN LETUPAN +- PEMUSNAHAN +- PERALATAN KETUKANGAN +- PERALATAN KOMUNIKASI PERTAHANAN +- PERALATAN PD&P +- PERALATAN PERAIRAN +- PERALATAN PNBK +- SENJATA PERTAHANAN + + +```sql +--- KJC TO UPDATE PEGANGAN IN PERJAWATAN TABLE; CHECK WILL BE UPDATED FIRST +SELECT + ae.id, + ae.entitlement, + ae.holding AS current_holding, + ( + SELECT COUNT(*) + FROM kjc_asset_holdings ah + WHERE ah.kjc_category_id = ae.kjc_category_id + AND ah.kjc_category_id = ae.kjc_category_id + AND ah.unit_id = ae.unit_id + AND ah.deleted_at IS NULL + ) AS actual_holding_count +FROM kjc_asset_entitlements ae +WHERE ae.deleted_at IS NULL; + +--- EXECUTE IT +UPDATE kjc_asset_entitlements ae +SET ae.holding = ( + SELECT COUNT(*) + FROM kjc_asset_holdings ah + WHERE ah.kjc_category_id = ae.kjc_category_id + AND ah.kjc_category_id = ae.kjc_category_id + AND ah.unit_id = ae.unit_id + AND ah.deleted_at IS NULL +) +WHERE ae.deleted_at IS NULL; +``` + +## Run specific laravel migration: +- If it is fresh, then run: +```bash +sail artisan migrate --path=database/migrations/2025_07_30_044653_create_historical_pkj_perjawatan_table.php +``` + +- If not, rollback first: +```bash +sail artisan migrate:rollback --step=1 + +sail artisan migrate --path=database/migrations/2025_07_30_044708_create_historical_pkj_pegangan_status_table.php +``` + +## To remove data in postgres and restart numbering +```bash +TRUNCATE TABLE kjc_spare_parts RESTART IDENTITY; +``` + +## Reset query numbering +```sql +SELECT pg_get_serial_sequence('"permissions"', 'id') AS seq_name; +SELECT last_value FROM public.permissions_id_seq; +SELECT setval('public.permissions_id_seq', COALESCE((SELECT MAX(id) FROM permissions), 0) + 1, false); +``` + +## Run capture data command +```bash +# kjc +sail artisan kjc:historical:trigger + +# pkj +sail artisan pkj:historical:trigger +``` + +## Auto-generate weekly KJC report (Jabatan Arah RAJD) - Scheduled to run every Monday at 3:00 AM. +```bash +# Manual trigger +sail artisan kjc:auto-generate-weekly-report "Jabatan Arah RAJD" + +# Force regenerate even if reports exist +sail artisan kjc:auto-generate-weekly-report "Jabatan Arah RAJD" --force +``` + +# Git +## DO NOT RUN THIS BECAUSE IT WILL REMOVE ALL THE UNTAGGED FILES IN LOCAL +```bash +git reset --hard development # moves the current branch (e.g., main) to point exactly where development +``` \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..9069e57 --- /dev/null +++ b/TODO.md @@ -0,0 +1,15 @@ +## Fix + +## Bug + +## Improvement +[ ] mesyuarat anggota tertinggi +[ ] penyata anggota +[ ] daftar anggota +[ ] baki pinjaman - transaction history: tarik dari ubs +[ ] pembiayaan anggota +[ ] sumbangan +[ ] wasi/penama +[ ] pendaftaran anggota/meneruskan anggota/pencen +[ ] daftar lembaga (backdated) +[ ] boleh print semua borang \ No newline at end of file diff --git a/be/.dockerignore b/be/.dockerignore new file mode 100644 index 0000000..bd7e2f9 --- /dev/null +++ b/be/.dockerignore @@ -0,0 +1,25 @@ +/public/build +/public/hot +/public/storage +/docker_images +/docker-images +/.vscode +.env +NOTE.md +/node_modules +/vendor +.git +.gitignore +/bootstrap/cache +/supporting_documents +/docs +TODO.md +.DS_Store +.idea +deploy-production.sh +deploy.sh +deploy-staging.sh +deploy-training.sh +build.sh +TODO.md +README.md \ No newline at end of file diff --git a/be/.editorconfig b/be/.editorconfig new file mode 100644 index 0000000..8f0de65 --- /dev/null +++ b/be/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/be/.env.development b/be/.env.development new file mode 100644 index 0000000..b5c5094 --- /dev/null +++ b/be/.env.development @@ -0,0 +1,98 @@ +APP_NAME="SUTERA 3.0 Dev" +APP_ENV=local +APP_KEY=base64:0dM5HYEFRu9P6ni51QTUZm5mQ23znc/s/aebLTRUGxU= +APP_DEBUG=true +APP_TIMEZONE=Asia/Kuala_Lumpur +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +APP_MAINTENANCE_STORE=database + +PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=pgsql +DB_HOST=pgsql +DB_PORT=5432 +DB_DATABASE=sutera +DB_USERNAME=suterauser +DB_PASSWORD=password + +SESSION_DRIVER=redis +SESSION_LIFETIME=60 +SESSION_ENCRYPT=true +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=redis +CACHE_PREFIX=sutera_cache + +MEMCACHED_HOST=memcached + +REDIS_CLIENT=phpredis +REDIS_HOST=redis +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_SCHEME=null +MAIL_HOST=mailpit +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" +# VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +# VITE_PUSHER_HOST="${PUSHER_HOST}" +# VITE_PUSHER_PORT="${PUSHER_PORT}" +# VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +# VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +EXTERNAL_API_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWJzcC1yZXNvdXJjZUlkIl0sInRpbWVvdXRQZXJpb2QiOjkwMCwidXNlcl9uYW1lIjoic3BhLXVzZXIiLCJzY29wZSI6WyJyZWFkIiwid3JpdGUiXSwiZXhwIjoxNzI4NTgzNjEyLCJqdGkiOiJjMmU2OTkxOS0yZDU3LTQ5YmYtYTVmZS1lZjVmMzIyNDZkZDIiLCJjbGllbnRfaWQiOiJzcGEtY2xpZW50In0.LE2byaRzsYkchzI4ox9Gz2u6jNmTqZQa-_ttR2PY8e8" +EXTERNAL_API_BASE_URL=http://20.11.32.134/rest/td/gasset/asset + +SSO_SECRET="Y6g#Rb@Km=Nz]o^X+fEC~ 'ActivityLog', +]; diff --git a/be/Modules/ActivityLog/Console/.gitkeep b/be/Modules/ActivityLog/Console/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Database/Factories/.gitkeep b/be/Modules/ActivityLog/Database/Factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Database/Migrations/.gitkeep b/be/Modules/ActivityLog/Database/Migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Database/Seeders/.gitkeep b/be/Modules/ActivityLog/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Database/Seeders/ActivityLogDatabaseSeeder.php b/be/Modules/ActivityLog/Database/Seeders/ActivityLogDatabaseSeeder.php new file mode 100644 index 0000000..8442f29 --- /dev/null +++ b/be/Modules/ActivityLog/Database/Seeders/ActivityLogDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/be/Modules/ActivityLog/Emails/.gitkeep b/be/Modules/ActivityLog/Emails/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Entities/.gitkeep b/be/Modules/ActivityLog/Entities/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Helpers/.gitkeep b/be/Modules/ActivityLog/Helpers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Http/Controllers/.gitkeep b/be/Modules/ActivityLog/Http/Controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Http/Controllers/ActivityLogController.php b/be/Modules/ActivityLog/Http/Controllers/ActivityLogController.php new file mode 100644 index 0000000..0a1e8d7 --- /dev/null +++ b/be/Modules/ActivityLog/Http/Controllers/ActivityLogController.php @@ -0,0 +1,97 @@ +get('per_page', 10); + $perPage = min($perPage, 1000); // Limit max per page to 100 + $search = trim((string) $request->get('search', '')); + + $query = Activity::latest()->with(['causer']); + + if (! empty($search)) { + $query->where(function ($q) use ($search) { + $q->where('description', 'ILIKE', "%{$search}%") + ->orWhere('subject_type', 'ILIKE', "%{$search}%") + ->orWhere('event', 'ILIKE', "%{$search}%") + ->orWhere('causer.name', 'ILIKE', "%{$search}%") + ->orWhere('causer.email', 'ILIKE', "%{$search}%"); + }); + } + + $activities = $query->paginate($perPage); + + return response()->json([ + 'success' => true, + 'data' => $activities->items(), + 'pagination' => [ + 'current_page' => $activities->currentPage(), + 'per_page' => $activities->perPage(), + 'total' => $activities->total(), + 'last_page' => $activities->lastPage(), + 'from' => $activities->firstItem(), + 'to' => $activities->lastItem(), + 'has_more_pages' => $activities->hasMorePages(), + 'links' => [ + 'first' => $activities->appends(request()->query())->url(1), + 'last' => $activities->appends(request()->query())->url($activities->lastPage()), + 'prev' => $activities->appends(request()->query())->previousPageUrl(), + 'next' => $activities->appends(request()->query())->nextPageUrl(), + ] + ], + 'message' => 'Activity logs retrieved successfully', + ]); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('activitylog::create'); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) {} + + /** + * Show the specified resource. + */ + public function show($id) + { + return view('activitylog::show'); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + return view('activitylog::edit'); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id) {} + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) {} +} diff --git a/be/Modules/ActivityLog/Http/Requests/.gitkeep b/be/Modules/ActivityLog/Http/Requests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Jobs/.gitkeep b/be/Modules/ActivityLog/Jobs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Notifications/.gitkeep b/be/Modules/ActivityLog/Notifications/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Policies/.gitkeep b/be/Modules/ActivityLog/Policies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Policies/ActivityLogPolicy.php b/be/Modules/ActivityLog/Policies/ActivityLogPolicy.php new file mode 100644 index 0000000..9219913 --- /dev/null +++ b/be/Modules/ActivityLog/Policies/ActivityLogPolicy.php @@ -0,0 +1,27 @@ +hasPermissionTo('lihat log aktiviti'); + } + + /** + * Determine whether the user can view the model. + */ + public function view($user, ?Activity $activity = null): bool + { + return $user->hasPermissionTo('lihat log aktiviti'); + } +} diff --git a/be/Modules/ActivityLog/Providers/.gitkeep b/be/Modules/ActivityLog/Providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Providers/ActivityLogServiceProvider.php b/be/Modules/ActivityLog/Providers/ActivityLogServiceProvider.php new file mode 100644 index 0000000..d1fad58 --- /dev/null +++ b/be/Modules/ActivityLog/Providers/ActivityLogServiceProvider.php @@ -0,0 +1,154 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'Database/Migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'Lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'Lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, 'Resources/Views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\' . $this->name . '\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } +} diff --git a/be/Modules/ActivityLog/Providers/EventServiceProvider.php b/be/Modules/ActivityLog/Providers/EventServiceProvider.php new file mode 100644 index 0000000..ec60530 --- /dev/null +++ b/be/Modules/ActivityLog/Providers/EventServiceProvider.php @@ -0,0 +1,27 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/Modules/ActivityLog/Providers/RouteServiceProvider.php b/be/Modules/ActivityLog/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..8bda2e9 --- /dev/null +++ b/be/Modules/ActivityLog/Providers/RouteServiceProvider.php @@ -0,0 +1,49 @@ +mapApiRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '/Routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->name('api.')->group(module_path($this->name, '/Routes/api.php')); + } +} diff --git a/be/Modules/ActivityLog/Repositories/.gitkeep b/be/Modules/ActivityLog/Repositories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Repositories/Contracts/.gitkeep b/be/Modules/ActivityLog/Repositories/Contracts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Routes/.gitkeep b/be/Modules/ActivityLog/Routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Routes/api.php b/be/Modules/ActivityLog/Routes/api.php new file mode 100644 index 0000000..77ae656 --- /dev/null +++ b/be/Modules/ActivityLog/Routes/api.php @@ -0,0 +1,8 @@ +prefix('v1')->group(function () { + Route::apiResource('activitylogs', ActivityLogController::class)->names('activitylog'); +}); diff --git a/be/Modules/ActivityLog/Services/.gitkeep b/be/Modules/ActivityLog/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Tests/Feature/.gitkeep b/be/Modules/ActivityLog/Tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Tests/Unit/.gitkeep b/be/Modules/ActivityLog/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/Transformers/.gitkeep b/be/Modules/ActivityLog/Transformers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/ActivityLog/composer.json b/be/Modules/ActivityLog/composer.json new file mode 100644 index 0000000..a48c0ee --- /dev/null +++ b/be/Modules/ActivityLog/composer.json @@ -0,0 +1,30 @@ +{ + "name": "nwidart/activitylog", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\ActivityLog\\": "App", + "Modules\\ActivityLog\\Database\\Factories\\": "database/factories/", + "Modules\\ActivityLog\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\ActivityLog\\Tests\\": "tests/" + } + } +} diff --git a/be/Modules/ActivityLog/module.json b/be/Modules/ActivityLog/module.json new file mode 100644 index 0000000..8896020 --- /dev/null +++ b/be/Modules/ActivityLog/module.json @@ -0,0 +1,11 @@ +{ + "name": "ActivityLog", + "alias": "activitylog", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\ActivityLog\\Providers\\ActivityLogServiceProvider" + ], + "files": [] +} diff --git a/be/Modules/ActivityLog/package.json b/be/Modules/ActivityLog/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/be/Modules/ActivityLog/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/be/Modules/Auth/Actions/Fortify/CreateNewUser.php b/be/Modules/Auth/Actions/Fortify/CreateNewUser.php new file mode 100644 index 0000000..932ce8e --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/CreateNewUser.php @@ -0,0 +1,91 @@ + $input + */ + public function create(array $input): User + { + Validator::make($input, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => [ + 'required', + 'string', + 'email', + 'max:255', + Rule::unique(User::class), + ], + 'ic_number' => ['required', 'string', 'max:255'], + 'password' => ['required', 'string', 'min:8'], + ])->validate(); + + $user = User::create([ + 'name' => $input['name'], + 'uuid' => Str::uuid(), + 'email' => $input['email'], + 'password' => Hash::make($input['password']), + 'ic_number' => $input['ic_number'], + 'status' => 'pending', + ]); + + // Assign role using Spatie permissions + $role = Role::where('name', 'Anggota')->first(); + if ($role) { + $user->assignRole($role); + } + + app(EmailVerificationOtpService::class)->send($user); + + // Send notification to admins if user requires activation + if ($user->status === 'pending') { + $this->notifyAdminsForActivation($user); + } + + return $user; + } + + /** + * Notify admins about new user requiring activation + */ + private function notifyAdminsForActivation(User $newUser): void + { + try { + $adminRoles = ['PENTADBIR', 'PS 2 KJC', 'PS 2 ALAT']; + + // Get users with specific roles plus admins (PENTADBIR and DEVELOPER) + $adminUsers = $this->getUsersWithRolesAndAdmins($adminRoles); + + $sender = auth()->user() ?? $newUser; // Use current user as sender, or new user if no auth + + foreach ($adminUsers as $admin) { + try { + $admin->notify(new UserActivationNotification($newUser, $sender)); + } catch (Exception $e) { + Log::error('Failed to send user activation notification: '.$e->getMessage()); + } + } + } catch (Exception $e) { + Log::error('Failed to notify admins for user activation: '.$e->getMessage()); + } + } +} diff --git a/be/Modules/Auth/Actions/Fortify/LoginResponse.php b/be/Modules/Auth/Actions/Fortify/LoginResponse.php new file mode 100644 index 0000000..5226f5a --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/LoginResponse.php @@ -0,0 +1,42 @@ +user(); + + if (! $user->hasVerifiedEmail()) { + $this->otpService->send($user); + + Auth::guard(config('fortify.guard'))->logout(); + + return response()->json([ + 'success' => true, + 'message' => 'Sila semak e-mel anda untuk kod pengesahan 6 digit.', + 'data' => [ + 'email' => $user->email, + 'requires_email_verification' => true, + ], + ]); + } + + return $this->authSession->createAuthResponse( + $user, + 'Login successful' + ); + } +} diff --git a/be/Modules/Auth/Actions/Fortify/LogoutResponse.php b/be/Modules/Auth/Actions/Fortify/LogoutResponse.php new file mode 100644 index 0000000..037bec3 --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/LogoutResponse.php @@ -0,0 +1,39 @@ +cookie(AuthCookie::originalUserCookieName())) { + return response()->json([ + 'success' => false, + 'message' => 'Sila tamatkan penyamaran sebelum log keluar.', + ], 400); + } + + $user = $request->user(); + + if ($user) { + // Delete all tokens for this user to ensure clean logout + $user->tokens()->delete(); + } + + $response = response()->json([ + 'success' => true, + 'message' => 'Logout successful', + ], 200); + + return AuthCookie::clearAuthCookies($response); + } +} diff --git a/be/Modules/Auth/Actions/Fortify/PasswordValidationRules.php b/be/Modules/Auth/Actions/Fortify/PasswordValidationRules.php new file mode 100644 index 0000000..5285251 --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/PasswordValidationRules.php @@ -0,0 +1,18 @@ +|string> + */ + protected function passwordRules(): array + { + return ['required', 'string', Password::default(), 'confirmed']; + } +} diff --git a/be/Modules/Auth/Actions/Fortify/RegisterResponse.php b/be/Modules/Auth/Actions/Fortify/RegisterResponse.php new file mode 100644 index 0000000..c3d2487 --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/RegisterResponse.php @@ -0,0 +1,26 @@ +user()?->email; + + Auth::guard(config('fortify.guard'))->logout(); + + return response()->json([ + 'success' => true, + 'message' => 'Pendaftaran berjaya. Sila semak e-mel anda untuk kod pengesahan 6 digit.', + 'data' => [ + 'email' => $email, + 'requires_email_verification' => true, + ], + ], 201); + } +} diff --git a/be/Modules/Auth/Actions/Fortify/ResetUserPassword.php b/be/Modules/Auth/Actions/Fortify/ResetUserPassword.php new file mode 100644 index 0000000..7b5f22f --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/ResetUserPassword.php @@ -0,0 +1,29 @@ + $input + */ + public function reset(User $user, array $input): void + { + Validator::make($input, [ + 'password' => $this->passwordRules(), + ])->validate(); + + $user->forceFill([ + 'password' => Hash::make($input['password']), + ])->save(); + } +} diff --git a/be/Modules/Auth/Actions/Fortify/UpdateUserPassword.php b/be/Modules/Auth/Actions/Fortify/UpdateUserPassword.php new file mode 100644 index 0000000..0ba6688 --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/UpdateUserPassword.php @@ -0,0 +1,32 @@ + $input + */ + public function update(User $user, array $input): void + { + Validator::make($input, [ + // 'current_password' => ['required', 'string', 'current_password:web'], + 'password' => $this->passwordRules(), + ], [ + // 'current_password.current_password' => __('The provided password does not match your current password.'), + ])->validateWithBag('updatePassword'); + + $user->forceFill([ + 'password' => Hash::make($input['password']), + ])->save(); + } +} diff --git a/be/Modules/Auth/Actions/Fortify/UpdateUserProfileInformation.php b/be/Modules/Auth/Actions/Fortify/UpdateUserProfileInformation.php new file mode 100644 index 0000000..2d5caa0 --- /dev/null +++ b/be/Modules/Auth/Actions/Fortify/UpdateUserProfileInformation.php @@ -0,0 +1,58 @@ + $input + */ + public function update(User $user, array $input): void + { + Validator::make($input, [ + 'name' => ['required', 'string', 'max:255'], + + 'email' => [ + 'required', + 'string', + 'email', + 'max:255', + Rule::unique('users')->ignore($user->id), + ], + ])->validateWithBag('updateProfileInformation'); + + if ($input['email'] !== $user->email && + $user instanceof MustVerifyEmail) { + $this->updateVerifiedUser($user, $input); + } else { + $user->forceFill([ + 'name' => $input['name'], + 'email' => $input['email'], + ])->save(); + } + } + + /** + * Update the given verified user's profile information. + * + * @param array $input + */ + protected function updateVerifiedUser(User $user, array $input): void + { + $user->forceFill([ + 'name' => $input['name'], + 'email' => $input['email'], + 'email_verified_at' => null, + ])->save(); + + $user->sendEmailVerificationNotification(); + } +} diff --git a/be/Modules/Auth/Config/.gitkeep b/be/Modules/Auth/Config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Config/config.php b/be/Modules/Auth/Config/config.php new file mode 100644 index 0000000..cba1be8 --- /dev/null +++ b/be/Modules/Auth/Config/config.php @@ -0,0 +1,5 @@ + 'Auth', +]; diff --git a/be/Modules/Auth/Console/.gitkeep b/be/Modules/Auth/Console/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Database/Factories/.gitkeep b/be/Modules/Auth/Database/Factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Database/Migrations/.gitkeep b/be/Modules/Auth/Database/Migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Database/Seeders/.gitkeep b/be/Modules/Auth/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Database/Seeders/AuthDatabaseSeeder.php b/be/Modules/Auth/Database/Seeders/AuthDatabaseSeeder.php new file mode 100644 index 0000000..7a22932 --- /dev/null +++ b/be/Modules/Auth/Database/Seeders/AuthDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/be/Modules/Auth/Emails/.gitkeep b/be/Modules/Auth/Emails/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Emails/EmailVerificationOtpEmail.php b/be/Modules/Auth/Emails/EmailVerificationOtpEmail.php new file mode 100644 index 0000000..3dcb338 --- /dev/null +++ b/be/Modules/Auth/Emails/EmailVerificationOtpEmail.php @@ -0,0 +1,35 @@ +subject('Pengesahan E-mel - Kod OTP') + ->markdown('auth::emails.verification-otp', [ + 'name' => $notifiable->name, + 'otp' => $this->otp, + 'minutes' => $minutes, + 'logoPath' => public_path('images/logo-kopkb.svg'), + ]); + } +} diff --git a/be/Modules/Auth/Entities/EmailVerificationOtp.php b/be/Modules/Auth/Entities/EmailVerificationOtp.php new file mode 100644 index 0000000..62d4780 --- /dev/null +++ b/be/Modules/Auth/Entities/EmailVerificationOtp.php @@ -0,0 +1,44 @@ + 'datetime', + 'attempts' => 'integer', + ]; + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function isExpired(): bool + { + return $this->expires_at->isPast(); + } + + public function hasExceededMaxAttempts(): bool + { + return $this->attempts >= (int) config('auth.email_verification.max_attempts', 5); + } +} diff --git a/be/Modules/Auth/Entities/User.php b/be/Modules/Auth/Entities/User.php new file mode 100644 index 0000000..28ff4c1 --- /dev/null +++ b/be/Modules/Auth/Entities/User.php @@ -0,0 +1,252 @@ + */ + use HasApiTokens, HasFactory, HasPermissions, HasRoles, HasUuids, Impersonate, LogsActivity, Notifiable, SoftDeletes, HasVisibility; + + protected $table = 'users'; + + /** + * The attributes that are mass assignable. + * + * @var list + */ + protected $fillable = [ + 'name', + 'email', + 'password', + 'ic_number', + 'position', + 'phone_number', + 'image_url', + 'status', + 'two_factor_secret', + 'two_factor_recovery_codes', + 'two_factor_confirmed_at', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var list + */ + protected $hidden = [ + 'password', + 'remember_token', + 'two_factor_secret', + 'two_factor_recovery_codes', + 'two_factor_confirmed_at', + ]; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + 'status' => 'string', + ]; + } + + + /** + * Role used for permission checks in the current session (Sanctum token). + */ + public function activeRole(): ?Role + { + return ActiveRoleService::getActiveRole($this); + } + + public function hasPermissionAction($action): bool + { + $role = $this->activeRole(); + + return $role && $role->permission_actions && + in_array($action, $role->permission_actions, true); + } + + public function getActivityLogOptions(): LogOptions + { + return LogOptions::defaults() + ->logAll() + ->logOnlyDirty() + ->dontSubmitEmptyLogs() + ->setDescriptionForEvent(fn (string $eventName) => "User {$this->name} was {$eventName}"); + } + + /** + * Override hasPermissionTo to bypass all permission checks for DEVELOPER role + */ + public function hasPermissionTo($permission, $guardName = null): bool + { + $activeRole = $this->activeRole(); + + if ($activeRole?->name === 'DEVELOPER') { + return true; + } + + static $isCheckingPermission = false; + + if ($isCheckingPermission) { + return false; + } + + $isCheckingPermission = true; + + try { + $permissionClass = app(PermissionRegistrar::class)->getPermissionClass(); + + if (is_string($permission)) { + $permission = $permissionClass::findByName($permission, $guardName ?? 'api'); + } + + if (is_int($permission)) { + $permission = $permissionClass::findById($permission, $guardName ?? 'api'); + } + + if (! $permission instanceof Permission) { + return false; + } + + if ($this->permissions->contains('id', $permission->id)) { + return true; + } + + if (! $activeRole) { + return false; + } + + $activeRole->loadMissing('permissions'); + + return $activeRole->permissions->contains('id', $permission->id); + } catch (\Exception $e) { + return false; + } finally { + $isCheckingPermission = false; + } + } + + /** + * Scope to exclude current user unless they have developer role + */ + public function scopeExcludeCurrentUserUnlessDeveloper($query, $currentUser = null) + { + $currentUser = $currentUser ?? auth()->user(); + + if ($currentUser && ! $currentUser->hasRole('DEVELOPER')) { + return $query->where('id', '!=', $currentUser->id); + } + + return $query; + } + + /** + * Scope to exclude users with DEVELOPER role unless current user is DEVELOPER + */ + public function scopeExcludeDevelopersUnlessDeveloper($query, $currentUser = null) + { + $currentUser = $currentUser ?? auth()->user(); + + if ($currentUser && ! $currentUser->hasRole('DEVELOPER')) { + return $query->whereDoesntHave('roles', function ($q) { + $q->where('name', 'DEVELOPER'); + }); + } + + return $query; + } + + /** + * Check if the user can impersonate another user + */ + public function canImpersonate(): bool + { + // Check permission instead of hardcoded roles + return $this->hasPermissionTo('menyamar pengguna'); + } + + /** + * Check if the user can be impersonated + */ + public function canBeImpersonated(): bool + { + // DEVELOPER cannot be impersonated by anyone + if ($this->hasRole('DEVELOPER')) { + return false; + } + + // Check if the current user has permission to impersonate + $currentUser = auth()->user(); + if (!$currentUser) { + return false; + } + + // Users with permission can impersonate other users (except DEVELOPER) + return $currentUser->hasPermissionTo('menyamar pengguna'); + } + + public function hasVerifiedEmail(): bool + { + return $this->email_verified_at !== null; + } + + /** + * Check if user can login based on their status + */ + public function canLogin(): bool + { + return $this->status === 'active'; + } + + /** + * Whether credentials are valid for issuing a session (includes verified pending users). + */ + public function canAuthenticate(): bool + { + if ($this->canLogin()) { + return true; + } + + return $this->hasVerifiedEmail() && $this->status === 'pending'; + } + + /** + * Get the login restriction message based on user status + */ + public function getLoginRestrictionMessage(): ?string + { + switch ($this->status) { + case 'pending': + return 'Akaun anda sedang menunggu pengaktifan dari pentadbir sistem. Sila hubungi pentadbir sistem.'; + case 'inactive': + return 'Akaun anda tidak aktif. Sila hubungi pentadbir sistem.'; + default: + return 'Akaun anda tidak dapat mengakses sistem. Sila hubungi pentadbir sistem.'; + } + } +} diff --git a/be/Modules/Auth/Helpers/.gitkeep b/be/Modules/Auth/Helpers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Http/Controllers/EmailVerificationController.php b/be/Modules/Auth/Http/Controllers/EmailVerificationController.php new file mode 100644 index 0000000..ead22a3 --- /dev/null +++ b/be/Modules/Auth/Http/Controllers/EmailVerificationController.php @@ -0,0 +1,62 @@ +validate([ + 'email' => ['required', 'string', 'email'], + 'otp' => ['required', 'string', 'digits:6'], + ]); + + $user = User::where('email', $validated['email'])->first(); + + if (! $user) { + return response()->json([ + 'success' => false, + 'message' => 'Kod OTP tidak sah.', + ], 422); + } + + $this->otpService->verify($user, $validated['otp']); + + $user->refresh(); + + return $this->authSession->createAuthResponse( + $user, + 'E-mel anda telah berjaya disahkan. Akaun anda sedang menunggu pengaktifan daripada pentadbir sistem.' + ); + } + + public function resend(Request $request): JsonResponse + { + $validated = $request->validate([ + 'email' => ['required', 'string', 'email'], + ]); + + $user = User::where('email', $validated['email'])->first(); + + if ($user && ! $user->hasVerifiedEmail()) { + $this->otpService->send($user); + } + + return response()->json([ + 'success' => true, + 'message' => 'Jika e-mel wujud dan belum disahkan, kod OTP baharu telah dihantar.', + ]); + } +} diff --git a/be/Modules/Auth/Http/Controllers/SessionController.php b/be/Modules/Auth/Http/Controllers/SessionController.php new file mode 100644 index 0000000..34a0652 --- /dev/null +++ b/be/Modules/Auth/Http/Controllers/SessionController.php @@ -0,0 +1,66 @@ +user(); + + if (! $user) { + return response()->json([ + 'success' => false, + 'message' => 'Unauthenticated', + ], 401); + } + + $user->load(['roles.permissions']); + + return response()->json([ + 'success' => true, + 'data' => new UserResource($user), + ...ActiveRoleService::sessionMeta($user), + ]); + } + + /** + * Switch active role for the current session token. + */ + public function switchRole(Request $request): JsonResponse + { + $validated = $request->validate([ + 'role_id' => ['required', 'uuid', 'exists:roles,id'], + ]); + + $user = $request->user(); + $user->load(['roles.permissions']); + + $role = ActiveRoleService::switchRole($user, $validated['role_id']); + + if (! $role) { + return response()->json([ + 'success' => false, + 'message' => 'Peranan tidak ditetapkan untuk pengguna ini.', + ], 403); + } + + return response()->json([ + 'success' => true, + 'message' => 'Peranan aktif dikemas kini.', + 'data' => new UserResource($user), + 'active_role' => ActiveRoleService::formatRole($role), + 'can_switch_role' => $user->roles->count() > 1, + 'redirect_path' => ActiveRoleService::redirectPathForRole($role), + ]); + } +} diff --git a/be/Modules/Auth/Jobs/.gitkeep b/be/Modules/Auth/Jobs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Notifications/.gitkeep b/be/Modules/Auth/Notifications/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Policies/.gitkeep b/be/Modules/Auth/Policies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Providers/AuthServiceProvider.php b/be/Modules/Auth/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..7cce36f --- /dev/null +++ b/be/Modules/Auth/Providers/AuthServiceProvider.php @@ -0,0 +1,171 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'database/migrations')); + $this->registerFortify(); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, 'resources/views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\'.$this->name.'\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } + + /** + * Register Fortify actions. + */ + protected function registerFortify(): void + { + Fortify::createUsersUsing(CreateNewUser::class); + Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class); + Fortify::updateUserPasswordsUsing(UpdateUserPassword::class); + Fortify::resetUserPasswordsUsing(ResetUserPassword::class); + } +} diff --git a/be/Modules/Auth/Providers/EventServiceProvider.php b/be/Modules/Auth/Providers/EventServiceProvider.php new file mode 100644 index 0000000..f84daf6 --- /dev/null +++ b/be/Modules/Auth/Providers/EventServiceProvider.php @@ -0,0 +1,27 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/Modules/Auth/Providers/RouteServiceProvider.php b/be/Modules/Auth/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..fbd0f44 --- /dev/null +++ b/be/Modules/Auth/Providers/RouteServiceProvider.php @@ -0,0 +1,35 @@ +mapApiRoutes(); + } + + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->moduleNamespace) + ->group(module_path('Auth', '/Routes/web.php')); + } + + protected function mapApiRoutes() + { + Route::middleware('api') + ->namespace($this->moduleNamespace) + ->group(module_path('Auth', '/Routes/api.php')); + } +} diff --git a/be/Modules/Auth/Repositories/.gitkeep b/be/Modules/Auth/Repositories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Routes/.gitkeep b/be/Modules/Auth/Routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Routes/api.php b/be/Modules/Auth/Routes/api.php new file mode 100644 index 0000000..21d38a3 --- /dev/null +++ b/be/Modules/Auth/Routes/api.php @@ -0,0 +1,27 @@ +middleware('block.api.tools'); + +Route::post('/verify-email', [EmailVerificationController::class, 'verify']) + ->middleware('throttle:email-verification'); +Route::post('/verify-email/resend', [EmailVerificationController::class, 'resend']) + ->middleware('throttle:email-verification-resend'); + +Route::middleware(['auth:sanctum'])->prefix('v1')->group(function () { + // get current user + Route::get('/me', [SessionController::class, 'currentUser']); + + // switch active role + Route::post('/active-role/switch', [SessionController::class, 'switchRole']); + + // logout + Route::post('/logout', [AuthenticatedSessionController::class, 'destroy']); +}); \ No newline at end of file diff --git a/be/Modules/Auth/Services/.gitkeep b/be/Modules/Auth/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Services/AuthSessionService.php b/be/Modules/Auth/Services/AuthSessionService.php new file mode 100644 index 0000000..bca4178 --- /dev/null +++ b/be/Modules/Auth/Services/AuthSessionService.php @@ -0,0 +1,49 @@ +tokens()->delete(); + } + + $token = $user->createToken( + name: 'authToken', + abilities: ['*'], + expiresAt: now()->addMinutes((int) config('auth_cookie.lifetime_minutes', 720)) + ); + + $user->load(['roles.permissions']); + + ActiveRoleService::assignDefaultToToken($user, $token->accessToken); + + $payload = [ + 'success' => true, + 'message' => $message, + 'data' => [ + 'user' => new UserResource($user), + 'token' => $token->plainTextToken, + 'token_type' => 'Bearer', + 'expires_at' => $token->accessToken->expires_at, + ], + ...ActiveRoleService::sessionMeta($user), + ]; + + if (AuthCookie::shouldExposeTokenInResponse()) { + $payload['data']['token'] = $token->plainTextToken; + } + + $response = response()->json($payload, $status); + + return AuthCookie::attachAuthToken($response, $token->plainTextToken); + } +} diff --git a/be/Modules/Auth/Services/EmailVerificationOtpService.php b/be/Modules/Auth/Services/EmailVerificationOtpService.php new file mode 100644 index 0000000..ed823d7 --- /dev/null +++ b/be/Modules/Auth/Services/EmailVerificationOtpService.php @@ -0,0 +1,98 @@ +hasVerifiedEmail()) { + return; + } + + $otp = $this->generateOtp(); + + EmailVerificationOtp::query() + ->where('user_id', $user->id) + ->delete(); + + EmailVerificationOtp::create([ + 'user_id' => $user->id, + 'code' => Hash::make($otp), + 'expires_at' => now()->addMinutes($this->expiryMinutes()), + 'attempts' => 0, + ]); + + $user->notify(new EmailVerificationOtpEmail($otp)); + } + + public function verify(User $user, string $otp): void + { + if ($user->hasVerifiedEmail()) { + throw ValidationException::withMessages([ + 'email' => ['E-mel anda telah disahkan.'], + ]); + } + + $record = EmailVerificationOtp::query() + ->where('user_id', $user->id) + ->latest() + ->first(); + + if (! $record) { + throw ValidationException::withMessages([ + 'otp' => ['Kod OTP tidak dijumpai. Sila minta kod baharu.'], + ]); + } + + if ($record->isExpired()) { + $record->delete(); + + throw ValidationException::withMessages([ + 'otp' => ['Kod OTP telah tamat tempoh. Sila minta kod baharu.'], + ]); + } + + if ($record->hasExceededMaxAttempts()) { + $record->delete(); + + throw ValidationException::withMessages([ + 'otp' => ['Terlalu banyak percubaan. Sila minta kod baharu.'], + ]); + } + + if (! Hash::check($otp, $record->code)) { + $record->increment('attempts'); + + if ($record->fresh()->hasExceededMaxAttempts()) { + $record->delete(); + } + + throw ValidationException::withMessages([ + 'otp' => ['Kod OTP tidak sah.'], + ]); + } + + $user->forceFill(['email_verified_at' => now()])->save(); + + EmailVerificationOtp::query() + ->where('user_id', $user->id) + ->delete(); + } + + protected function generateOtp(): string + { + return str_pad((string) random_int(0, 999999), 6, '0', STR_PAD_LEFT); + } + + protected function expiryMinutes(): int + { + return (int) config('auth.email_verification.expiry_minutes', 10); + } +} diff --git a/be/Modules/Auth/Tests/Feature/.gitkeep b/be/Modules/Auth/Tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Tests/Unit/.gitkeep b/be/Modules/Auth/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Transformers/.gitkeep b/be/Modules/Auth/Transformers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Auth/Transformers/AuthResource.php b/be/Modules/Auth/Transformers/AuthResource.php new file mode 100644 index 0000000..579bac3 --- /dev/null +++ b/be/Modules/Auth/Transformers/AuthResource.php @@ -0,0 +1,22 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'user' => new UserResource($this->resource), + 'token' => $this->token ?? null, + ]; + } +} diff --git a/be/Modules/Auth/Transformers/SSOUserResource.php b/be/Modules/Auth/Transformers/SSOUserResource.php new file mode 100644 index 0000000..d26441c --- /dev/null +++ b/be/Modules/Auth/Transformers/SSOUserResource.php @@ -0,0 +1,62 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'id' => $this->id, + 'uuid' => $this->uuid, + 'name' => $this->name, + 'email' => $this->email, + 'army_number' => $this->army_number, + 'unit_id' => $this->unit_id, + 'rank_id' => $this->rank_id, + 'position_id' => $this->position_id, + 'phone_number' => $this->phone_number, + 'image_url' => $this->image_url ? Storage::disk('public')->url($this->image_url) : null, + 'status' => $this->status, + 'token' => $this->when(isset($this->token), $this->token), + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'roles' => $this->whenLoaded('roles', function () { + return $this->roles->map(function ($role) { + return [ + 'id' => $role->id, + 'name' => $role->name, + 'guard_name' => $role->guard_name, + 'permissions' => $role->permissions ? $role->permissions->map(function ($permission) { + return [ + 'id' => $permission->id, + 'name' => $permission->name, + 'guard_name' => $permission->guard_name, + 'route_name' => $permission->route_name ?? null, + 'created_at' => $permission->created_at, + 'updated_at' => $permission->updated_at, + ]; + }) : [], + 'created_at' => $role->created_at, + 'updated_at' => $role->updated_at, + ]; + }); + }), + 'unit' => new UnitResource($this->whenLoaded('unit')), + 'rank' => new RankResource($this->whenLoaded('rank')), + 'position' => new PositionResource($this->whenLoaded('position')), + ]; + } +} diff --git a/be/Modules/Auth/Transformers/UserResource.php b/be/Modules/Auth/Transformers/UserResource.php new file mode 100644 index 0000000..a064874 --- /dev/null +++ b/be/Modules/Auth/Transformers/UserResource.php @@ -0,0 +1,61 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'email' => $this->email, + 'ic_number' => $this->ic_number, + 'position' => $this->position, + 'phone_number' => $this->phone_number, + 'image_url' => $this->image_url ? Storage::disk('public')->url($this->image_url) : null, + 'status' => $this->status, + 'two_factor_secret' => $this->two_factor_secret, + 'two_factor_recovery_codes' => $this->two_factor_recovery_codes, + 'two_factor_confirmed_at' => $this->two_factor_confirmed_at, + 'email_verified_at' => $this->email_verified_at, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'deleted_at' => $this->deleted_at, + 'roles' => $this->whenLoaded('roles', function () { + return $this->roles->map(function ($role) { + return [ + 'id' => $role->id, + 'name' => $role->name, + 'fullname' => $role->fullname ?? null, + 'context' => $role->context ?? 'member', + 'guard_name' => $role->guard_name, + 'permissions' => $this->when($role->relationLoaded('permissions'), function () use ($role) { + return $role->permissions->map(function ($permission) { + return [ + 'id' => $permission->id, + 'name' => $permission->name, + 'guard_name' => $permission->guard_name, + 'route_name' => $permission->route_name, + 'created_at' => $permission->created_at, + 'updated_at' => $permission->updated_at, + ]; + }); + }), + 'created_at' => $role->created_at, + 'updated_at' => $role->updated_at, + ]; + }); + }), + ]; + } +} diff --git a/be/Modules/Auth/composer.json b/be/Modules/Auth/composer.json new file mode 100644 index 0000000..5d41ef1 --- /dev/null +++ b/be/Modules/Auth/composer.json @@ -0,0 +1,30 @@ +{ + "name": "nwidart/auth", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\Auth\\": "App", + "Modules\\Auth\\Database\\Factories\\": "database/factories/", + "Modules\\Auth\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\Auth\\Tests\\": "tests/" + } + } +} diff --git a/be/Modules/Auth/module.json b/be/Modules/Auth/module.json new file mode 100644 index 0000000..7cbf9df --- /dev/null +++ b/be/Modules/Auth/module.json @@ -0,0 +1,11 @@ +{ + "name": "Auth", + "alias": "auth", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Auth\\Providers\\AuthServiceProvider" + ], + "files": [] +} diff --git a/be/Modules/Auth/package.json b/be/Modules/Auth/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/be/Modules/Auth/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/be/Modules/Auth/resources/views/emails/verification-otp.blade.php b/be/Modules/Auth/resources/views/emails/verification-otp.blade.php new file mode 100644 index 0000000..05c3263 --- /dev/null +++ b/be/Modules/Auth/resources/views/emails/verification-otp.blade.php @@ -0,0 +1,26 @@ +@component('mail::message') +@if (! empty($logoPath) && file_exists($logoPath)) +
+ {{ config('app.name') }} +
+@endif + +# Pengesahan E-mel + +Assalamualaikum **{{ $name }}**, + +Terima kasih kerana mendaftar. Gunakan kod OTP di bawah untuk mengesahkan alamat e-mel anda. + +@component('mail::panel') +
+ {{ $otp }} +
+@endcomponent + +Kod ini akan tamat tempoh dalam **{{ $minutes }} minit**. + +Jika anda tidak membuat pendaftaran ini, abaikan e-mel ini. + +Terima kasih,
+{{ config('app.name') }} +@endcomponent diff --git a/be/Modules/Dashboard/Actions/.gitkeep b/be/Modules/Dashboard/Actions/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Config/.gitkeep b/be/Modules/Dashboard/Config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Config/config.php b/be/Modules/Dashboard/Config/config.php new file mode 100644 index 0000000..2c58cb0 --- /dev/null +++ b/be/Modules/Dashboard/Config/config.php @@ -0,0 +1,5 @@ + 'Dashboard', +]; diff --git a/be/Modules/Dashboard/Console/.gitkeep b/be/Modules/Dashboard/Console/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Database/Factories/.gitkeep b/be/Modules/Dashboard/Database/Factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Database/Migrations/.gitkeep b/be/Modules/Dashboard/Database/Migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Database/Seeders/.gitkeep b/be/Modules/Dashboard/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Database/Seeders/DashboardDatabaseSeeder.php b/be/Modules/Dashboard/Database/Seeders/DashboardDatabaseSeeder.php new file mode 100644 index 0000000..3cbe23c --- /dev/null +++ b/be/Modules/Dashboard/Database/Seeders/DashboardDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/be/Modules/Dashboard/Emails/.gitkeep b/be/Modules/Dashboard/Emails/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Entities/.gitkeep b/be/Modules/Dashboard/Entities/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Helpers/.gitkeep b/be/Modules/Dashboard/Helpers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Http/Controllers/.gitkeep b/be/Modules/Dashboard/Http/Controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Http/Controllers/DashboardController.php b/be/Modules/Dashboard/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..341e9a2 --- /dev/null +++ b/be/Modules/Dashboard/Http/Controllers/DashboardController.php @@ -0,0 +1,109 @@ +kjcDashboardService = $kjcDashboardService; + $this->pkjDashboardService = $pkjDashboardService; + } + + /** + * Get dashboard overview data + */ + public function getOverview(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + + $overview = [ + 'total_units' => $this->kjcDashboardService->getTotalUnits($filters), + 'total_camps' => $this->kjcDashboardService->getTotalCamps($filters), + 'total_formations' => $this->kjcDashboardService->getTotalFormations($filters), + 'kjc' => [ + 'total_assets' => $this->kjcDashboardService->getTotalAssets($filters, $user), + 'operational_assets' => $this->kjcDashboardService->getOperationalAssets($filters, $user), + 'under_repair' => $this->kjcDashboardService->getUnderRepairAssets($filters, $user), + 'maintenance_due' => $this->kjcDashboardService->getMaintenanceDueAssets($filters, $user), + 'active_repairs' => $this->kjcDashboardService->getActiveRepairs($filters), + 'pending_reports' => $this->kjcDashboardService->getPendingReports($filters) + ], + 'pkj' => [ + 'total_assets' => $this->pkjDashboardService->getTotalAssets($filters, $user), + 'operational_assets' => $this->pkjDashboardService->getOperationalAssets($filters, $user), + 'under_repair' => $this->pkjDashboardService->getUnderRepairAssets($filters, $user), + 'maintenance_due' => $this->pkjDashboardService->getMaintenanceDueAssets($filters, $user), + 'active_repairs' => $this->pkjDashboardService->getActiveRepairs($filters), + 'pending_reports' => $this->pkjDashboardService->getPendingReports($filters) + ] + ]; + + return response()->json([ + 'success' => true, + 'data' => $overview + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch dashboard overview', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get stat cards data + */ + public function getStatCards(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + + $statCards = [ + 'kjc' => [ + 'total_assets' => $this->kjcDashboardService->getTotalAssets($filters, $user), + 'operational_assets' => $this->kjcDashboardService->getOperationalAssets($filters, $user), + 'under_repair' => $this->kjcDashboardService->getUnderRepairAssets($filters, $user), + 'maintenance_due' => $this->kjcDashboardService->getMaintenanceDueAssets($filters, $user), + ], + 'pkj' => [ + 'total_assets' => $this->pkjDashboardService->getTotalAssets($filters, $user), + 'operational_assets' => $this->pkjDashboardService->getOperationalAssets($filters, $user), + 'under_repair' => $this->pkjDashboardService->getUnderRepairAssets($filters, $user), + 'maintenance_due' => $this->pkjDashboardService->getMaintenanceDueAssets($filters, $user), + ], + 'overview' => [ + 'total_units' => $this->kjcDashboardService->getTotalUnits($filters), + 'active_repairs' => $this->kjcDashboardService->getActiveRepairs($filters) + $this->pkjDashboardService->getActiveRepairs($filters), + 'pending_reports' => $this->kjcDashboardService->getPendingReports($filters) + $this->pkjDashboardService->getPendingReports($filters), + ] + ]; + + return response()->json([ + 'success' => true, + 'data' => $statCards + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch stat cards', + 'error' => $e->getMessage() + ], 500); + } + } +} \ No newline at end of file diff --git a/be/Modules/Dashboard/Http/Controllers/KJC/KJCDashboardController.php b/be/Modules/Dashboard/Http/Controllers/KJC/KJCDashboardController.php new file mode 100644 index 0000000..7aeb2dd --- /dev/null +++ b/be/Modules/Dashboard/Http/Controllers/KJC/KJCDashboardController.php @@ -0,0 +1,302 @@ +kjcDashboardService = $kjcDashboardService; + $this->kjcDashboardRepository = $kjcDashboardRepository; + } + + /** + * Get KJC entitlement vs holdings pie chart + */ + public function getEntitlementVsHoldingsPieChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->kjcDashboardService->getEntitlementVsHoldingsPieChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch KJC entitlement vs holdings chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get KJC holdings status breakdown pie chart + */ + public function getHoldingsStatusBreakdownPieChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->kjcDashboardService->getHoldingsStatusBreakdownPieChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch KJC holdings status breakdown chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get KJC unit performance chart + */ + public function getUnitPerformanceChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->kjcDashboardService->getUnitPerformanceChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch KJC unit performance chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get KJC monthly trends chart + */ + public function getMonthlyTrendsChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->kjcDashboardService->getMonthlyTrendsChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch KJC monthly trends chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get KJC historical metrics bar chart + */ + public function getHistoricalMetricsBarChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->kjcDashboardService->getHistoricalMetricsBarChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch KJC historical metrics chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get drill-down data for entitlement vs holdings + */ + public function getEntitlementVsHoldingsDetails(Request $request): JsonResponse + { + try { + $filters = $request->only(['type', 'date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + + $type = $filters['type'] ?? 'entitlement'; + + if ($type === 'entitlement') { + // Return entitlement details + $entitlements = KJCAssetEntitlement::with(['kjcSubcategory']) + ->paginate(20); + + $data = [ + 'title' => 'KJC Asset Entitlements', + 'filters' => array_merge($filters, ['total_count' => $entitlements->total()]), + 'items' => $entitlements->items(), + 'pagination' => [ + 'current_page' => $entitlements->currentPage(), + 'per_page' => $entitlements->perPage(), + 'total' => $entitlements->total(), + 'last_page' => $entitlements->lastPage(), + 'from' => $entitlements->firstItem(), + 'to' => $entitlements->lastItem() + ] + ]; + } else { + // Return holdings details + $query = KJCAssetHolding::with(['unit', 'kjcCategory', 'kjcSubcategory', 'kjcModel']); + + if (isset($filters['date_from'])) { + $query->where('created_at', '>=', $filters['date_from']); + } + + if (isset($filters['date_to'])) { + $query->where('created_at', '<=', $filters['date_to']); + } + + if (isset($filters['unit_id'])) { + $query->where('unit_id', $filters['unit_id']); + } + + $holdings = $query->paginate(20); + + $data = [ + 'title' => 'KJC Asset Holdings', + 'filters' => array_merge($filters, ['total_count' => $holdings->total()]), + 'items' => $holdings->items(), + 'pagination' => [ + 'current_page' => $holdings->currentPage(), + 'per_page' => $holdings->perPage(), + 'total' => $holdings->total(), + 'last_page' => $holdings->lastPage(), + 'from' => $holdings->firstItem(), + 'to' => $holdings->lastItem() + ] + ]; + } + + return response()->json([ + 'success' => true, + 'data' => $data + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch entitlement vs holdings details', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get drill-down data for holdings status + */ + public function getHoldingsStatusDetails(Request $request): JsonResponse + { + try { + $filters = $request->only(['status', 'date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + + $query = KJCAssetHolding::with(['unit', 'kjcCategory', 'kjcSubcategory', 'kjcModel']); + + if (isset($filters['status'])) { + $query->where('status', $filters['status']); + } + + if (isset($filters['date_from'])) { + $query->where('created_at', '>=', $filters['date_from']); + } + + if (isset($filters['date_to'])) { + $query->where('created_at', '<=', $filters['date_to']); + } + + if (isset($filters['unit_id'])) { + $query->where('unit_id', $filters['unit_id']); + } + + $holdings = $query->paginate(20); + + // Map status codes to readable names + $statusNames = [ + 'BP' => 'Beroperasi (Operational)', + 'BDG' => 'Baik Diselenggara (Well Maintained)', + 'TBDG' => 'Tidak Baik Diselenggara (Poorly Maintained)' + ]; + + $statusName = $statusNames[$filters['status']] ?? $filters['status']; + + return response()->json([ + 'success' => true, + 'data' => [ + 'title' => "KJC Assets with Status: {$statusName}", + 'filters' => array_merge($filters, ['total_count' => $holdings->total()]), + 'items' => $holdings->items(), + 'pagination' => [ + 'current_page' => $holdings->currentPage(), + 'per_page' => $holdings->perPage(), + 'total' => $holdings->total(), + 'last_page' => $holdings->lastPage(), + 'from' => $holdings->firstItem(), + 'to' => $holdings->lastItem() + ] + ] + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch holdings status details', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get KJC asset details by status (drill-down table, paginated). + * Status can be 'null' for assets not yet assigned a status (DB column NULL). + */ + public function getAssetDetailsByStatus(Request $request, string $status): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id', 'page', 'per_page']); + $user = $request->user(); + + $status = trim($status); + $status = $status === 'null' ? '' : $status; + + $details = $this->kjcDashboardRepository->getAssetDetailsByStatus($status, $filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $details + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch KJC asset details', + 'error' => $e->getMessage() + ], 500); + } + } +} diff --git a/be/Modules/Dashboard/Http/Controllers/PKJ/PKJDashboardController.php b/be/Modules/Dashboard/Http/Controllers/PKJ/PKJDashboardController.php new file mode 100644 index 0000000..67ca286 --- /dev/null +++ b/be/Modules/Dashboard/Http/Controllers/PKJ/PKJDashboardController.php @@ -0,0 +1,188 @@ +pkjDashboardService = $pkjDashboardService; + $this->pkjDashboardRepository = $pkjDashboardRepository; + } + + /** + * Get PKJ entitlement vs holdings pie chart + */ + public function getEntitlementVsHoldingsPieChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->pkjDashboardService->getEntitlementVsHoldingsPieChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ entitlement vs holdings chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get PKJ holdings status breakdown pie chart + */ + public function getHoldingsStatusBreakdownPieChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->pkjDashboardService->getHoldingsStatusBreakdownPieChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ holdings status breakdown chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get PKJ monthly trends chart + */ + public function getMonthlyTrendsChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->pkjDashboardService->getMonthlyTrendsChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ monthly trends chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get PKJ holdings by category bar chart + */ + public function getHoldingsByCategoryBarChart(Request $request): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->pkjDashboardService->getHoldingsByCategoryBarChart($filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ holdings by category chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get PKJ category metrics bar chart (drill-down) + */ + public function getCategoryMetricsBarChart(Request $request, int $categoryId): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->pkjDashboardService->getCategoryMetricsBarChart($categoryId, $filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ category metrics chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get PKJ category status breakdown pie chart (drill-down) + */ + public function getCategoryStatusBreakdownPieChart(Request $request, int $categoryId): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id']); + $user = $request->user(); // Get authenticated user + $chartData = $this->pkjDashboardService->getCategoryStatusBreakdownPieChart($categoryId, $filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $chartData + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ category status breakdown chart', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get PKJ asset details by category and status (drill-down) + */ + public function getAssetDetailsByCategoryAndStatus(Request $request, int $categoryId, string $status): JsonResponse + { + try { + $filters = $request->only(['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id', 'government_id', 'page', 'per_page']); + $user = $request->user(); // Get authenticated user + + // Convert 'null' string to empty string for null status handling + // Trim whitespace to ensure exact matching + $status = trim($status); + $status = $status === 'null' ? '' : $status; + + $details = $this->pkjDashboardRepository->getAssetDetailsByCategoryAndStatus($categoryId, $status, $filters, $user); + + return response()->json([ + 'success' => true, + 'data' => $details + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch PKJ asset details', + 'error' => $e->getMessage() + ], 500); + } + } +} diff --git a/be/Modules/Dashboard/Http/Requests/.gitkeep b/be/Modules/Dashboard/Http/Requests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Jobs/.gitkeep b/be/Modules/Dashboard/Jobs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Notifications/.gitkeep b/be/Modules/Dashboard/Notifications/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Policies/.gitkeep b/be/Modules/Dashboard/Policies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Providers/.gitkeep b/be/Modules/Dashboard/Providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Providers/DashboardServiceProvider.php b/be/Modules/Dashboard/Providers/DashboardServiceProvider.php new file mode 100644 index 0000000..c132690 --- /dev/null +++ b/be/Modules/Dashboard/Providers/DashboardServiceProvider.php @@ -0,0 +1,169 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'Database/Migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + + // Register dashboard repositories + $this->app->bind( + \Modules\Dashboard\Repositories\Contracts\KJCDashboardRepositoryInterface::class, + \Modules\Dashboard\Repositories\KJCDashboardRepository::class + ); + + $this->app->bind( + \Modules\Dashboard\Repositories\Contracts\PKJDashboardRepositoryInterface::class, + \Modules\Dashboard\Repositories\PKJDashboardRepository::class + ); + + // Register dashboard services + $this->app->singleton(\Modules\Dashboard\Services\KJC\KJCDashboardService::class); + $this->app->singleton(\Modules\Dashboard\Services\PKJ\PKJDashboardService::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'Lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'Lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, 'Resources/Views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\' . $this->name . '\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } +} diff --git a/be/Modules/Dashboard/Providers/EventServiceProvider.php b/be/Modules/Dashboard/Providers/EventServiceProvider.php new file mode 100644 index 0000000..29e6487 --- /dev/null +++ b/be/Modules/Dashboard/Providers/EventServiceProvider.php @@ -0,0 +1,27 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/Modules/Dashboard/Providers/RouteServiceProvider.php b/be/Modules/Dashboard/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..3a50d7c --- /dev/null +++ b/be/Modules/Dashboard/Providers/RouteServiceProvider.php @@ -0,0 +1,49 @@ +mapApiRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '/Routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->name('api.')->group(module_path($this->name, '/Routes/api.php')); + } +} diff --git a/be/Modules/Dashboard/Repositories/.gitkeep b/be/Modules/Dashboard/Repositories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Repositories/Contracts/.gitkeep b/be/Modules/Dashboard/Repositories/Contracts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Repositories/Contracts/KJCDashboardRepositoryInterface.php b/be/Modules/Dashboard/Repositories/Contracts/KJCDashboardRepositoryInterface.php new file mode 100644 index 0000000..3506236 --- /dev/null +++ b/be/Modules/Dashboard/Repositories/Contracts/KJCDashboardRepositoryInterface.php @@ -0,0 +1,57 @@ +visibleTo($user); + } + + $this->applyFilters($query, $filters, excludeDateFilter: true); + + return $query->sum('entitlement'); + } + + /** + * Get total KJC asset holdings + */ + public function getTotalHoldings(array $filters = [], $user = null): int + { + $query = KJCAssetEntitlement::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters, excludeDateFilter: true); + + return $query->sum('holding'); + } + + /** + * Get KJC asset holdings by status. + * Does not filter by date so totals match full KJCAssetHolding counts (unit/government/formation filters still apply). + */ + public function getHoldingsByStatus(array $filters = [], $user = null): array + { + $query = KJCAssetHolding::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters, excludeDateFilter: true); + + return $query->selectRaw('status, COUNT(*) as count') + ->groupBy('status') + ->get() + ->toArray(); + } + + /** + * Get KJC asset holdings with pagination + */ + public function getHoldingsPaginated(array $filters = [], int $perPage = 20, $user = null): array + { + $query = KJCAssetHolding::with(['unit', 'kjcCategory', 'kjcSubcategory', 'kjcModel']); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + $holdings = $query->paginate($perPage); + + return [ + 'items' => $holdings->items(), + 'pagination' => [ + 'current_page' => $holdings->currentPage(), + 'per_page' => $holdings->perPage(), + 'total' => $holdings->total(), + 'last_page' => $holdings->lastPage(), + 'from' => $holdings->firstItem(), + 'to' => $holdings->lastItem() + ] + ]; + } + + /** + * Get KJC asset entitlements with pagination + */ + public function getEntitlementsPaginated(array $filters = [], int $perPage = 20, $user = null): array + { + $query = KJCAssetEntitlement::with(['kjcSubcategory']); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + $entitlements = $query->paginate($perPage); + + return [ + 'items' => $entitlements->items(), + 'pagination' => [ + 'current_page' => $entitlements->currentPage(), + 'per_page' => $entitlements->perPage(), + 'total' => $entitlements->total(), + 'last_page' => $entitlements->lastPage(), + 'from' => $entitlements->firstItem(), + 'to' => $entitlements->lastItem() + ] + ]; + } + + /** + * Get KJC asset holdings by specific status + */ + public function getHoldingsBySpecificStatus(string $status, array $filters = [], $user = null): array + { + $query = KJCAssetHolding::with(['unit', 'kjcCategory', 'kjcSubcategory', 'kjcModel']) + ->where('status', $status); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + $holdings = $query->paginate(20); + + return [ + 'items' => $holdings->items(), + 'pagination' => [ + 'current_page' => $holdings->currentPage(), + 'per_page' => $holdings->perPage(), + 'total' => $holdings->total(), + 'last_page' => $holdings->lastPage(), + 'from' => $holdings->firstItem(), + 'to' => $holdings->lastItem() + ] + ]; + } + + /** + * Get KJC asset details by status (paginated). + * When status is '' or 'null', returns assets where status column is NULL (not yet assigned). + */ + public function getAssetDetailsByStatus(string $status, array $filters = [], $user = null): array + { + $status = trim($status ?? ''); + + $query = KJCAssetHolding::query() + ->with(['kjcCategory', 'kjcSubcategory', 'kjcModel', 'unit']) + ->select([ + 'id', + 'uuid', + 'kjc_category_id', + 'kjc_subcategory_id', + 'kjc_model_id', + 'registration_number', + 'kewpa_registration_number', + 'status', + 'unit_id', + 'purchase_date', + 'receipt_date', + 'purchase_price', + 'contract_reference', + 'economic_year', + 'economic_distance', + 'note', + 'engine_number', + 'chassis_number', + 'created_at', + 'updated_at' + ]); + + if ($status === '' || $status === 'null') { + $query->whereNull('status'); + } else { + $query->whereNotNull('status') + ->where('status', '=', $status); + } + + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters, excludeDateFilter: true); + + $perPage = isset($filters['per_page']) ? (int) $filters['per_page'] : 10; + $page = isset($filters['page']) ? (int) $filters['page'] : null; + $assets = $query->paginate($perPage, ['*'], 'page', $page); + + return [ + 'data' => $assets->items(), + 'pagination' => [ + 'current_page' => $assets->currentPage(), + 'per_page' => $assets->perPage(), + 'total' => $assets->total(), + 'last_page' => $assets->lastPage(), + 'from' => $assets->firstItem(), + 'to' => $assets->lastItem(), + 'has_more_pages' => $assets->hasMorePages() + ] + ]; + } + + /** + * Get KJC asset holdings grouped by unit + */ + public function getHoldingsByUnit(array $filters = [], $user = null): array + { + $query = KJCAssetHolding::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + return $query->join('units', 'kjc_asset_holdings.unit_id', '=', 'units.id') + ->selectRaw('units.name as unit_name, COUNT(*) as count') + ->groupBy('units.name') + ->get() + ->toArray(); + } + + /** + * Get KJC asset holdings monthly trends + */ + public function getMonthlyTrends(array $filters = [], $user = null): array + { + $dateRange = $this->getDateRange($filters); + + $query = KJCAssetHolding::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + return $query->selectRaw(' + DATE_FORMAT(created_at, "%Y-%m") as month, + status, + COUNT(*) as count + ') + ->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]) + ->groupBy('month', 'status') + ->orderBy('month') + ->get() + ->toArray(); + } + + /** + * Get KJC historical metrics (KEUPAYAAN, KESIAGAAN, SERVISIBILITI) by month + * 1. KEUPAYAAN (%) = (PEGANGAN/PERJAWATAN) * 100 + * 2. SIAPSIAGA or KESIAGAAN (%) = (BDG/perjawatan) * 100 + * 3. SERVISIBILITI (%) = (BDG/pegangan) * 100 + */ + public function getHistoricalMetricsByMonth(array $filters = [], $user = null): array + { + $dateRange = $this->getDateRange($filters); + $currentMonth = Carbon::now()->format('Y-m'); + + // Get entitlement and holding data by month from historical tables using Eloquent + $entitlementQuery = KJCHistoricalEntitlement::query() + ->selectRaw(' + TO_CHAR(kjc_historical_entitlement.date, \'YYYY-MM\') as month, + SUM(kjc_historical_entitlement.entitlement) as total_entitlement, + SUM(kjc_historical_entitlement.holding) as total_holding + ') + ->whereBetween('kjc_historical_entitlement.date', [$dateRange['from'], $dateRange['to']]); + + // Apply filters to historical entitlement query + $this->applyHistoricalFiltersToEloquent($entitlementQuery, $filters); + + // Apply visibility scoping if user is provided (uses HasVisibility trait) + if ($user) { + $entitlementQuery->visibleTo($user); + } + + $entitlementData = $entitlementQuery->groupBy('month') + ->orderBy('month') + ->get() + ->keyBy('month'); + + // Get BDG status count by month from historical tables using Eloquent + $bdgQuery = KJCHistoricalHoldingStatus::query() + ->selectRaw(' + TO_CHAR(kjc_historical_holding_status.date, \'YYYY-MM\') as month, + COUNT(*) as bdg_count + ') + ->where('kjc_historical_holding_status.status', 'BDG') + ->whereBetween('kjc_historical_holding_status.date', [$dateRange['from'], $dateRange['to']]); + + // Apply filters to historical holding status query + $this->applyHistoricalFiltersToEloquent($bdgQuery, $filters); + + // Apply visibility scoping if user is provided (uses HasVisibility trait) + if ($user) { + $bdgQuery->visibleTo($user); + } + + $bdgData = $bdgQuery->groupBy('month') + ->orderBy('month') + ->get() + ->keyBy('month'); + + // Get current month data from real-time tables if current month is in range + $currentMonthEntitlement = 0; + $currentMonthHolding = 0; + $currentMonthBdgCount = 0; + + if ($this->isCurrentMonthInRange($currentMonth, $dateRange)) { + // Get current month entitlement data (all entitlements, not filtered by updated_at) + // This ensures we get real-time entitlement values regardless of when they were last updated + $currentEntitlementQuery = KJCAssetEntitlement::query(); + if ($user) { + $currentEntitlementQuery->visibleTo($user); + } + $this->applyCurrentMonthFilters($currentEntitlementQuery, $filters); + + $currentMonthEntitlement = $currentEntitlementQuery->sum('entitlement'); + + // Calculate current month holdings from actual KJCAssetHolding records + // This ensures we get real-time holding counts even if entitlement.holding is stale + $currentHoldingQuery = KJCAssetHolding::query(); + if ($user) { + $currentHoldingQuery->visibleTo($user); + } + $this->applyCurrentMonthFilters($currentHoldingQuery, $filters); + + $currentMonthHolding = $currentHoldingQuery->count(); + + // Get current month BDG count (only holdings updated in current month) + // This shows BDG holdings that were updated/changed status in the current month + $currentBdgQuery = KJCAssetHolding::query() + ->where('status', 'BDG') + ->whereMonth('updated_at', Carbon::now()->month) + ->whereYear('updated_at', Carbon::now()->year); + if ($user) { + $currentBdgQuery->visibleTo($user); + } + $this->applyCurrentMonthFilters($currentBdgQuery, $filters); + + $currentMonthBdgCount = $currentBdgQuery->count(); + } + + // Generate all months in the range + $months = []; + $current = $dateRange['from']->copy()->startOfMonth(); + $end = $dateRange['to']->copy()->endOfMonth(); + + while ($current->lte($end)) { + $monthKey = $current->format('Y-m'); + $months[] = $monthKey; + $current->addMonth(); + } + + // Calculate metrics for each month + $result = []; + foreach ($months as $month) { + $entitlement = $entitlementData->get($month); + $bdg = $bdgData->get($month); + + // Use current month real-time data if this is the current month + if ($month === $currentMonth && $this->isCurrentMonthInRange($currentMonth, $dateRange)) { + $totalEntitlement = $currentMonthEntitlement; + $totalHolding = $currentMonthHolding; + $bdgCount = $currentMonthBdgCount; + } else { + $totalEntitlement = $entitlement ? $entitlement->total_entitlement : 0; + $totalHolding = $entitlement ? $entitlement->total_holding : 0; + $bdgCount = $bdg ? $bdg->bdg_count : 0; + } + + // Calculate metrics + $keupayaan = $totalEntitlement > 0 ? ($totalHolding / $totalEntitlement) * 100 : 0; + $kesiagaan = $totalEntitlement > 0 ? ($bdgCount / $totalEntitlement) * 100 : 0; + $servisibiliti = $totalHolding > 0 ? ($bdgCount / $totalHolding) * 100 : 0; + + $result[] = [ + 'month' => $month, + 'keupayaan' => round($keupayaan, 2), + 'kesiagaan' => round($kesiagaan, 2), + 'servisibiliti' => round($servisibiliti, 2), + 'total_entitlement' => $totalEntitlement, + 'total_holding' => $totalHolding, + 'bdg_count' => $bdgCount + ]; + } + + return $result; + } + + /** + * Apply common filters to query + */ + private function applyFilters($query, array $filters = [], bool $excludeDateFilter = false): void + { + $model = $query->getModel(); + if ($model && method_exists($model, 'getTable')) { + $schema = $model->getConnection()->getSchemaBuilder(); + $columns = $schema->getColumnListing($model->getTable()); + + // Only apply created_at filter if the model has created_at column (skip when excludeDateFilter) + if (!$excludeDateFilter && in_array('created_at', $columns)) { + $dateRange = $this->getDateRange($filters); + $query->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]); + } + + // Apply unit_id filter if model has unit_id column + if (isset($filters['unit_id']) && $filters['unit_id']) { + if (in_array('unit_id', $columns)) { + $query->where('unit_id', $filters['unit_id']); + } + } + + // Apply government_id filter if provided + if (isset($filters['government_id']) && $filters['government_id']) { + $unitIds = $this->getUnitsByGovernment($filters['government_id']); + if (in_array('unit_id', $columns)) { + if (!empty($unitIds)) { + $query->whereIn('unit_id', $unitIds); + } else { + // No units found for this government - return empty result + $query->whereNull('id'); + } + } + } + + // Apply camp_id filter + if (isset($filters['camp_id']) && $filters['camp_id']) { + $query->whereHas('unit', function ($q) use ($filters) { + $q->where('camp_id', $filters['camp_id']); + }); + } + + // Apply formation_id filter + if (isset($filters['formation_id']) && $filters['formation_id']) { + // Get units under this formation + $unitIds = Unit::where('formation_id', $filters['formation_id']) + ->pluck('id') + ->toArray(); + + if (!empty($unitIds)) { + if (in_array('unit_id', $columns)) { + $query->whereIn('unit_id', $unitIds); + } else { + // Fallback to whereHas if no unit_id column + $query->whereHas('unit', function ($q) use ($filters) { + $q->where('formation_id', $filters['formation_id']); + }); + } + } else { + // No units found for this formation - return empty result + $query->whereNull('id'); + } + } + } + } + + /** + * Get units by government ID + * Uses VisibilityService for consistent logic + */ + private function getUnitsByGovernment(int $governmentId): array + { + $governmentUnit = Unit::where('government_id', $governmentId)->first(); + if (!$governmentUnit) { + // If no direct unit found, try to get from formation + $formation = Formation::where('government_id', $governmentId)->first(); + if ($formation) { + $governmentUnit = Unit::where('formation_id', $formation->id)->first(); + } + } + + if (!$governmentUnit) { + return []; + } + + return $this->visibilityService->getUnitsUnderGovernment($governmentUnit); + } + + /** + * Get date range for filtering + */ + private function getDateRange(array $filters = []): array + { + $dateFrom = $filters['date_from'] ?? Carbon::now()->startOfYear(); + $dateTo = $filters['date_to'] ?? Carbon::now()->endOfYear(); + + return [ + 'from' => Carbon::parse($dateFrom)->startOfDay(), + 'to' => Carbon::parse($dateTo)->endOfDay() + ]; + } + + /** + * Apply filters to historical Eloquent queries + * Handles government_id, formation_id, unit_id, and camp_id filters + */ + private function applyHistoricalFiltersToEloquent($query, array $filters = []): void + { + $model = $query->getModel(); + $isHoldingStatus = $model instanceof KJCHistoricalHoldingStatus; + + // Apply unit_id filter + if (isset($filters['unit_id']) && $filters['unit_id']) { + if ($isHoldingStatus) { + // For holding status, filter through the relationship + $query->whereHas('kjcAssetHolding', function ($q) use ($filters) { + $q->where('unit_id', $filters['unit_id']); + }); + } else { + $query->where('unit_id', $filters['unit_id']); + } + } + + // Apply government_id filter + if (isset($filters['government_id']) && $filters['government_id']) { + $unitIds = $this->getUnitsByGovernment($filters['government_id']); + if (!empty($unitIds)) { + if ($isHoldingStatus) { + $query->whereHas('kjcAssetHolding', function ($q) use ($unitIds) { + $q->whereIn('unit_id', $unitIds); + }); + } else { + $query->whereIn('unit_id', $unitIds); + } + } else { + // No units found for this government - return empty result + $query->whereRaw('1 = 0'); + } + } + + // Apply formation_id filter + if (isset($filters['formation_id']) && $filters['formation_id']) { + // Get units under this formation + $unitIds = Unit::where('formation_id', $filters['formation_id']) + ->pluck('id') + ->toArray(); + + if (!empty($unitIds)) { + if ($isHoldingStatus) { + $query->whereHas('kjcAssetHolding', function ($q) use ($unitIds) { + $q->whereIn('unit_id', $unitIds); + }); + } else { + $query->whereIn('unit_id', $unitIds); + } + } else { + // No units found for this formation - return empty result + $query->whereRaw('1 = 0'); + } + } + + // Apply camp_id filter + if (isset($filters['camp_id']) && $filters['camp_id']) { + if ($isHoldingStatus) { + $query->whereHas('kjcAssetHolding.unit', function ($q) use ($filters) { + $q->where('camp_id', $filters['camp_id']); + }); + } else { + $query->whereHas('unit', function ($q) use ($filters) { + $q->where('camp_id', $filters['camp_id']); + }); + } + } + } + + /** + * Check if current month is within the date range + */ + private function isCurrentMonthInRange(string $currentMonth, array $dateRange): bool + { + $currentMonthDate = Carbon::createFromFormat('Y-m', $currentMonth)->startOfMonth(); + return $currentMonthDate->between($dateRange['from'], $dateRange['to']); + } + + /** + * Apply filters for current month data queries (without date range filtering) + */ + private function applyCurrentMonthFilters($query, array $filters = []): void + { + if (isset($filters['unit_id']) && $filters['unit_id']) { + $query->where('unit_id', $filters['unit_id']); + } + + // Apply government_id filter + if (isset($filters['government_id']) && $filters['government_id']) { + $unitIds = $this->getUnitsByGovernment($filters['government_id']); + if (!empty($unitIds)) { + $query->whereIn('unit_id', $unitIds); + } else { + // No units found for this government - return empty result + $query->whereNull('id'); + } + } + + if (isset($filters['camp_id']) && $filters['camp_id']) { + $query->whereHas('unit', function ($q) use ($filters) { + $q->where('camp_id', $filters['camp_id']); + }); + } + + if (isset($filters['formation_id']) && $filters['formation_id']) { + // Get units under this formation + $unitIds = Unit::where('formation_id', $filters['formation_id']) + ->pluck('id') + ->toArray(); + + if (!empty($unitIds)) { + $query->whereIn('unit_id', $unitIds); + } else { + // No units found for this formation - return empty result + $query->whereNull('id'); + } + } + } + +} diff --git a/be/Modules/Dashboard/Repositories/PKJDashboardRepository.php b/be/Modules/Dashboard/Repositories/PKJDashboardRepository.php new file mode 100644 index 0000000..99fa14a --- /dev/null +++ b/be/Modules/Dashboard/Repositories/PKJDashboardRepository.php @@ -0,0 +1,495 @@ +visibleTo($user); + } + + $this->applyFilters($query, $filters, excludeDateFilter: true); + + return $query->sum('entitlement'); + } + + public function getTotalHoldings(array $filters = [], $user = null): int + { + $query = PKJAssetEntitlement::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters, excludeDateFilter: true); + + return $query->sum('holding') ?? 0; + } + + /** + * Get PKJ asset holdings grouped by status + */ + public function getHoldingsByStatus(array $filters = [], $user = null): array + { + $query = PKJAssetHolding::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + return $query->selectRaw('status, COUNT(*) as count') + ->groupBy('status') + ->orderBy('status') + ->get() + ->toArray(); + } + + /** + * Get PKJ asset holdings by specific status + */ + public function getHoldingsBySpecificStatus(string $status, array $filters = [], $user = null): array + { + $query = PKJAssetHolding::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $this->applyFilters($query, $filters); + + $holdings = $query->where('status', $status)->paginate(10); + + return [ + 'data' => $holdings->items(), + 'pagination' => [ + 'current_page' => $holdings->currentPage(), + 'per_page' => $holdings->perPage(), + 'total' => $holdings->total(), + 'last_page' => $holdings->lastPage(), + 'from' => $holdings->firstItem(), + 'to' => $holdings->lastItem() + ] + ]; + } + + /** + * Get PKJ monthly trends + */ + public function getMonthlyTrends(array $filters = [], $user = null): array + { + $dateRange = $this->getDateRange($filters); + + $query = PKJReport::query(); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + $trends = $query->selectRaw(' + TO_CHAR(created_at, \'YYYY-MM\') as month, + COUNT(*) as total_reports + ') + ->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]) + ->groupBy('month') + ->orderBy('month') + ->get() + ->toArray(); + + return $trends; + } + + /** + * Get PKJ holdings by category + */ + public function getHoldingsByCategory(array $filters = [], $user = null): array + { + // Build a subquery for filtered entitlements + // This ensures all categories are included, but only matching entitlements are summed + $entitlementSubquery = PKJAssetEntitlement::query() + ->select('pkj_category_id', DB::raw('SUM(holding) as total_holding')) + ->groupBy('pkj_category_id'); + + // Apply visibility scoping if user is provided + if ($user) { + $entitlementSubquery->visibleTo($user); + } + + // Apply filters to entitlement subquery + if (isset($filters['unit_id'])) { + $entitlementSubquery->where('unit_id', $filters['unit_id']); + } + + // Apply government_id filter + if (isset($filters['government_id']) && $filters['government_id']) { + $unitIds = $this->getUnitsByGovernment($filters['government_id']); + if (!empty($unitIds)) { + $entitlementSubquery->whereIn('unit_id', $unitIds); + } else { + // If no units match, set to empty result but don't filter categories + $entitlementSubquery->whereRaw('1 = 0'); + } + } + + // Apply formation_id filter + if (isset($filters['formation_id']) && $filters['formation_id']) { + $unitIds = Unit::where('formation_id', $filters['formation_id']) + ->pluck('id') + ->toArray(); + + if (!empty($unitIds)) { + $entitlementSubquery->whereIn('unit_id', $unitIds); + } else { + // If no units match, set to empty result but don't filter categories + $entitlementSubquery->whereRaw('1 = 0'); + } + } + + // Main query: Get ALL categories and LEFT JOIN with filtered entitlements + // This ensures all categories are returned even if they have no matching entitlements + $query = PKJCategory::query() + ->leftJoinSub($entitlementSubquery, 'filtered_entitlements', function ($join) { + $join->on('pkj_categories.id', '=', 'filtered_entitlements.pkj_category_id'); + }) + ->selectRaw(' + pkj_categories.id as category_id, + pkj_categories.name as category_name, + COALESCE(filtered_entitlements.total_holding, 0) as total_holding + ') + ->orderBy('pkj_categories.name'); + + return $query->get()->toArray(); + } + + /** + * Get PKJ category metrics (KEUPAYAAN, KESIAGAAN, SERVISIBILITI) + */ + public function getCategoryMetrics(int $categoryId, array $filters = [], $user = null): array + { + // Get category name + $category = PKJCategory::find($categoryId); + $categoryName = $category ? $category->name : 'Unknown Category'; + + // Get entitlement and holding data for the category + $entitlementQuery = PKJAssetEntitlement::query() + ->where('pkj_category_id', $categoryId); + + // Apply visibility scoping if user is provided + if ($user) { + $entitlementQuery->visibleTo($user); + } + + // Apply filters + if (isset($filters['unit_id'])) { + $entitlementQuery->where('unit_id', $filters['unit_id']); + } + + $entitlementData = $entitlementQuery->selectRaw(' + SUM(entitlement) as total_entitlement, + SUM(holding) as total_holding + ')->first(); + + // Get operational/usable assets count (BDG, BT, BP statuses) for the category + $operationalQuery = PKJAssetHolding::query() + ->where('pkj_category_id', $categoryId) + ->whereIn('status', ['BDG', 'BT', 'BP']); + + // Apply visibility scoping if user is provided + if ($user) { + $operationalQuery->visibleTo($user); + } + + // Apply filters + if (isset($filters['unit_id'])) { + $operationalQuery->where('unit_id', $filters['unit_id']); + } + + $operationalCount = $operationalQuery->count(); + + // Get BDG, BT, BG count specifically for servisibiliti calculation + $bdgQuery = PKJAssetHolding::query() + ->where('pkj_category_id', $categoryId) + ->whereIn('status', ['BDG', 'BT', 'BG']); + + // Apply visibility scoping if user is provided + if ($user) { + $bdgQuery->visibleTo($user); + } + + // Apply filters + if (isset($filters['unit_id'])) { + $bdgQuery->where('unit_id', $filters['unit_id']); + } + + $bdgCount = $bdgQuery->count(); + + $totalEntitlement = $entitlementData ? $entitlementData->total_entitlement : 0; + $totalHolding = $entitlementData ? $entitlementData->total_holding : 0; + + // Calculate metrics + $keupayaan = $totalEntitlement > 0 ? ($totalHolding / $totalEntitlement) * 100 : 0; + $kesiagaan = $totalEntitlement > 0 ? ($operationalCount / $totalEntitlement) * 100 : 0; + $servisibiliti = $totalHolding > 0 ? ($bdgCount / $totalHolding) * 100 : 0; + + return [ + 'category_id' => $categoryId, + 'category_name' => $categoryName, + 'keupayaan' => round($keupayaan, 2), + 'kesiagaan' => round($kesiagaan, 2), + 'servisibiliti' => round($servisibiliti, 2), + 'total_entitlement' => $totalEntitlement, + 'total_holding' => $totalHolding, + 'operational_count' => $operationalCount, + 'bdg_count' => $bdgCount + ]; + } + + /** + * Get PKJ category status breakdown + */ + public function getCategoryStatusBreakdown(int $categoryId, array $filters = [], $user = null): array + { + // Get category name + $category = PKJCategory::find($categoryId); + $categoryName = $category ? $category->name : 'Unknown Category'; + + $query = PKJAssetHolding::query() + ->where('pkj_category_id', $categoryId) + ->selectRaw('status, COUNT(*) as count') + ->groupBy('status') + ->orderBy('status'); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + // Apply filters + if (isset($filters['unit_id'])) { + $query->where('unit_id', $filters['unit_id']); + } + + $statusCounts = $query->get()->toArray(); + + return [ + 'category_id' => $categoryId, + 'category_name' => $categoryName, + 'status_breakdown' => $statusCounts + ]; + } + + /** + * Get PKJ asset details by category and status. + * + * When the asset has no status yet, the status column in the database is NULL. + * Callers pass status as '' or the string 'null' to request these "no status" assets. + */ + public function getAssetDetailsByCategoryAndStatus(int $categoryId, string $status, array $filters = [], $user = null): array + { + // Handle no-status: API passes '' or 'null'; DB column is NULL for assets not yet assigned a status + $status = trim($status ?? ''); + + $query = PKJAssetHolding::query() + ->with(['unit', 'pkjCategory', 'pkjSubcategory', 'pkjModel']) + ->where('pkj_category_id', $categoryId); + + if ($status === '' || $status === 'null') { + // Assets with status column NULL (not yet assigned a status) + $query->whereNull('status'); + } else { + // For specific status, must match exactly and NOT be null + $query->whereNotNull('status') + ->where('status', '=', $status); + } + + $query->select([ + 'id', + 'uuid', + 'registration_number', + 'kewpa_registration_number', + 'status', + 'unit_id', + 'pkj_category_id', + 'pkj_subcategory_id', + 'pkj_model_id', + 'purchase_date', + 'receipt_date', + 'purchase_price', + 'contract_reference', + 'country_of_manufacture', + 'economic_year', + 'economic_distance', + 'note', + 'engine_number', + 'chassis_number', + 'created_at', + 'updated_at' + ]); + + // Apply visibility scoping if user is provided + if ($user) { + $query->visibleTo($user); + } + + // Apply filters + if (isset($filters['unit_id'])) { + $query->where('unit_id', $filters['unit_id']); + } + + $perPage = isset($filters['per_page']) ? (int) $filters['per_page'] : 10; + $page = isset($filters['page']) ? (int) $filters['page'] : null; + $assets = $query->paginate($perPage, ['*'], 'page', $page); + + return [ + 'data' => $assets->items(), + 'pagination' => [ + 'current_page' => $assets->currentPage(), + 'per_page' => $assets->perPage(), + 'total' => $assets->total(), + 'last_page' => $assets->lastPage(), + 'from' => $assets->firstItem(), + 'to' => $assets->lastItem(), + 'has_more_pages' => $assets->hasMorePages() + ] + ]; + } + + /** + * Apply common filters to query + */ + private function applyFilters($query, array $filters = [], bool $excludeDateFilter = false): void + { + // Only apply created_at filter if the model has created_at column + $model = $query->getModel(); + if ($model && method_exists($model, 'getTable')) { + $schema = $model->getConnection()->getSchemaBuilder(); + $columns = $schema->getColumnListing($model->getTable()); + + if (!$excludeDateFilter && in_array('created_at', $columns)) { + $dateRange = $this->getDateRange($filters); + $query->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]); + } + } + + // Apply unit_id filter if model has unit_id column + if (isset($filters['unit_id']) && $filters['unit_id']) { + if ($model && method_exists($model, 'getTable')) { + $columns = $schema->getColumnListing($model->getTable()); + if (in_array('unit_id', $columns)) { + $query->where('unit_id', $filters['unit_id']); + } + } + } + + // Apply government_id filter if provided + if (isset($filters['government_id']) && $filters['government_id']) { + // Get units under the government + $unitIds = $this->getUnitsByGovernment($filters['government_id']); + + if ($model && method_exists($model, 'getTable')) { + $columns = $schema->getColumnListing($model->getTable()); + if (in_array('unit_id', $columns)) { + if (!empty($unitIds)) { + $query->whereIn('unit_id', $unitIds); + } else { + // No units found for this government - return empty result + $query->whereNull('id'); + } + } + } + } + + // Apply formation_id filter if provided + if (isset($filters['formation_id']) && $filters['formation_id']) { + if ($model && method_exists($model, 'getTable')) { + $columns = $schema->getColumnListing($model->getTable()); + if (in_array('unit_id', $columns)) { + // Get units under this formation + $unitIds = Unit::where('formation_id', $filters['formation_id']) + ->pluck('id') + ->toArray(); + + if (!empty($unitIds)) { + $query->whereIn('unit_id', $unitIds); + } else { + // No units found for this formation - return empty result + $query->whereNull('id'); + } + } + } + } + + // Apply camp_id filter if provided + if (isset($filters['camp_id']) && $filters['camp_id']) { + if ($model && method_exists($model, 'getTable')) { + $columns = $schema->getColumnListing($model->getTable()); + if (in_array('camp_id', $columns)) { + $query->where('camp_id', $filters['camp_id']); + } + } + } + } + + /** + * Get units by government ID + * Uses VisibilityService for consistent logic + */ + private function getUnitsByGovernment(int $governmentId): array + { + $governmentUnit = Unit::where('government_id', $governmentId)->first(); + if (!$governmentUnit) { + // If no direct unit found, try to get from formation + $formation = \Modules\Formation\Entities\Formation::where('government_id', $governmentId)->first(); + if ($formation) { + $governmentUnit = Unit::where('formation_id', $formation->id)->first(); + } + } + + if (!$governmentUnit) { + return []; + } + + return $this->visibilityService->getUnitsUnderGovernment($governmentUnit); + } + + /** + * Get date range for filtering + */ + private function getDateRange(array $filters = []): array + { + $dateFrom = $filters['date_from'] ?? Carbon::now()->startOfYear(); + $dateTo = $filters['date_to'] ?? Carbon::now()->endOfYear(); + + return [ + 'from' => Carbon::parse($dateFrom)->startOfDay(), + 'to' => Carbon::parse($dateTo)->endOfDay() + ]; + } +} diff --git a/be/Modules/Dashboard/Routes/.gitkeep b/be/Modules/Dashboard/Routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Routes/api.php b/be/Modules/Dashboard/Routes/api.php new file mode 100644 index 0000000..5fedfb7 --- /dev/null +++ b/be/Modules/Dashboard/Routes/api.php @@ -0,0 +1,44 @@ +prefix('v1')->group(function () { + // Main dashboard endpoints + Route::get('/dashboard/stat-cards', [DashboardController::class, 'getStatCards']); + Route::get('/dashboard/overview', [DashboardController::class, 'getOverview']); + + // KJC specific endpoints + Route::prefix('dashboard/kjc')->group(function () { + // Pie charts + Route::get('/entitlement-vs-holdings-pie', [KJCDashboardController::class, 'getEntitlementVsHoldingsPieChart']); + Route::get('/holdings-status-breakdown-pie', [KJCDashboardController::class, 'getHoldingsStatusBreakdownPieChart']); + + // Bar charts + Route::get('/historical-metrics-bar', [KJCDashboardController::class, 'getHistoricalMetricsBarChart']); + + // Other charts + Route::get('/unit-performance-chart', [KJCDashboardController::class, 'getUnitPerformanceChart']); + Route::get('/monthly-trends-chart', [KJCDashboardController::class, 'getMonthlyTrendsChart']); + + // Drill-down endpoints + Route::get('/drill-down/entitlement-vs-holdings', [KJCDashboardController::class, 'getEntitlementVsHoldingsDetails']); + Route::get('/drill-down/holdings-status', [KJCDashboardController::class, 'getHoldingsStatusDetails']); + Route::get('/status/{status}/details', [KJCDashboardController::class, 'getAssetDetailsByStatus']); + }); + + // PKJ specific endpoints + Route::prefix('dashboard/pkj')->group(function () { + Route::get('/entitlement-vs-holdings-pie', [PKJDashboardController::class, 'getEntitlementVsHoldingsPieChart']); + Route::get('/holdings-status-breakdown-pie', [PKJDashboardController::class, 'getHoldingsStatusBreakdownPieChart']); + Route::get('/monthly-trends', [PKJDashboardController::class, 'getMonthlyTrendsChart']); + Route::get('/holdings-by-category-bar', [PKJDashboardController::class, 'getHoldingsByCategoryBarChart']); + + // Drill-down endpoints + Route::get('/category/{categoryId}/metrics-bar', [PKJDashboardController::class, 'getCategoryMetricsBarChart']); + Route::get('/category/{categoryId}/status-breakdown-pie', [PKJDashboardController::class, 'getCategoryStatusBreakdownPieChart']); + Route::get('/category/{categoryId}/status/{status}/details', [PKJDashboardController::class, 'getAssetDetailsByCategoryAndStatus']); + }); +}); \ No newline at end of file diff --git a/be/Modules/Dashboard/Services/.gitkeep b/be/Modules/Dashboard/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Services/DashboardService.php b/be/Modules/Dashboard/Services/DashboardService.php new file mode 100644 index 0000000..73ab4f8 --- /dev/null +++ b/be/Modules/Dashboard/Services/DashboardService.php @@ -0,0 +1,486 @@ +startOfYear(); + $dateTo = $filters['date_to'] ?? Carbon::now()->endOfYear(); + + return [ + 'from' => Carbon::parse($dateFrom)->startOfDay(), + 'to' => Carbon::parse($dateTo)->endOfDay() + ]; + } + + /** + * Apply common filters to query + */ + protected function applyCommonFilters($query, array $filters = []): void + { + $dateRange = $this->getDateRange($filters); + + $query->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]); + + // Government filter: Filter by government (get all units under that government) + if (isset($filters['government_id']) && $filters['government_id']) { + $unitIds = $this->getUnitsByGovernment($filters['government_id']); + + if (!empty($unitIds)) { + $query->whereIn('unit_id', $unitIds); + } else { + // No units found for this government + $query->whereNull('id'); + } + } + + if (isset($filters['unit_id']) && $filters['unit_id']) { + $query->where('unit_id', $filters['unit_id']); + } + + if (isset($filters['camp_id']) && $filters['camp_id']) { + $query->whereHas('unit', function ($q) use ($filters) { + $q->where('camp_id', $filters['camp_id']); + }); + } + + if (isset($filters['formation_id']) && $filters['formation_id']) { + $query->whereHas('unit', function ($q) use ($filters) { + $q->where('formation_id', $filters['formation_id']); + }); + } + } + + /** + * Apply visibility scoping to query based on user permissions + */ + protected function applyVisibilityScoping($query, $user): void + { + if (!$user) { + return; + } + + // Check if the model has the HasVisibility trait + if (method_exists($query->getModel(), 'scopeVisibleTo')) { + $query->visibleTo($user); + } + } + + /** + * Apply visibility scoping to raw database queries + * Uses VisibilityService for consistent logic + */ + protected function applyRawVisibilityScoping($query, $user, string $tableName): void + { + if (!$user) { + return; + } + + $userUnit = Unit::find($user->unit_id); + if (!$userUnit) { + $query->whereRaw('1 = 0'); + return; + } + + $unitIds = $this->visibilityService->getVisibleUnitIds($user); + + if (empty($unitIds)) { + $query->whereRaw('1 = 0'); + } else { + $query->whereIn('unit_id', $unitIds); + } + } + + /** + * Get all units by government ID + * Uses VisibilityService for consistent logic + */ + protected function getUnitsByGovernment(int $governmentId): array + { + $governmentUnit = Unit::where('government_id', $governmentId)->first(); + if (!$governmentUnit) { + // If no direct unit found, try to get from formation + $formation = Formation::where('government_id', $governmentId)->first(); + if ($formation) { + $governmentUnit = Unit::where('formation_id', $formation->id)->first(); + } + } + + if (!$governmentUnit) { + return []; + } + + return $this->visibilityService->getUnitsUnderGovernment($governmentUnit); + } + + /** + * Get total units count + */ + public function getTotalUnits(array $filters = []): int + { + $query = Unit::query(); + + if (isset($filters['camp_id']) && $filters['camp_id']) { + $query->where('camp_id', $filters['camp_id']); + } + + if (isset($filters['formation_id']) && $filters['formation_id']) { + $query->where('formation_id', $filters['formation_id']); + } + + return $query->count(); + } + + /** + * Get total camps count + */ + public function getTotalCamps(array $filters = []): int + { + return Camp::count(); + } + + /** + * Get total formations count + */ + public function getTotalFormations(array $filters = []): int + { + return Formation::count(); + } + + /** + * Get active repairs count (to be implemented by child classes) + */ + abstract public function getActiveRepairs(array $filters = []): int; + + /** + * Get pending reports count (to be implemented by child classes) + */ + abstract public function getPendingReports(array $filters = []): int; + + /** + * Get total assets count (to be implemented by child classes) + */ + abstract public function getTotalAssets(array $filters = []): int; + + /** + * Get operational assets count (to be implemented by child classes) + */ + abstract public function getOperationalAssets(array $filters = []): int; + + /** + * Get under repair assets count (to be implemented by child classes) + */ + abstract public function getUnderRepairAssets(array $filters = []): int; + + /** + * Get maintenance due assets count (to be implemented by child classes) + */ + abstract public function getMaintenanceDueAssets(array $filters = []): int; + + /** + * Format chart data with common structure + */ + protected function formatChartData( + string $chartType, + string $title, + array $series, + array $categories = [], + array $drillDown = [] + ): array { + return [ + 'chart_type' => $chartType, + 'title' => $title, + 'series' => $series, + 'categories' => $categories, + 'drill_down' => $drillDown + ]; + } + + /** + * Format pie chart data + */ + protected function formatPieChartData( + string $title, + array $data, + string $drillDownEndpoint = '', + array $drillDownParameters = [] + ): array { + $total = array_sum(array_column($data, 'value')); + $series = []; + + foreach ($data as $item) { + $percentage = $total > 0 ? round(($item['value'] / $total) * 100, 1) : 0; + + $seriesItem = [ + 'name' => $item['name'], + 'value' => $item['value'], + 'percentage' => $percentage + ]; + + // Preserve status_code if it exists (for drill-down functionality) + if (isset($item['status_code'])) { + $seriesItem['status_code'] = $item['status_code']; + } + + $series[] = $seriesItem; + } + + return $this->formatChartData( + 'pie', + $title, + $series, + [], + [ + 'enabled' => !empty($drillDownEndpoint), + 'endpoint' => $drillDownEndpoint, + 'parameters' => $drillDownParameters + ] + ); + } + + /** + * Format bar chart data + */ + protected function formatBarChartData( + string $title, + array $series, + array $categories, + string $drillDownEndpoint = '', + array $drillDownParameters = [] + ): array { + return $this->formatChartData( + 'bar', + $title, + $series, + $categories, + [ + 'enabled' => !empty($drillDownEndpoint), + 'endpoint' => $drillDownEndpoint, + 'parameters' => $drillDownParameters + ] + ); + } + + /** + * Format line chart data + */ + protected function formatLineChartData( + string $title, + array $series, + array $categories, + string $drillDownEndpoint = '', + array $drillDownParameters = [] + ): array { + return $this->formatChartData( + 'line', + $title, + $series, + $categories, + [ + 'enabled' => !empty($drillDownEndpoint), + 'endpoint' => $drillDownEndpoint, + 'parameters' => $drillDownParameters + ] + ); + } + + /** + * Get monthly categories for date range + */ + protected function getMonthlyCategories(array $filters = []): array + { + $dateRange = $this->getDateRange($filters); + $categories = []; + + $current = $dateRange['from']->copy()->startOfMonth(); + $end = $dateRange['to']->copy()->endOfMonth(); + + while ($current->lte($end)) { + $categories[] = $current->format('M Y'); + $current->addMonth(); + } + + return $categories; + } + + /** + * Get weekly categories for date range + */ + protected function getWeeklyCategories(array $filters = []): array + { + $dateRange = $this->getDateRange($filters); + $categories = []; + + $current = $dateRange['from']->copy()->startOfWeek(); + $end = $dateRange['to']->copy()->endOfWeek(); + + while ($current->lte($end)) { + $categories[] = 'Week ' . $current->weekOfYear . ' ' . $current->year; + $current->addWeek(); + } + + return $categories; + } + + /** + * Get daily categories for date range + */ + protected function getDailyCategories(array $filters = []): array + { + $dateRange = $this->getDateRange($filters); + $categories = []; + + $current = $dateRange['from']->copy(); + $end = $dateRange['to']->copy(); + + while ($current->lte($end)) { + $categories[] = $current->format('M d'); + $current->addDay(); + } + + return $categories; + } + + /** + * Calculate percentage change + */ + protected function calculatePercentageChange(int $current, int $previous): float + { + if ($previous === 0) { + return $current > 0 ? 100.0 : 0.0; + } + + return round((($current - $previous) / $previous) * 100, 1); + } + + /** + * Get status color mapping + */ + protected function getStatusColors(): array + { + return [ + 'operational' => '#4caf50', + 'under_repair' => '#ff9800', + 'maintenance_due' => '#f44336', + 'out_of_service' => '#9e9e9e', + 'completed' => '#4caf50', + 'pending' => '#ff9800', + 'in_progress' => '#2196f3', + 'cancelled' => '#f44336' + ]; + } + + /** + * Get priority color mapping + */ + protected function getPriorityColors(): array + { + return [ + 'high' => '#f44336', + 'medium' => '#ff9800', + 'low' => '#4caf50' + ]; + } + + /** + * Format currency + */ + protected function formatCurrency(float $amount): string + { + return 'RM ' . number_format($amount, 2); + } + + /** + * Format duration in hours + */ + protected function formatDuration(float $hours): string + { + if ($hours < 24) { + return round($hours, 1) . ' hours'; + } + + $days = floor($hours / 24); + $remainingHours = $hours % 24; + + if ($remainingHours > 0) { + return $days . ' days ' . round($remainingHours, 1) . ' hours'; + } + + return $days . ' days'; + } + + /** + * Get common drill-down parameters + */ + protected function getCommonDrillDownParameters(): array + { + return ['date_from', 'date_to', 'unit_id', 'camp_id', 'formation_id']; + } + + /** + * Build drill-down endpoint + */ + protected function buildDrillDownEndpoint(string $baseEndpoint, array $parameters = []): string + { + $endpoint = $baseEndpoint; + + if (!empty($parameters)) { + $endpoint .= '?' . http_build_query($parameters); + } + + return $endpoint; + } + + /** + * Get summary statistics for drill-down + */ + protected function getSummaryStatistics($query, array $filters = []): array + { + $total = $query->count(); + + // Get breakdown by unit + $byUnit = $query->clone() + ->join('units', function ($join) { + $join->on('units.id', '=', $this->getUnitIdColumn()); + }) + ->selectRaw('units.name as unit_name, COUNT(*) as count') + ->groupBy('units.name') + ->get() + ->toArray(); + + return [ + 'total' => $total, + 'by_unit' => $byUnit + ]; + } + + /** + * Get unit ID column name (to be implemented by child classes) + */ + abstract protected function getUnitIdColumn(): string; + + /** + * Get asset model class (to be implemented by child classes) + */ + abstract protected function getAssetModelClass(): string; + + /** + * Get repair model class (to be implemented by child classes) + */ + abstract protected function getRepairModelClass(): string; +} \ No newline at end of file diff --git a/be/Modules/Dashboard/Services/KJC/KJCDashboardService.php b/be/Modules/Dashboard/Services/KJC/KJCDashboardService.php new file mode 100644 index 0000000..2e276e9 --- /dev/null +++ b/be/Modules/Dashboard/Services/KJC/KJCDashboardService.php @@ -0,0 +1,315 @@ +kjcDashboardRepository = $kjcDashboardRepository; + } + /** + * Get total KJC assets count + */ + public function getTotalAssets(array $filters = [], $user = null): int + { + return $this->kjcDashboardRepository->getTotalHoldings($filters, $user); + } + + /** + * Get operational KJC assets count (BP status) + */ + public function getOperationalAssets(array $filters = [], $user = null): int + { + $holdings = $this->kjcDashboardRepository->getHoldingsBySpecificStatus('BP', $filters, $user); + return $holdings['pagination']['total']; + } + + /** + * Get under repair KJC assets count (BDG status) + */ + public function getUnderRepairAssets(array $filters = [], $user = null): int + { + $holdings = $this->kjcDashboardRepository->getHoldingsBySpecificStatus('BDG', $filters, $user); + return $holdings['pagination']['total']; + } + + /** + * Get maintenance due KJC assets count (TBDG status) + */ + public function getMaintenanceDueAssets(array $filters = [], $user = null): int + { + $holdings = $this->kjcDashboardRepository->getHoldingsBySpecificStatus('TBDG', $filters, $user); + return $holdings['pagination']['total']; + } + + /** + * Get active KJC repairs count + */ + public function getActiveRepairs(array $filters = []): int + { + $query = KJCRepair::whereIn('status', ['pending', 'in_progress']); + $this->applyCommonFilters($query, $filters); + + return $query->count(); + } + + /** + * Get pending KJC reports count + */ + public function getPendingReports(array $filters = []): int + { + $query = KJCReport::where('status', 'pending'); + $this->applyCommonFilters($query, $filters); + + return $query->count(); + } + + /** + * Get KJC entitlement vs holdings pie chart + */ + public function getEntitlementVsHoldingsPieChart(array $filters = [], $user = null): array + { + // Get total entitlement + $totalEntitlement = $this->kjcDashboardRepository->getTotalEntitlement($filters, $user); + + // Get total holdings + $totalHoldings = $this->kjcDashboardRepository->getTotalHoldings($filters, $user); + + // Prepare data for pie chart (only showing Perjawatan and Pegangan) + $data = [ + [ + 'name' => 'Perjawatan', + 'value' => $totalEntitlement, + 'color' => '#4caf50' + ], + [ + 'name' => 'Pegangan', + 'value' => $totalHoldings, + 'color' => '#2196f3' + ] + ]; + + return $this->formatPieChartData( + 'Perjawatan vs Pegangan KJC', + $data, + '/v1/dashboard/kjc/drill-down/entitlement-vs-holdings', + ['type'] + ); + } + + /** + * Get KJC holdings status breakdown pie chart + */ + public function getHoldingsStatusBreakdownPieChart(array $filters = [], $user = null): array + { + $statusCounts = $this->kjcDashboardRepository->getHoldingsByStatus($filters, $user); + + $statusNames = [ + 'BP' => 'BP', + 'BDG' => 'BDG', + 'TBDG' => 'TBDG', + 'BT' => 'BT', + 'TBT' => 'TBT', + 'BG' => 'BG', + 'TBG' => 'TBG', + ]; + + $data = []; + foreach ($statusCounts as $item) { + $statusCode = $item['status']; + if ($statusCode === null || $statusCode === '') { + $statusName = 'Belum Diberi Status'; + } else { + $statusName = $statusNames[$statusCode] ?? $statusCode; + } + $data[] = [ + 'name' => $statusName, + 'value' => $item['count'], + 'percentage' => 0, + 'status_code' => $statusCode, + ]; + } + + // Calculate percentages + $total = array_sum(array_column($data, 'value')); + foreach ($data as &$row) { + $row['percentage'] = $total > 0 ? round(($row['value'] / $total) * 100, 2) : 0; + } + + return $this->formatPieChartData( + 'KJC Status Pegangan', + $data, + '/v1/dashboard/kjc/drill-down/holdings-status', + ['status'] + ); + } + + /** + * Get KJC unit performance chart + */ + public function getUnitPerformanceChart(array $filters = []): array + { + $units = Unit::withCount([ + 'kjcAssetHoldings as bp_count' => function ($query) use ($filters) { + $query->where('status', 'BP'); + $this->applyCommonFilters($query, $filters); + }, + 'kjcAssetHoldings as bdg_count' => function ($query) use ($filters) { + $query->where('status', 'BDG'); + $this->applyCommonFilters($query, $filters); + }, + 'kjcAssetHoldings as tbdg_count' => function ($query) use ($filters) { + $query->where('status', 'TBDG'); + $this->applyCommonFilters($query, $filters); + } + ])->get(); + + $unitNames = []; + $bpCounts = []; + $bdgCounts = []; + $tbdgCounts = []; + + foreach ($units as $unit) { + $unitNames[] = $unit->name; + $bpCounts[] = $unit->bp_count; + $bdgCounts[] = $unit->bdg_count; + $tbdgCounts[] = $unit->tbdg_count; + } + + return $this->formatBarChartData( + 'KJC Unit 2025', + [ + ['name' => 'Baik dalam Perhatian (BP)', 'data' => $bpCounts], + ['name' => 'Boleh Digunakan (BDG)', 'data' => $bdgCounts], + ['name' => 'Tidak Boleh Digunakan (TBDG)', 'data' => $tbdgCounts] + ], + $unitNames, + '/v1/dashboard/kjc/drill-down/unit-performance', + ['unit_id'] + ); + } + + /** + * Get KJC monthly trends chart + */ + public function getMonthlyTrendsChart(array $filters = [], $user = null): array + { + $dateRange = $this->getDateRange($filters); + $categories = $this->getMonthlyCategories($filters); + + $monthlyData = $this->kjcDashboardRepository->getMonthlyTrends($filters, $user); + + // Initialize data arrays + $bpData = array_fill(0, count($categories), 0); + $bdgData = array_fill(0, count($categories), 0); + $tbdgData = array_fill(0, count($categories), 0); + + // Fill data arrays + foreach ($monthlyData as $item) { + $index = array_search($item['month'], $categories); + if ($index !== false) { + switch ($item['status']) { + case 'BP': + $bpData[$index] = $item['count']; + break; + case 'BDG': + $bdgData[$index] = $item['count']; + break; + case 'TBDG': + $tbdgData[$index] = $item['count']; + break; + } + } + } + + return $this->formatLineChartData( + 'KJC Trend Bulanan 2025', + [ + ['name' => 'Baik dalam Perhatian (BP)', 'data' => $bpData], + ['name' => 'Boleh Digunakan (BDG)', 'data' => $bdgData], + ['name' => 'Tidak Boleh Digunakan (TBDG)', 'data' => $tbdgData] + ], + $categories, + '/v1/dashboard/kjc/drill-down/monthly-trends', + ['month', 'status'] + ); + } + + /** + * Get KJC historical metrics bar chart (KEUPAYAAN, KESIAGAAN, SERVISIBILITI) + */ + public function getHistoricalMetricsBarChart(array $filters = [], $user = null): array + { + $monthlyData = $this->kjcDashboardRepository->getHistoricalMetricsByMonth($filters, $user); + + // Extract data for chart + $categories = []; + $keupayaanData = []; + $kesiagaanData = []; + $servisibilitiData = []; + + foreach ($monthlyData as $data) { + $monthDate = Carbon::createFromFormat('Y-m', $data['month']); + $categories[] = $monthDate->format('M'); // Remove year from categories + $keupayaanData[] = $data['keupayaan']; + $kesiagaanData[] = $data['kesiagaan']; + $servisibilitiData[] = $data['servisibiliti']; + } + + // Use year from user selection (date_from/date_to) or fall back to current year + $year = Carbon::now()->year; + if (!empty($filters['date_from'])) { + $year = Carbon::parse($filters['date_from'])->year; + } elseif (!empty($filters['date_to'])) { + $year = Carbon::parse($filters['date_to'])->year; + } + + return $this->formatBarChartData( + "Metrik Tahunan KJC {$year}", + [ + ['name' => 'KEUPAYAAN (%)', 'data' => $keupayaanData], + ['name' => 'KESIAGAAN (%)', 'data' => $kesiagaanData], + ['name' => 'SERVISIBILITI (%)', 'data' => $servisibilitiData] + ], + $categories + ); + } + + /** + * Get unit ID column name for KJC + */ + protected function getUnitIdColumn(): string + { + return 'kjc_asset_holdings.unit_id'; + } + + /** + * Get asset model class for KJC + */ + protected function getAssetModelClass(): string + { + return KJCAssetHolding::class; + } + + /** + * Get repair model class for KJC + */ + protected function getRepairModelClass(): string + { + return KJCRepair::class; + } +} \ No newline at end of file diff --git a/be/Modules/Dashboard/Services/PKJ/PKJDashboardService.php b/be/Modules/Dashboard/Services/PKJ/PKJDashboardService.php new file mode 100644 index 0000000..af5d006 --- /dev/null +++ b/be/Modules/Dashboard/Services/PKJ/PKJDashboardService.php @@ -0,0 +1,319 @@ +pkjDashboardRepository = $pkjDashboardRepository; + } + /** + * Get total PKJ assets + */ + public function getTotalAssets(array $filters = [], $user = null): int + { + return $this->pkjDashboardRepository->getTotalHoldings($filters, $user); + } + + /** + * Get operational PKJ assets (BP status) + */ + public function getOperationalAssets(array $filters = [], $user = null): int + { + $holdings = $this->pkjDashboardRepository->getHoldingsBySpecificStatus('BP', $filters, $user); + return $holdings['pagination']['total']; + } + + /** + * Get under repair PKJ assets (TBDG status) + */ + public function getUnderRepairAssets(array $filters = [], $user = null): int + { + $holdings = $this->pkjDashboardRepository->getHoldingsBySpecificStatus('TBDG', $filters, $user); + return $holdings['pagination']['total']; + } + + /** + * Get maintenance due PKJ assets (BDG status) + */ + public function getMaintenanceDueAssets(array $filters = [], $user = null): int + { + $holdings = $this->pkjDashboardRepository->getHoldingsBySpecificStatus('BDG', $filters, $user); + return $holdings['pagination']['total']; + } + + /** + * Get active PKJ repairs + */ + public function getActiveRepairs(array $filters = []): int + { + $dateRange = $this->getDateRange($filters); + + return PKJRepair::query() + ->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]) + ->where('status', 'active') + ->count(); + } + + /** + * Get pending PKJ reports + */ + public function getPendingReports(array $filters = []): int + { + $dateRange = $this->getDateRange($filters); + + return PKJReport::query() + ->whereBetween('created_at', [$dateRange['from'], $dateRange['to']]) + ->where('status', 'pending') + ->count(); + } + + /** + * Get PKJ entitlement vs holdings pie chart + */ + public function getEntitlementVsHoldingsPieChart(array $filters = [], $user = null): array + { + $totalEntitlement = $this->pkjDashboardRepository->getTotalEntitlement($filters, $user); + $totalHoldings = $this->pkjDashboardRepository->getTotalHoldings($filters, $user); + + $data = [ + [ + 'name' => 'Perjawatan', + 'value' => $totalEntitlement, + 'percentage' => ($totalEntitlement + $totalHoldings) > 0 ? round(($totalEntitlement / ($totalEntitlement + $totalHoldings)) * 100, 2) : 0 + ], + [ + 'name' => 'Pegangan', + 'value' => $totalHoldings, + 'percentage' => ($totalEntitlement + $totalHoldings) > 0 ? round(($totalHoldings / ($totalEntitlement + $totalHoldings)) * 100, 2) : 0 + ] + ]; + + return $this->formatPieChartData( + 'Perjawatan vs Pegangan PKJ', + $data, + '', // No drill-down + [] + ); + } + + /** + * Get PKJ holdings status breakdown pie chart + */ + public function getHoldingsStatusBreakdownPieChart(array $filters = [], $user = null): array + { + $statusCounts = $this->pkjDashboardRepository->getHoldingsByStatus($filters, $user); + + // Map status codes to readable names + $statusNames = [ + 'BP' => 'Baik dalam Perhatian', + 'BDG' => 'Boleh Digunakan', + 'TBDG' => 'Tidak Boleh Digunakan', + 'BT' => 'Boleh Tembak', + 'BG' => 'Baik Guna' + ]; + + $data = []; + foreach ($statusCounts as $status) { + $statusName = $statusNames[$status['status']] ?? $status['status']; + $data[] = [ + 'name' => $statusName, + 'value' => $status['count'], + 'percentage' => 0 // Will be calculated after total + ]; + } + + // Calculate percentages + $total = array_sum(array_column($data, 'value')); + foreach ($data as &$item) { + $item['percentage'] = $total > 0 ? round(($item['value'] / $total) * 100, 2) : 0; + } + + return $this->formatPieChartData( + 'PKJ Status Pegangan', + $data, + '', // No drill-down + [] + ); + } + + /** + * Get PKJ monthly trends chart + */ + public function getMonthlyTrendsChart(array $filters = [], $user = null): array + { + $monthlyData = $this->pkjDashboardRepository->getMonthlyTrends($filters, $user); + + $categories = []; + $data = []; + + foreach ($monthlyData as $trend) { + $categories[] = Carbon::createFromFormat('Y-m', $trend['month'])->format('M Y'); + $data[] = $trend['total_reports']; + } + + return $this->formatBarChartData( + 'Trend Bulanan PKJ 2025', + [ + ['name' => 'Laporan', 'data' => $data] + ], + $categories + ); + } + + /** + * Get PKJ holdings by category bar chart + */ + public function getHoldingsByCategoryBarChart(array $filters = [], $user = null): array + { + $categoryData = $this->pkjDashboardRepository->getHoldingsByCategory($filters, $user); + + $categories = []; + $categoryIds = []; + $data = []; + + foreach ($categoryData as $category) { + $categories[] = $category['category_name']; + $categoryIds[] = (int) $category['category_id']; + $data[] = (int) $category['total_holding']; + } + + $chartData = $this->formatBarChartData( + 'Pegangan PKJ Mengikut Kategori', + [ + ['name' => 'Jumlah Pegangan', 'data' => $data] + ], + $categories + ); + + // Add category IDs to the chart data for drill-down functionality + $chartData['category_ids'] = $categoryIds; + + return $chartData; + } + + /** + * Get PKJ category metrics bar chart (drill-down) + */ + public function getCategoryMetricsBarChart(int $categoryId, array $filters = [], $user = null): array + { + $metrics = $this->pkjDashboardRepository->getCategoryMetrics($categoryId, $filters, $user); + + $categories = ['KEUPAYAAN (%)', 'KESIAGAAN (%)', 'SERVISIBILITI (%)']; + $data = [ + $metrics['keupayaan'], + $metrics['kesiagaan'], + $metrics['servisibiliti'] + ]; + + $chartData = $this->formatBarChartData( + 'Metrik Kategori PKJ', + [ + ['name' => 'Metrics', 'data' => $data] + ], + $categories + ); + + // Add category information to the response + $chartData['category_id'] = $metrics['category_id']; + $chartData['category_name'] = $metrics['category_name']; + + return $chartData; + } + + /** + * Get PKJ category status breakdown pie chart (drill-down) + */ + public function getCategoryStatusBreakdownPieChart(int $categoryId, array $filters = [], $user = null): array + { + $breakdown = $this->pkjDashboardRepository->getCategoryStatusBreakdown($categoryId, $filters, $user); + + // Map status codes to readable names + $statusNames = [ + 'BP' => 'Baik dalam Perhatian', + 'BDG' => 'Boleh Digunakan', + 'TBDG' => 'Tidak Boleh Digunakan', + 'BT' => 'Boleh Tembak', + 'TBT' => 'Tidak Boleh Tembak', + 'BG' => 'Baik Guna', + 'TBG' => 'Tidak Baik Guna', + ]; + + $data = []; + foreach ($breakdown['status_breakdown'] as $status) { + $statusCode = $status['status']; + + // In the breakdown, status_code is null when the asset has no status (DB column is NULL). + if ($statusCode === null || $statusCode === '') { + $statusName = 'Status Tidak Diketahui'; + } else { + $statusName = $statusNames[$statusCode] ?? $statusCode; + } + + $data[] = [ + 'name' => $statusName, + 'value' => $status['count'], + 'percentage' => 0, // Will be calculated after total + 'status_code' => $statusCode // null when DB status column is NULL (Belum Diberi Status) + ]; + } + + // Calculate percentages + $total = array_sum(array_column($data, 'value')); + foreach ($data as &$item) { + $item['percentage'] = $total > 0 ? round(($item['value'] / $total) * 100, 2) : 0; + } + + $chartData = $this->formatPieChartData( + 'PKJ Status Pegangan Mengikut Kategori', + $data, + '/v1/dashboard/pkj/category/' . $categoryId . '/status-details', + ['status'] + ); + + // Add category information to the response + $chartData['category_id'] = $breakdown['category_id']; + $chartData['category_name'] = $breakdown['category_name']; + + return $chartData; + } + + /** + * Get unit ID column name for PKJ + */ + protected function getUnitIdColumn(): string + { + return 'pkj_asset_holdings.unit_id'; + } + + /** + * Get asset model class for PKJ + */ + protected function getAssetModelClass(): string + { + return PKJAssetHolding::class; + } + + /** + * Get repair model class for PKJ + */ + protected function getRepairModelClass(): string + { + return PKJRepair::class; + } +} diff --git a/be/Modules/Dashboard/Tests/Feature/.gitkeep b/be/Modules/Dashboard/Tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Tests/Unit/.gitkeep b/be/Modules/Dashboard/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/Transformers/.gitkeep b/be/Modules/Dashboard/Transformers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Dashboard/composer.json b/be/Modules/Dashboard/composer.json new file mode 100644 index 0000000..b53db27 --- /dev/null +++ b/be/Modules/Dashboard/composer.json @@ -0,0 +1,28 @@ +{ + "name": "nwidart/dashboard", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": {} + } + }, + "autoload": { + "psr-4": { + "Modules\\Dashboard\\": "App", + "Modules\\Dashboard\\Database\\Factories\\": "database/factories/", + "Modules\\Dashboard\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\Dashboard\\Tests\\": "tests/" + } + } +} \ No newline at end of file diff --git a/be/Modules/Dashboard/module.json b/be/Modules/Dashboard/module.json new file mode 100644 index 0000000..aeeead2 --- /dev/null +++ b/be/Modules/Dashboard/module.json @@ -0,0 +1,11 @@ +{ + "name": "Dashboard", + "alias": "dashboard", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Dashboard\\Providers\\DashboardServiceProvider" + ], + "files": [] +} \ No newline at end of file diff --git a/be/Modules/Dashboard/package.json b/be/Modules/Dashboard/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/be/Modules/Dashboard/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/be/Modules/Notification/Actions/.gitkeep b/be/Modules/Notification/Actions/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Config/.gitkeep b/be/Modules/Notification/Config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Config/config.php b/be/Modules/Notification/Config/config.php new file mode 100644 index 0000000..fa3483f --- /dev/null +++ b/be/Modules/Notification/Config/config.php @@ -0,0 +1,5 @@ + 'Notification', +]; diff --git a/be/Modules/Notification/Console/.gitkeep b/be/Modules/Notification/Console/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Database/Factories/.gitkeep b/be/Modules/Notification/Database/Factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Database/Migrations/.gitkeep b/be/Modules/Notification/Database/Migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Database/Seeders/.gitkeep b/be/Modules/Notification/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Database/Seeders/NotificationDatabaseSeeder.php b/be/Modules/Notification/Database/Seeders/NotificationDatabaseSeeder.php new file mode 100644 index 0000000..ab8dc40 --- /dev/null +++ b/be/Modules/Notification/Database/Seeders/NotificationDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/be/Modules/Notification/Emails/.gitkeep b/be/Modules/Notification/Emails/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Entities/.gitkeep b/be/Modules/Notification/Entities/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Entities/Notification.php b/be/Modules/Notification/Entities/Notification.php new file mode 100644 index 0000000..e8c17de --- /dev/null +++ b/be/Modules/Notification/Entities/Notification.php @@ -0,0 +1,21 @@ + 'datetime', + ]; + + public function user() + { + return $this->belongsTo(User::class); + } +} \ No newline at end of file diff --git a/be/Modules/Notification/Helpers/.gitkeep b/be/Modules/Notification/Helpers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Http/Controllers/.gitkeep b/be/Modules/Notification/Http/Controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Http/Controllers/NotificationController.php b/be/Modules/Notification/Http/Controllers/NotificationController.php new file mode 100644 index 0000000..1f1d209 --- /dev/null +++ b/be/Modules/Notification/Http/Controllers/NotificationController.php @@ -0,0 +1,469 @@ +get('per_page', 10); + $page = $request->get('page', 1); + $filter = $request->get('filter', 'all'); // all, unread, read + + $query = $user->notifications(); + + // Apply filter + switch ($filter) { + case 'unread': + $query->whereNull('read_at'); + break; + case 'read': + $query->whereNotNull('read_at'); + break; + default: + // Show all notifications + break; + } + + $notifications = $query->orderBy('created_at', 'desc') + ->paginate($perPage, ['*'], 'page', $page); + + // Transform notifications to match frontend format + $transformedNotifications = $notifications->map(function ($notification) { + $data = $notification->data; + + // Detect notification category (for internal categorization) + $notificationCategory = $this->detectNotificationCategory($data); + + // Get display type (action type for KJC Repair, or original type for others) + $displayType = $this->getDisplayType($data, $notificationCategory); + + return [ + 'id' => $notification->id, + 'type' => $displayType, + 'title' => $this->getNotificationTitle($data, $notificationCategory), + 'message' => $this->getNotificationMessage($data, $notificationCategory), + 'is_read' => $notification->read_at !== null, + 'created_at' => $notification->created_at->format('Y-m-d H:i:s'), + 'time_ago' => $notification->created_at->diffForHumans(), + 'icon' => $this->getNotificationIcon($notificationCategory), + 'color' => $this->getNotificationColor($notificationCategory), + 'navigation' => $this->getNotificationNavigation($data, $notificationCategory), + 'data' => $data + ]; + }); + + return response()->json([ + 'success' => true, + 'data' => $transformedNotifications, + 'pagination' => [ + 'current_page' => $notifications->currentPage(), + 'last_page' => $notifications->lastPage(), + 'per_page' => $notifications->perPage(), + 'total' => $notifications->total(), + 'has_more' => $notifications->hasMorePages() + ], + 'unread_count' => $user->unreadNotifications()->count() + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to fetch notifications: ' . $e->getMessage() + ], 500); + } + } + + /** + * Mark notification as read + */ + public function markAsRead($id): JsonResponse + { + try { + $user = Auth::user(); + $notification = $user->notifications()->find($id); + + if (!$notification) { + return response()->json([ + 'success' => false, + 'message' => 'Notifikasi tidak ditemukan' + ], 404); + } + + $notification->markAsRead(); + + return response()->json([ + 'success' => true, + 'message' => 'Notifikasi ditandakan sebagai telah dibaca' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Gagal menandakan notifikasi sebagai telah dibaca: ' . $e->getMessage() + ], 500); + } + } + + /** + * Mark all notifications as read + */ + public function markAllAsRead(): JsonResponse + { + try { + $user = Auth::user(); + $user->unreadNotifications->markAsRead(); + + return response()->json([ + 'success' => true, + 'message' => 'Semua notifikasi ditandakan sebagai telah dibaca' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Gagal menandakan semua notifikasi sebagai telah dibaca: ' . $e->getMessage() + ], 500); + } + } + + /** + * Get notification count + */ + public function getCount(): JsonResponse + { + try { + $user = Auth::user(); + $unreadCount = $user->unreadNotifications()->count(); + + return response()->json([ + 'success' => true, + 'unread_count' => $unreadCount + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Gagal mendapatkan bilangan notifikasi: ' . $e->getMessage() + ], 500); + } + } + + /** + * Detect notification category from data (for internal categorization) + */ + private function detectNotificationCategory($data): string + { + // Check if it's a KJC Repair notification + if (isset($data['kjc_repair_id'])) { + return 'kjc_repair'; + } + + // Check if it's a KJC Temporary Loan notification + if (isset($data['kjc_temporary_loan_id'])) { + return 'kjc_temporary_loan'; + } + + // Check if it's a User Activation notification + if (isset($data['user_id']) && isset($data['type']) && $data['type'] === 'user_activation_required') { + return 'user_activation'; + } + + // Check if it's a Feedback notification + if (isset($data['feedback_id'])) { + return 'feedback'; + } + + // Check for other notification types + if (isset($data['type'])) { + return $data['type']; + } + + return 'general'; + } + + /** + * Get display type for frontend (action type for KJC Repair/Temporary Loan, original type for others) + */ + private function getDisplayType($data, $category): string + { + // For KJC Repair and Temporary Loan notifications, return the action type (next_approval, approved, etc.) + if (($category === 'kjc_repair' || $category === 'kjc_temporary_loan') && isset($data['type'])) { + return $data['type']; + } + + // For User Activation notifications, return the type + if ($category === 'user_activation' && isset($data['type'])) { + return $data['type']; + } + + // For Feedback notifications, return the type + if ($category === 'feedback' && isset($data['type'])) { + return $data['type']; + } + + // For other notifications, return the category + return $category; + } + + /** + * Get notification title based on category and data + */ + private function getNotificationTitle($data, $notificationCategory): string + { + if ($notificationCategory === 'kjc_repair') { + $repairType = $data['type'] ?? 'general'; + switch ($repairType) { + case 'next_approval': + return 'Pembaikan KJC - Permohonan Disemak'; + case 'approved': + return 'Pembaikan KJC - Disetujui'; + case 'rejected': + return 'Pembaikan KJC - Ditolak'; + case 'returned_for_revision': + return 'Pembaikan KJC - Dikembalikan untuk semakan semula'; + default: + return 'Notifikasi Pembaikan KJC'; + } + } + + if ($notificationCategory === 'kjc_temporary_loan') { + $loanType = $data['type'] ?? 'general'; + switch ($loanType) { + case 'next_approval': + return 'Pinjaman Sementara KJC - Permohonan Disemak'; + case 'approved': + return 'Pinjaman Sementara KJC - Disetujui'; + case 'rejected': + return 'Pinjaman Sementara KJC - Ditolak'; + case 'returned_for_revision': + return 'Pinjaman Sementara KJC - Dikembalikan untuk semakan semula'; + default: + return 'Notifikasi Pinjaman Sementara KJC'; + } + } + + if ($notificationCategory === 'user_activation') { + return 'Pengaktifan Pengguna Diperlukan'; + } + + if ($notificationCategory === 'feedback') { + return 'Maklum Balas Baru Diterima'; + } + + switch ($notificationCategory) { + case 'report_generation': + return 'Penyata Mingguan Dicipta'; + case 'system': + return 'Notifikasi Sistem'; + default: + return 'Notifikasi'; + } + } + + /** + * Get notification message based on category and data + */ + private function getNotificationMessage($data, $notificationCategory): string + { + // If message is already set, use it + if (!empty($data['message'])) { + return $data['message']; + } + + // Generate message for KJC Repair notifications + if ($notificationCategory === 'kjc_repair') { + $repairType = $data['type'] ?? 'general'; + $repairId = $data['kjc_repair_id'] ?? 'N/A'; + $assetName = $data['asset_name'] ?? 'Unknown'; + $unitName = $data['unit_name'] ?? 'Unknown'; + + switch ($repairType) { + case 'next_approval': + return "Permohonan pembaikan KJC perlu disemak oleh anda. ID Permohonan: {$repairId}, Asset: {$assetName}, Unit: {$unitName}"; + case 'approved': + return "Permohonan pembaikan KJC telah disetujui. ID Permohonan: {$repairId}, Asset: {$assetName}, Unit: {$unitName}"; + case 'rejected': + return "Permohonan pembaikan KJC telah ditolak. ID Permohonan: {$repairId}, Asset: {$assetName}, Unit: {$unitName}"; + case 'returned_for_revision': + return "Permohonan pembaikan KJC telah dikembalikan untuk semakan semula. ID Permohonan: {$repairId}, Asset: {$assetName}, Unit: {$unitName}"; + default: + return "Notifikasi berkaitan permohonan pembaikan KJC. ID Permohonan: {$repairId}"; + } + } + + // Generate message for KJC Temporary Loan notifications + if ($notificationCategory === 'kjc_temporary_loan') { + $loanType = $data['type'] ?? 'general'; + $assetName = $data['asset_name'] ?? 'Unknown'; + $originalUnitName = $data['original_unit_name'] ?? 'Unknown'; + $borrowerUnitName = $data['borrower_unit_name'] ?? 'Unknown'; + + switch ($loanType) { + case 'next_approval': + return "Permohonan pinjaman sementara KJC perlu disemak oleh anda, Asset: {$assetName}, Pasukan Asal: {$originalUnitName}, Pasukan Peminjam: {$borrowerUnitName}"; + case 'approved': + return "Permohonan pinjaman sementara KJC telah disetujui, Asset: {$assetName}, Pasukan Asal: {$originalUnitName}, Pasukan Peminjam: {$borrowerUnitName}"; + case 'rejected': + return "Permohonan pinjaman sementara KJC telah ditolak, Asset: {$assetName}, Pasukan Asal: {$originalUnitName}, Pasukan Peminjam: {$borrowerUnitName}"; + case 'returned_for_revision': + return "Permohonan pinjaman sementara KJC telah dikembalikan untuk semakan semula, Asset: {$assetName}, Pasukan Asal: {$originalUnitName}, Pasukan Peminjam: {$borrowerUnitName}"; + default: + return "Notifikasi berkaitan permohonan pinjaman sementara KJC, Asset: {$assetName}, Pasukan Asal: {$originalUnitName}, Pasukan Peminjam: {$borrowerUnitName}"; + } + } + + // Generate message for User Activation notifications + if ($notificationCategory === 'user_activation') { + // If message is already set, use it + if (!empty($data['message'])) { + return $data['message']; + } + + $userName = $data['user_name'] ?? 'Unknown'; + $userEmail = $data['user_email'] ?? 'Unknown'; + $userArmyNumber = $data['user_army_number'] ?? 'Unknown'; + $unitName = $data['user_unit_name'] ?? 'Unknown'; + + return "Pengguna baru memerlukan pengaktifan. Nama: {$userName}, Email: {$userEmail}, No. Tentera: {$userArmyNumber}, Unit: {$unitName}"; + } + + // Generate message for Feedback notifications + if ($notificationCategory === 'feedback') { + // If message is already set, use it + if (!empty($data['message'])) { + return $data['message']; + } + + $feedbackTitle = $data['feedback_title'] ?? 'Unknown'; + $feedbackType = $data['feedback_type'] ?? 'Unknown'; + $feedbackPriority = $data['feedback_priority'] ?? 'normal'; + $userName = $data['user_name'] ?? 'Anonymous'; + $feedbackId = $data['feedback_id'] ?? 'N/A'; + + return "Maklum balas baru telah diterima. ID: {$feedbackId}, Tajuk: {$feedbackTitle}, Jenis: {$feedbackType}, Keutamaan: {$feedbackPriority}, Pengguna: {$userName}"; + } + + return 'No message available'; + } + + /** + * Get notification icon based on type + */ + private function getNotificationIcon($type): string + { + switch ($type) { + case 'report_generation': + return 'mdi-file-document'; + case 'kjc_repair': + return 'mdi-tools'; + case 'kjc_temporary_loan': + return 'mdi-handshake'; + case 'user_activation': + case 'user_activation_required': + return 'mdi-account-plus'; + case 'feedback': + case 'feedback_submitted': + return 'mdi-message-alert'; + case 'system': + return 'mdi-cog'; + default: + return 'mdi-bell'; + } + } + + /** + * Get notification color based on type + */ + private function getNotificationColor($type): string + { + switch ($type) { + case 'report_generation': + return 'success'; + case 'kjc_repair': + return 'warning'; + case 'kjc_temporary_loan': + return 'info'; + case 'user_activation': + case 'user_activation_required': + return 'purple'; + case 'feedback': + case 'feedback_submitted': + return 'orange'; + case 'system': + return 'info'; + default: + return 'primary'; + } + } + + /** + * Get notification navigation data based on category + */ + private function getNotificationNavigation($data, $notificationCategory): array + { + if ($notificationCategory === 'kjc_repair') { + $repairId = $data['kjc_repair_id'] ?? null; + return [ + 'route' => '/kjcrepairs', + 'params' => [], + 'query' => $repairId ? ['id' => $repairId] : [] + ]; + } + + if ($notificationCategory === 'kjc_temporary_loan') { + $loanId = $data['kjc_temporary_loan_id'] ?? null; + return [ + 'route' => '/kjctemporaryloans', + 'params' => [], + 'query' => $loanId ? ['id' => $loanId] : [] + ]; + } + + if ($notificationCategory === 'user_activation') { + $userId = $data['user_id'] ?? null; + return [ + 'route' => '/users', + 'params' => [], + 'query' => $userId ? ['id' => $userId] : [] + ]; + } + + if ($notificationCategory === 'feedback') { + $feedbackId = $data['feedback_id'] ?? null; + return [ + 'route' => '/feedback', + 'params' => [], + 'query' => $feedbackId ? ['id' => $feedbackId] : [] + ]; + } + + switch ($notificationCategory) { + case 'report_generation': + return [ + 'route' => '/kjcreports', + 'params' => [], + 'query' => [] + ]; + case 'system': + return [ + 'route' => '/dashboard', + 'params' => [], + 'query' => [] + ]; + default: + return [ + 'route' => '/dashboard', + 'params' => [], + 'query' => [] + ]; + } + } +} diff --git a/be/Modules/Notification/Http/Requests/.gitkeep b/be/Modules/Notification/Http/Requests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Jobs/.gitkeep b/be/Modules/Notification/Jobs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Notifications/.gitkeep b/be/Modules/Notification/Notifications/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Policies/.gitkeep b/be/Modules/Notification/Policies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Providers/.gitkeep b/be/Modules/Notification/Providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Providers/EventServiceProvider.php b/be/Modules/Notification/Providers/EventServiceProvider.php new file mode 100644 index 0000000..c8a3d10 --- /dev/null +++ b/be/Modules/Notification/Providers/EventServiceProvider.php @@ -0,0 +1,27 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/Modules/Notification/Providers/NotificationServiceProvider.php b/be/Modules/Notification/Providers/NotificationServiceProvider.php new file mode 100644 index 0000000..9c14bd8 --- /dev/null +++ b/be/Modules/Notification/Providers/NotificationServiceProvider.php @@ -0,0 +1,154 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'Database/Migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'Lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'Lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, 'Resources/Views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\' . $this->name . '\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } +} diff --git a/be/Modules/Notification/Providers/RouteServiceProvider.php b/be/Modules/Notification/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..c826a75 --- /dev/null +++ b/be/Modules/Notification/Providers/RouteServiceProvider.php @@ -0,0 +1,50 @@ +mapApiRoutes(); + $this->mapWebRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '/Routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->name('api.')->group(module_path($this->name, '/Routes/api.php')); + } +} diff --git a/be/Modules/Notification/Repositories/.gitkeep b/be/Modules/Notification/Repositories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Repositories/Contracts/.gitkeep b/be/Modules/Notification/Repositories/Contracts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Routes/.gitkeep b/be/Modules/Notification/Routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Routes/api.php b/be/Modules/Notification/Routes/api.php new file mode 100644 index 0000000..81be54b --- /dev/null +++ b/be/Modules/Notification/Routes/api.php @@ -0,0 +1,11 @@ +prefix('v1')->group(function () { + Route::get('notifications', [NotificationController::class, 'index'])->name('notifications.index'); + Route::patch('notifications/{id}/read', [NotificationController::class, 'markAsRead'])->name('notifications.markAsRead'); + Route::patch('notifications/mark-all-read', [NotificationController::class, 'markAllAsRead'])->name('notifications.markAllAsRead'); + Route::get('notifications/count', [NotificationController::class, 'getCount'])->name('notifications.count'); +}); diff --git a/be/Modules/Notification/Routes/web.php b/be/Modules/Notification/Routes/web.php new file mode 100644 index 0000000..4d1a0d2 --- /dev/null +++ b/be/Modules/Notification/Routes/web.php @@ -0,0 +1,8 @@ +group(function () { + Route::resource('notifications', NotificationController::class)->names('notification'); +}); diff --git a/be/Modules/Notification/Services/.gitkeep b/be/Modules/Notification/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Tests/Feature/.gitkeep b/be/Modules/Notification/Tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Tests/Unit/.gitkeep b/be/Modules/Notification/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/Transformers/.gitkeep b/be/Modules/Notification/Transformers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Notification/composer.json b/be/Modules/Notification/composer.json new file mode 100644 index 0000000..fc2c8df --- /dev/null +++ b/be/Modules/Notification/composer.json @@ -0,0 +1,30 @@ +{ + "name": "nwidart/notification", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\Notification\\": "App", + "Modules\\Notification\\Database\\Factories\\": "database/factories/", + "Modules\\Notification\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\Notification\\Tests\\": "tests/" + } + } +} diff --git a/be/Modules/Notification/module.json b/be/Modules/Notification/module.json new file mode 100644 index 0000000..181e6e8 --- /dev/null +++ b/be/Modules/Notification/module.json @@ -0,0 +1,11 @@ +{ + "name": "Notification", + "alias": "notification", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Notification\\Providers\\NotificationServiceProvider" + ], + "files": [] +} diff --git a/be/Modules/Notification/package.json b/be/Modules/Notification/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/be/Modules/Notification/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/be/Modules/Role/Actions/.gitkeep b/be/Modules/Role/Actions/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Config/.gitkeep b/be/Modules/Role/Config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Config/config.php b/be/Modules/Role/Config/config.php new file mode 100644 index 0000000..516600a --- /dev/null +++ b/be/Modules/Role/Config/config.php @@ -0,0 +1,5 @@ + 'Role', +]; diff --git a/be/Modules/Role/Console/.gitkeep b/be/Modules/Role/Console/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Database/Factories/.gitkeep b/be/Modules/Role/Database/Factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Database/Migrations/.gitkeep b/be/Modules/Role/Database/Migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Database/Seeders/.gitkeep b/be/Modules/Role/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Database/Seeders/RoleDatabaseSeeder.php b/be/Modules/Role/Database/Seeders/RoleDatabaseSeeder.php new file mode 100644 index 0000000..efe6856 --- /dev/null +++ b/be/Modules/Role/Database/Seeders/RoleDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/be/Modules/Role/Emails/.gitkeep b/be/Modules/Role/Emails/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Entities/.gitkeep b/be/Modules/Role/Entities/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Entities/Role.php b/be/Modules/Role/Entities/Role.php new file mode 100644 index 0000000..c5aa1aa --- /dev/null +++ b/be/Modules/Role/Entities/Role.php @@ -0,0 +1,17 @@ +authorize('update', $this->modelClass); + + try { + $item = $this->repository->findById($id); + + if (! $item) { + return $this->errorResponse($this->getNotFoundMessage(), 404); + } + + $validated = $this->validateRequest($request); + $data = $this->prepareUpdateData($validated, $item); + + // Use repository update method to handle permissions + $updatedItem = $this->repository->update($id, $data); + + ActivityLogger::log("Updated {$this->resourceName}: {$this->getItemName($updatedItem)}", $updatedItem); + + return response()->json([ + 'success' => true, + 'data' => new $this->resourceClass($updatedItem), + 'message' => $this->getSuccessMessage('update'), + ]); + + } catch (Exception $e) { + Log::error("Error updating {$this->resourceName}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('update').': '.$e->getMessage(), 500); + } + } + + /** + * Check dependencies before deletion + */ + protected function checkDependencies($role): ?JsonResponse + { + // Check if role has users assigned + if ($role->users()->count() > 0) { + return response()->json([ + 'success' => false, + 'message' => 'Cannot delete role. It has users assigned to it.', + ], 422); + } + + return null; + } + + /** + * Get all permissions for role assignment + */ + public function permissions(): JsonResponse + { + $permissions = Permission::all(); + + return response()->json([ + 'success' => true, + 'data' => $permissions->map(function ($permission) { + return [ + 'id' => $permission->id, + 'name' => $permission->name, + 'guard_name' => $permission->guard_name, + 'route_name' => $permission->route_name, + ]; + }), + ]); + } + + /** + * Assign permissions to a role + */ + public function assignPermissions(Request $request, string $id): JsonResponse + { + $request->validate([ + 'permissions' => 'required|array', + 'permissions.*' => ['required', 'uuid', Rule::exists('permissions', 'id')], + ]); + + $role = $this->repository->find($id); + $this->repository->syncPermissions($role, $request->permissions); + + return response()->json([ + 'success' => true, + 'message' => 'Permissions assigned successfully.', + 'data' => new RoleResource($role->load('permissions')), + ]); + } + + /** + * Get role with permissions + */ + public function show(string $id): JsonResponse + { + $role = $this->repository->find($id); + + return response()->json([ + 'success' => true, + 'data' => new RoleResource($role->load('permissions')), + ]); + } + + /** + * Get all roles with permissions + */ + public function index(Request $request): JsonResponse + { + $search = $request->get('search', ''); + $roles = $this->repository->withPermissions($search); + + return response()->json([ + 'success' => true, + 'data' => RoleResource::collection($roles), + ]); + } + + /** + * Public endpoint for registration form (no auth required) + */ + public function publicRole(): JsonResponse + { + $roles = $this->repository->all(); + + return response()->json([ + 'success' => true, + 'data' => RoleResource::collection($roles), + ]); + } +} diff --git a/be/Modules/Role/Http/Requests/.gitkeep b/be/Modules/Role/Http/Requests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Http/Requests/RoleRequest.php b/be/Modules/Role/Http/Requests/RoleRequest.php new file mode 100644 index 0000000..3fc7f76 --- /dev/null +++ b/be/Modules/Role/Http/Requests/RoleRequest.php @@ -0,0 +1,101 @@ + [ + 'required', + 'string', + 'max:255' + ], + 'guard_name' => [ + 'required', + 'string', + 'in:api,web' + ], + 'permissions' => [ + 'sometimes', + 'array' + ], + 'permissions.*' => [ + 'required', + 'uuid', + Rule::exists('permissions', 'id'), + ], + 'fullname' => [ + 'required', + 'string', + 'max:255', + ], + 'context' => [ + 'required', + 'string', + Rule::in(['member', 'admin']), + ], + ]; + } + + /** + * Configure the validator instance. + */ + public function withValidator($validator) + { + $validator->after(function ($validator) { + $roleId = $this->route('role'); + $name = $this->input('name'); + $guardName = $this->input('guard_name', 'api'); + + // Check for unique name within the same guard + $query = Role::where('name', $name) + ->where('guard_name', $guardName); + + if ($roleId) { + $query->where('id', '!=', $roleId); + } + + if ($query->exists()) { + $validator->errors()->add('name', 'This role name already exists for the selected guard.'); + } + }); + } + + /** + * Get custom messages for validator errors. + */ + public function messages(): array + { + return [ + 'name.required' => 'Role name is required.', + 'name.unique' => 'This role name already exists for the selected guard.', + 'guard_name.required' => 'Guard name is required.', + 'guard_name.in' => 'Guard name must be either api or web.', + 'permissions.array' => 'Permissions must be an array.', + 'permissions.*.uuid' => 'Each permission id must be a valid UUID.', + 'permissions.*.exists' => 'One or more selected permissions do not exist.', + 'fullname.required' => 'Fullname is required.', + 'fullname.string' => 'Fullname must be a string.', + 'fullname.max' => 'Fullname must be less than 255 characters.', + 'context.required' => 'Konteks peranan diperlukan.', + 'context.in' => 'Konteks peranan mestilah ahli atau pentadbir.', + ]; + } +} diff --git a/be/Modules/Role/Jobs/.gitkeep b/be/Modules/Role/Jobs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Notifications/.gitkeep b/be/Modules/Role/Notifications/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Policies/.gitkeep b/be/Modules/Role/Policies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Policies/RolePolicy.php b/be/Modules/Role/Policies/RolePolicy.php new file mode 100644 index 0000000..07a49df --- /dev/null +++ b/be/Modules/Role/Policies/RolePolicy.php @@ -0,0 +1,59 @@ +hasPermissionTo('lihat jenis pengguna'); + } + + /** + * Determine whether the user can view the model. + */ + public function view($user, ?Role $role = null): bool + { + return $user->hasPermissionTo('lihat jenis pengguna'); + } + + /** + * Determine whether the user can create models. + */ + public function create($user): bool + { + return $user->hasPermissionTo('tambah jenis pengguna'); + } + + /** + * Determine whether the user can update the model. + */ + public function update($user, ?Role $role = null): bool + { + return $user->hasPermissionTo('kemaskini jenis pengguna'); + } + + /** + * Determine whether the user can delete any model. + */ + public function deleteAny($user): bool + { + return $user->hasPermissionTo('hapus jenis pengguna'); + } + + /** + * Determine whether the user can delete the model. + */ + public function delete($user, ?Role $role = null): bool + { + return $user->hasPermissionTo('hapus jenis pengguna'); + } +} diff --git a/be/Modules/Role/Providers/.gitkeep b/be/Modules/Role/Providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Providers/EventServiceProvider.php b/be/Modules/Role/Providers/EventServiceProvider.php new file mode 100644 index 0000000..46dc56e --- /dev/null +++ b/be/Modules/Role/Providers/EventServiceProvider.php @@ -0,0 +1,27 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/Modules/Role/Providers/RoleServiceProvider.php b/be/Modules/Role/Providers/RoleServiceProvider.php new file mode 100644 index 0000000..6376bb6 --- /dev/null +++ b/be/Modules/Role/Providers/RoleServiceProvider.php @@ -0,0 +1,160 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'Database/Migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + + // Register repository binding + $this->app->bind( + \Modules\Role\Repositories\Contracts\RoleRepositoryInterface::class, + \Modules\Role\Repositories\RoleRepository::class + ); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'Lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'Lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, 'Resources/Views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\' . $this->name . '\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } +} diff --git a/be/Modules/Role/Providers/RouteServiceProvider.php b/be/Modules/Role/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..4f003a8 --- /dev/null +++ b/be/Modules/Role/Providers/RouteServiceProvider.php @@ -0,0 +1,50 @@ +mapApiRoutes(); + + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '/Routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->name('api.')->group(module_path($this->name, '/Routes/api.php')); + } +} diff --git a/be/Modules/Role/Repositories/.gitkeep b/be/Modules/Role/Repositories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Repositories/Contracts/.gitkeep b/be/Modules/Role/Repositories/Contracts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Repositories/Contracts/RoleRepositoryInterface.php b/be/Modules/Role/Repositories/Contracts/RoleRepositoryInterface.php new file mode 100644 index 0000000..ad9741a --- /dev/null +++ b/be/Modules/Role/Repositories/Contracts/RoleRepositoryInterface.php @@ -0,0 +1,48 @@ +model = $model; + } + + /** + * Get all roles + */ + public function all() + { + return $this->model->where('name', '!=', 'DEVELOPER')->get(); + } + + /** + * Find role by ID + */ + public function find($id) + { + return $this->model->findOrFail($id); + } + + /** + * Find role by ID (alias for find) + */ + public function findById($id) + { + return $this->find($id); + } + + /** + * Create a new role + */ + public function create(array $data) + { + return DB::transaction(function () use ($data) { + $role = $this->model->create([ + 'name' => $data['name'], + 'guard_name' => $data['guard_name'] ?? 'api', + 'fullname' => $data['fullname'] ?? null, + 'context' => $data['context'] ?? 'member', + ]); + + if (isset($data['permissions']) && is_array($data['permissions'])) { + $this->syncPermissions($role, $data['permissions']); + } + + return $role->load('permissions'); + }); + } + + /** + * Update role + */ + public function update($id, array $data) + { + return DB::transaction(function () use ($id, $data) { + $role = $this->find($id); + + $role->update([ + 'name' => $data['name'], + 'guard_name' => $data['guard_name'] ?? $role->guard_name, + 'fullname' => $data['fullname'] ?? $role->fullname, + 'context' => $data['context'] ?? $role->context ?? 'member', + ]); + + if (isset($data['permissions']) && is_array($data['permissions'])) { + $this->syncPermissions($role, $data['permissions']); + } + + return $role->load('permissions'); + }); + } + + /** + * Delete role + */ + public function delete($id) + { + $role = $this->find($id); + return $role->delete(); + } + + /** + * Get roles with permissions + */ + public function withPermissions($search = '') + { + $query = $this->model->with('permissions') + ->where('name', '!=', 'DEVELOPER'); + + if (!empty($search)) { + $query->where(function ($q) use ($search) { + $q->where('name', 'ILIKE', "%{$search}%") + ->orWhere('fullname', 'ILIKE', "%{$search}%") + ->orWhere('guard_name', 'ILIKE', "%{$search}%"); + }); + } + + return $query->get(); + } + + /** + * Sync permissions for a role + */ + public function syncPermissions(Role $role, array $permissionIds) + { + $permissionIds = array_map(fn ($id) => (string) $id, $permissionIds); + + $permissions = Permission::whereIn('id', $permissionIds)->get(); + + if ($permissions->count() !== count($permissionIds)) { + throw new \InvalidArgumentException('One or more selected permissions do not exist.'); + } + + $role->syncPermissions($permissions); + + return $role; + } +} diff --git a/be/Modules/Role/Routes/.gitkeep b/be/Modules/Role/Routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Routes/api.php b/be/Modules/Role/Routes/api.php new file mode 100644 index 0000000..d75036b --- /dev/null +++ b/be/Modules/Role/Routes/api.php @@ -0,0 +1,18 @@ +group(function () { + Route::get('public/roles', [RoleController::class, 'publicRole']); +}); + +// Protected routes (auth required) +Route::middleware(['auth:sanctum'])->prefix('v1')->group(function () { + Route::apiResource('roles', RoleController::class)->names('role'); + + // Permission management routes + Route::get('permissions', [RoleController::class, 'permissions'])->name('permissions.index'); + Route::post('roles/{role}/permissions', [RoleController::class, 'assignPermissions'])->name('roles.permissions.assign'); +}); \ No newline at end of file diff --git a/be/Modules/Role/Services/.gitkeep b/be/Modules/Role/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Tests/Feature/.gitkeep b/be/Modules/Role/Tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Tests/Unit/.gitkeep b/be/Modules/Role/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Transformers/.gitkeep b/be/Modules/Role/Transformers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/Role/Transformers/RoleResource.php b/be/Modules/Role/Transformers/RoleResource.php new file mode 100644 index 0000000..e920b01 --- /dev/null +++ b/be/Modules/Role/Transformers/RoleResource.php @@ -0,0 +1,34 @@ + $this->id, + 'name' => $this->name, + 'guard_name' => $this->guard_name, + 'fullname' => $this->fullname, + 'context' => $this->context ?? 'member', + 'permissions' => $this->whenLoaded('permissions', function () { + return $this->permissions->map(function ($permission) { + return [ + 'id' => $permission->id, + 'name' => $permission->name, + 'guard_name' => $permission->guard_name, + 'route_name' => $permission->route_name, + ]; + }); + }), + 'created_at' => $this->created_at?->toISOString(), + 'updated_at' => $this->updated_at?->toISOString(), + ]; + } +} diff --git a/be/Modules/Role/composer.json b/be/Modules/Role/composer.json new file mode 100644 index 0000000..8701f4d --- /dev/null +++ b/be/Modules/Role/composer.json @@ -0,0 +1,30 @@ +{ + "name": "nwidart/role", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\Role\\": "App", + "Modules\\Role\\Database\\Factories\\": "database/factories/", + "Modules\\Role\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\Role\\Tests\\": "tests/" + } + } +} diff --git a/be/Modules/Role/module.json b/be/Modules/Role/module.json new file mode 100644 index 0000000..58e1436 --- /dev/null +++ b/be/Modules/Role/module.json @@ -0,0 +1,11 @@ +{ + "name": "Role", + "alias": "role", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Role\\Providers\\RoleServiceProvider" + ], + "files": [] +} diff --git a/be/Modules/Role/package.json b/be/Modules/Role/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/be/Modules/Role/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/be/Modules/User/Actions/.gitkeep b/be/Modules/User/Actions/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Config/.gitkeep b/be/Modules/User/Config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Config/config.php b/be/Modules/User/Config/config.php new file mode 100644 index 0000000..566de5a --- /dev/null +++ b/be/Modules/User/Config/config.php @@ -0,0 +1,5 @@ + 'User', +]; diff --git a/be/Modules/User/Console/.gitkeep b/be/Modules/User/Console/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Database/Factories/.gitkeep b/be/Modules/User/Database/Factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Database/Migrations/.gitkeep b/be/Modules/User/Database/Migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Database/Seeders/.gitkeep b/be/Modules/User/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Database/Seeders/UserDatabaseSeeder.php b/be/Modules/User/Database/Seeders/UserDatabaseSeeder.php new file mode 100644 index 0000000..d39578c --- /dev/null +++ b/be/Modules/User/Database/Seeders/UserDatabaseSeeder.php @@ -0,0 +1,16 @@ +call([]); + } +} diff --git a/be/Modules/User/Emails/.gitkeep b/be/Modules/User/Emails/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Entities/.gitkeep b/be/Modules/User/Entities/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Helpers/.gitkeep b/be/Modules/User/Helpers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Http/Controllers/.gitkeep b/be/Modules/User/Http/Controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Http/Controllers/UserController.php b/be/Modules/User/Http/Controllers/UserController.php new file mode 100644 index 0000000..78e9aa0 --- /dev/null +++ b/be/Modules/User/Http/Controllers/UserController.php @@ -0,0 +1,210 @@ +validate([ + 'roles' => 'required|array', + 'roles.*' => 'exists:roles,id,guard_name,api', + ]); + + $result = $this->userService->assignRoles($id, $request->roles); + + if (isset($result['error'])) { + $status = $result['error'] === 'User not found.' ? 404 : 400; + + return response()->json([ + 'success' => false, + 'message' => $result['error'], + ], $status); + } + + return response()->json([ + 'success' => true, + 'message' => 'Roles assigned successfully.', + 'data' => (new UserResource($result['user']))->resolve(), + ]); + } + + public function updateProfile(Request $request): JsonResponse + { + $user = $request->user(); + + $validated = $request->validate([ + 'name' => 'sometimes|string|max:255', + 'ic_number' => 'sometimes|string|max:255|unique:users,ic_number,'.$user->id, + 'position' => 'sometimes|string|max:255', + 'phone_number' => 'sometimes|string|max:255', + 'image' => 'sometimes|image|mimes:jpeg,png,jpg,gif|max:2048', + 'image_url' => 'sometimes|string|max:255', + ]); + + $user = $this->userService->updateProfile( + $user, + $validated, + $request->file('image') + ); + + return response()->json([ + 'success' => true, + 'data' => new UserResource($user), + 'message' => 'Profile updated successfully.', + ]); + } + + public function updatePassword(Request $request): JsonResponse + { + $user = $request->user(); + + $validated = $request->validate([ + 'current_password' => 'required|string', + 'password' => 'required|string|min:8|confirmed', + ]); + + $result = $this->userService->updatePassword( + $user, + $validated['current_password'], + $validated['password'] + ); + + if (isset($result['error'])) { + return response()->json([ + 'success' => false, + 'message' => $result['error'], + ], 400); + } + + return response()->json([ + 'success' => true, + 'message' => 'Password updated successfully.', + ]); + } + + public function index(Request $request): JsonResponse + { + $this->authorize('viewAny', $this->modelClass); + + try { + $perPage = min((int) $request->get('per_page', 10), 500); + $items = $this->userService->getPaginatedList( + $perPage, + $request->get('search', ''), + $request->get('status', ''), + $request->get('sort_by', 'id'), + $request->get('sort_order', 'asc') + ); + + return response()->json([ + 'success' => true, + 'data' => UserListResource::collection($items->items()), + 'pagination' => [ + 'current_page' => $items->currentPage(), + 'per_page' => $items->perPage(), + 'total' => $items->total(), + 'last_page' => $items->lastPage(), + 'from' => $items->firstItem(), + 'to' => $items->lastItem(), + 'has_more_pages' => $items->hasMorePages(), + ], + 'message' => $this->getSuccessMessage('index'), + ]); + } catch (Exception $e) { + Log::error("Error fetching {$this->resourceNamePlural}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('index'), 500); + } + } + + public function show($id): JsonResponse + { + $this->authorize('view', $this->modelClass); + + try { + $user = $this->userService->getUserWithRelations($id); + + if (! $user) { + return response()->json([ + 'success' => false, + 'message' => 'User not found.', + ], 404); + } + + return response()->json([ + 'success' => true, + 'data' => new UserResource($user), + 'message' => 'User retrieved successfully.', + ]); + } catch (Exception $e) { + Log::error('Error fetching user: '.$e->getMessage()); + + return $this->errorResponse('Failed to retrieve user.', 500); + } + } +} diff --git a/be/Modules/User/Http/Requests/.gitkeep b/be/Modules/User/Http/Requests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Http/Requests/UserRequest.php b/be/Modules/User/Http/Requests/UserRequest.php new file mode 100644 index 0000000..939fdfd --- /dev/null +++ b/be/Modules/User/Http/Requests/UserRequest.php @@ -0,0 +1,110 @@ +|string> + */ + public function rules(): array + { + // Get the user ID from the route (with null check) + $userId = $this->route() ? $this->route('user') : null; + + // Check if this is a create or update operation + $isCreate = $this->isMethod('POST'); + $isUpdate = $this->isMethod('PUT') || $this->isMethod('PATCH'); + + // If this is not a POST, PUT, or PATCH request, return minimal rules + if (! $isCreate && ! $isUpdate) { + return [ + 'name' => 'nullable|string|max:255', + 'email' => 'nullable|string|email|max:255', + 'password' => 'nullable|string|min:8', + 'ic_number' => 'nullable|string|max:255', + 'position' => 'nullable|string|max:255', + 'phone_number' => 'nullable|string|max:255', + 'image_url' => 'nullable|string|max:255', + 'status' => 'nullable|string', + ]; + } + + // Build unique email validation rule + $emailUniqueRule = $userId ? 'unique:users,email,'.$userId : 'unique:users,email'; + + // If this is an update operation, make email and password optional + if ($isUpdate) { + return [ + 'name' => 'required|string|max:255', + // 'email' => [ + // 'nullable', + // 'string', + // 'email', + // 'max:255', + // $emailUniqueRule, + // ], + 'password' => 'nullable|string|min:8', + 'ic_number' => 'required|string|max:255', + 'position' => 'required|string|max:255', + 'phone_number' => 'nullable|string|max:255', + 'image_url' => 'nullable|string|max:255', + 'status' => 'nullable|string', + ]; + } + + // Default rules for create operations + return [ + 'name' => 'required|string|max:255', + 'email' => [ + 'required', + 'string', + 'email', + 'max:255', + $emailUniqueRule, + ], + 'password' => 'nullable|string|min:8', + 'ic_number' => 'required|string|max:255', + 'position' => 'required|string|max:255', + 'phone_number' => 'nullable|string|max:255', + 'image_url' => 'nullable|string|max:255', + 'status' => 'required|string', + ]; + } + + /** + * Get custom messages for validator errors. + */ + public function messages(): array + { + return [ + 'name.required' => 'Nama diperlukan.', + 'name.max' => 'Nama tidak boleh melebihi 255 aksara.', + 'email.required' => 'Email diperlukan.', + 'email.email' => 'Email tidak sah.', + 'email.max' => 'Email tidak boleh melebihi 255 aksara.', + 'email.unique' => 'Email sudah wujud.', + 'password.nullable' => 'Kata laluan diperlukan.', + 'ic_number.required' => 'Nombor Kad Pengenalan diperlukan.', + 'ic_number.max' => 'Nombor Kad Pengenalan tidak boleh melebihi 255 aksara.', + 'position.required' => 'Posisi diperlukan.', + 'position.max' => 'Posisi tidak boleh melebihi 255 aksara.', + 'phone_number.max' => 'Nombor telefon tidak boleh melebihi 255 aksara.', + 'image_url.max' => 'URL imej tidak boleh melebihi 255 aksara.', + 'status.required' => 'Status diperlukan.', + 'status.string' => 'Status aktif tidak sah.', + ]; + } +} diff --git a/be/Modules/User/Jobs/.gitkeep b/be/Modules/User/Jobs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Notifications/.gitkeep b/be/Modules/User/Notifications/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Notifications/UserActivationNotification.php b/be/Modules/User/Notifications/UserActivationNotification.php new file mode 100644 index 0000000..62cee5d --- /dev/null +++ b/be/Modules/User/Notifications/UserActivationNotification.php @@ -0,0 +1,64 @@ +newUser = $newUser; + $this->sender = $sender; + } + + /** + * Get the notification's delivery channels. + */ + public function via($notifiable): array + { + return ['database']; + } + + /** + * Get the array representation of the notification. + */ + public function toArray($notifiable): array + { + return [ + 'user_id' => $this->newUser->id, + 'sender_id' => $this->sender ? $this->sender->id : null, + 'type' => 'user_activation_required', + 'message' => $this->getNotificationMessage(), + 'user_name' => $this->newUser->name ?? 'Unknown', + 'user_email' => $this->newUser->email ?? 'Unknown', + 'user_army_number' => $this->newUser->army_number ?? 'Unknown', + 'user_unit_name' => $this->newUser->unit->name ?? 'Unknown', + 'user_status' => $this->newUser->status ?? 'pending', + ]; + } + + /** + * Get notification message + */ + private function getNotificationMessage(): string + { + $userName = $this->newUser->name ?? 'Unknown'; + $userEmail = $this->newUser->email ?? 'Unknown'; + $userArmyNumber = $this->newUser->army_number ?? 'Unknown'; + $unitName = $this->newUser->unit->name ?? 'Unknown'; + + return "Pengguna baru memerlukan pengaktifan. Nama: {$userName}, Email: {$userEmail}, No. Tentera: {$userArmyNumber}, Unit: {$unitName}"; + } +} + diff --git a/be/Modules/User/Policies/.gitkeep b/be/Modules/User/Policies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Policies/UserPolicy.php b/be/Modules/User/Policies/UserPolicy.php new file mode 100644 index 0000000..559a272 --- /dev/null +++ b/be/Modules/User/Policies/UserPolicy.php @@ -0,0 +1,59 @@ +hasPermissionTo('lihat pengguna'); + } + + /** + * Determine whether the user can view the model. + */ + public function view($user, ?User $userModel = null): bool + { + return $user->hasPermissionTo('lihat pengguna'); + } + + /** + * Determine whether the user can create models. + */ + public function create($user): bool + { + return $user->hasPermissionTo('tambah pengguna'); + } + + /** + * Determine whether the user can update the model. + */ + public function update($user, ?User $userModel = null): bool + { + return $user->hasPermissionTo('kemaskini pengguna'); + } + + /** + * Determine whether the user can delete any model. + */ + public function deleteAny($user): bool + { + return $user->hasPermissionTo('hapus pengguna'); + } + + /** + * Determine whether the user can delete the model. + */ + public function delete($user, ?User $userModel = null): bool + { + return $user->hasPermissionTo('hapus pengguna'); + } +} diff --git a/be/Modules/User/Providers/.gitkeep b/be/Modules/User/Providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Providers/EventServiceProvider.php b/be/Modules/User/Providers/EventServiceProvider.php new file mode 100644 index 0000000..cad5007 --- /dev/null +++ b/be/Modules/User/Providers/EventServiceProvider.php @@ -0,0 +1,27 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/Modules/User/Providers/RouteServiceProvider.php b/be/Modules/User/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..a987aa1 --- /dev/null +++ b/be/Modules/User/Providers/RouteServiceProvider.php @@ -0,0 +1,49 @@ +mapApiRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '/Routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->name('api.')->group(module_path($this->name, '/Routes/api.php')); + } +} diff --git a/be/Modules/User/Providers/UserServiceProvider.php b/be/Modules/User/Providers/UserServiceProvider.php new file mode 100644 index 0000000..e135007 --- /dev/null +++ b/be/Modules/User/Providers/UserServiceProvider.php @@ -0,0 +1,172 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, 'Database/Migrations')); + $this->registerPolicies(); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + + // Register repository binding + $this->app->bind( + \Modules\User\Repositories\Contracts\UserRepositoryInterface::class, + \Modules\User\Repositories\UserRepository::class + ); + } + + /** + * Register policies. + */ + protected function registerPolicies(): void + { + Gate::policy(User::class, UserPolicy::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, 'Lang'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, 'Lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, 'Resources/Views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\'.$this->name.'\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } +} diff --git a/be/Modules/User/Repositories/.gitkeep b/be/Modules/User/Repositories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Repositories/Contracts/.gitkeep b/be/Modules/User/Repositories/Contracts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Repositories/Contracts/UserRepositoryInterface.php b/be/Modules/User/Repositories/Contracts/UserRepositoryInterface.php new file mode 100644 index 0000000..6d4784e --- /dev/null +++ b/be/Modules/User/Repositories/Contracts/UserRepositoryInterface.php @@ -0,0 +1,50 @@ +user())->excludeDevelopersUnlessDeveloper()->orderBy('name'); + + if (! empty($search)) { + $query->where(function ($q) use ($search) { + $q->where('name', 'ILIKE', "%{$search}%"); + $q->orWhere('ic_number', 'ILIKE', "%{$search}%"); + $q->orWhere('email', 'ILIKE', "%{$search}%"); + $q->orWhere('phone_number', 'ILIKE', "%{$search}%"); + $q->orWhereHas('roles', function ($roleQuery) use ($search) { + $roleQuery->whereRaw('LOWER(name) ILIKE ?', ['%' . strtolower($search) . '%']); + }); + }); + } + + return $query->paginate($perPage); + } + + /** + * Get all Users with their relationships and pagination with search + */ + public function getAllWithRelationsPaginated( + int $perPage = 10, + string $search = '', + string $status = '', + string $sortBy = 'name', + string $sortOrder = 'asc' + ) { + $allowedSortColumns = [ + 'id', + 'name', + 'email', + 'position', + 'status', + 'ic_number', + 'phone_number', + 'created_at', + ]; + $sortBy = in_array($sortBy, $allowedSortColumns, true) ? $sortBy : 'name'; + $sortOrder = strtolower($sortOrder) === 'desc' ? 'desc' : 'asc'; + + $query = User::visibleTo(auth()->user())->excludeDevelopersUnlessDeveloper() + ->with([ + 'roles:id,name,guard_name' + ]) + ->orderBy($sortBy, $sortOrder); + + if (! empty($search)) { + $query->where(function ($q) use ($search) { + $q->where('name', 'ILIKE', "%{$search}%") + ->orWhere('ic_number', 'ILIKE', "%{$search}%") + ->orWhere('email', 'ILIKE', "%{$search}%") + ->orWhere('phone_number', 'ILIKE', "%{$search}%") + ->orWhereHas('roles', function ($roleQuery) use ($search) { + $roleQuery->whereRaw('LOWER(name) ILIKE ?', ['%' . strtolower($search) . '%']); + }); + $q->orWhere('ic_number', 'ILIKE', "%{$search}%"); + $q->orWhere('email', 'ILIKE', "%{$search}%"); + $q->orWhere('phone_number', 'ILIKE', "%{$search}%"); + $q->orWhereHas('roles', function ($roleQuery) use ($search) { + $roleQuery->whereRaw('LOWER(name) ILIKE ?', ['%' . strtolower($search) . '%']); + }); + }); + } + + // Add status filter + if (! empty($status)) { + $query->where('status', $status); + } + + return $query->paginate($perPage); + } + + /** + * Get all Users with their relationships and search + */ + public function getAllWithRelations(string $search = ''): Collection + { + $query = User::visibleTo(auth()->user())->excludeDevelopersUnlessDeveloper()->orderBy('name'); + + if (! empty($search)) { + $query->where(function ($q) use ($search) { + $q->where('name', 'ILIKE', "%{$search}%") + ->orWhere('ic_number', 'ILIKE', "%{$search}%") + ->orWhere('email', 'ILIKE', "%{$search}%") + ->orWhere('phone_number', 'ILIKE', "%{$search}%") + ->orWhereHas('roles', function ($roleQuery) use ($search) { + $roleQuery->whereRaw('LOWER(name) ILIKE ?', ['%' . strtolower($search) . '%']); + }); + }); + } + + return $query->get(); + } + + /** + * Create a new User + */ + public function create(array $data): User + { + return User::create($data); + } + + /** + * Find User by ID + */ + public function findById(string $id): ?User + { + return User::with(['roles'])->find($id); + } + + /** + * Delete User (soft delete) + */ + public function delete(string $id): bool + { + $User = User::find($id); + if ($User) { + return $User->delete(); + } + + return false; + } + + /** + * Get all Ranks + */ + public function all(string $search = ''): Collection + { + $query = User::visibleTo(auth()->user())->excludeDevelopersUnlessDeveloper()->orderBy('name'); + + if (! empty($search)) { + $query->where(function ($q) use ($search) { + $q->where('name', 'ILIKE', "%{$search}%") + ->orWhere('ic_number', 'ILIKE', "%{$search}%") + ->orWhere('email', 'ILIKE', "%{$search}%") + ->orWhere('phone_number', 'ILIKE', "%{$search}%") + ->orWhereHas('roles', function ($roleQuery) use ($search) { + $roleQuery->whereRaw('LOWER(name) ILIKE ?', ['%' . strtolower($search) . '%']); + }); + }); + } + + return $query->get(); + } +} diff --git a/be/Modules/User/Routes/.gitkeep b/be/Modules/User/Routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Routes/api.php b/be/Modules/User/Routes/api.php new file mode 100644 index 0000000..d09e4f1 --- /dev/null +++ b/be/Modules/User/Routes/api.php @@ -0,0 +1,21 @@ +prefix('v1')->group(function () { + Route::apiResource('users', UserController::class)->names('user'); + + // User role management routes + Route::post('users/{user}/roles', [UserController::class, 'assignRoles'])->name('users.roles.assign'); + + // User profile management routes + Route::post('/profile', [UserController::class, 'updateProfile']); + Route::put('/profile/password', [UserController::class, 'updatePassword']); + + // Impersonation routes + Route::get('/impersonate/take/{id}', [ImpersonateController::class, 'take'])->name('impersonate'); + Route::get('/impersonate/leave', [ImpersonateController::class, 'leave'])->name('impersonate.leave'); + Route::get('/impersonate/status', [ImpersonateController::class, 'status'])->name('impersonate.status'); +}); diff --git a/be/Modules/User/Services/.gitkeep b/be/Modules/User/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Services/UserService.php b/be/Modules/User/Services/UserService.php new file mode 100644 index 0000000..0a9d9bf --- /dev/null +++ b/be/Modules/User/Services/UserService.php @@ -0,0 +1,116 @@ +repository->getAllWithRelationsPaginated( + $perPage, + $search, + $status, + $sortBy, + $sortOrder + ); + } + + public function getUserWithRelations(string $id): ?User + { + $user = $this->repository->findById($id); + + if ($user) { + $user->load(['roles.permissions']); + } + + return $user; + } + + /** + * @return array{user: User}|array{error: string} + */ + public function assignRoles(string $id, array $roleIds): array + { + $user = $this->repository->findById($id); + + if (! $user) { + return ['error' => 'User not found.']; + } + + $roles = Role::whereIn('id', $roleIds) + ->where('guard_name', 'api') + ->get(); + + if ($roles->isEmpty()) { + return ['error' => 'No valid roles found.']; + } + + $user->syncRoles($roles); + $user->load(['roles.permissions']); + + return ['user' => $user]; + } + + public function updateProfile(User $user, array $validated, ?UploadedFile $image = null): User + { + if ($image) { + if ($user->image_url && Storage::disk('public')->exists($user->image_url)) { + Storage::disk('public')->delete($user->image_url); + } + + $validated['image_url'] = $image->store('user-images', 'public'); + } + + unset($validated['image']); + + $data = $this->prepareProfileUpdateData($validated); + $user->update($data); + $user->load(['roles.permissions']); + + return $user; + } + + /** + * @return array{}|array{error: string} + */ + public function updatePassword(User $user, string $currentPassword, string $newPassword): array + { + if (! Hash::check($currentPassword, $user->password)) { + return ['error' => 'Current password is incorrect.']; + } + + $user->update([ + 'password' => Hash::make($newPassword), + ]); + + return []; + } + + protected function prepareProfileUpdateData(array $validated): array + { + unset($validated['uuid']); + + if (! array_key_exists('email', $validated)) { + unset($validated['email']); + } + + return $validated; + } +} diff --git a/be/Modules/User/Tests/Feature/.gitkeep b/be/Modules/User/Tests/Feature/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Tests/Unit/.gitkeep b/be/Modules/User/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Transformers/.gitkeep b/be/Modules/User/Transformers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/be/Modules/User/Transformers/UserListResource.php b/be/Modules/User/Transformers/UserListResource.php new file mode 100644 index 0000000..5426fee --- /dev/null +++ b/be/Modules/User/Transformers/UserListResource.php @@ -0,0 +1,35 @@ + $this->id, + 'name' => $this->name, + 'email' => $this->email, + 'ic_number' => $this->ic_number, + 'position' => $this->position, + 'phone_number' => $this->phone_number, + 'image_url' => $this->image_url ? Storage::disk('public')->url($this->image_url) : null, + 'status' => $this->status, + 'email_verified_at' => $this->email_verified_at, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'deleted_at' => $this->deleted_at, + 'roles' => $this->roles->map(function ($role) { + return [ + 'id' => $role->id, + 'name' => $role->name, + 'guard_name' => $role->guard_name, + ]; + }), + ]; + } +} diff --git a/be/Modules/User/Transformers/UserResource.php b/be/Modules/User/Transformers/UserResource.php new file mode 100644 index 0000000..b7021e4 --- /dev/null +++ b/be/Modules/User/Transformers/UserResource.php @@ -0,0 +1,54 @@ + $this->id, + 'name' => $this->name, + 'email' => $this->email, + 'ic_number' => $this->ic_number, + 'position' => $this->position, + 'phone_number' => $this->phone_number, + 'image_url' => $this->image_url ? Storage::disk('public')->url($this->image_url) : null, + 'status' => $this->status, + 'two_factor_secret' => $this->two_factor_secret, + 'two_factor_recovery_codes' => $this->two_factor_recovery_codes, + 'two_factor_confirmed_at' => $this->two_factor_confirmed_at, + 'email_verified_at' => $this->email_verified_at, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + 'deleted_at' => $this->deleted_at, + 'roles' => $this->whenLoaded('roles', function () { + return $this->roles->map(function ($role) { + return [ + 'id' => $role->id, + 'name' => $role->name, + 'guard_name' => $role->guard_name, + 'permissions' => $this->when($role->relationLoaded('permissions'), function () use ($role) { + return $role->permissions->map(function ($permission) { + return [ + 'id' => $permission->id, + 'name' => $permission->name, + 'guard_name' => $permission->guard_name, + 'route_name' => $permission->route_name, + 'created_at' => $permission->created_at, + 'updated_at' => $permission->updated_at, + ]; + }); + }), + 'created_at' => $role->created_at, + 'updated_at' => $role->updated_at, + ]; + }); + }), + ]; + } +} diff --git a/be/Modules/User/composer.json b/be/Modules/User/composer.json new file mode 100644 index 0000000..dd75115 --- /dev/null +++ b/be/Modules/User/composer.json @@ -0,0 +1,30 @@ +{ + "name": "nwidart/user", + "description": "", + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\User\\": "App", + "Modules\\User\\Database\\Factories\\": "database/factories/", + "Modules\\User\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\User\\Tests\\": "tests/" + } + } +} diff --git a/be/Modules/User/module.json b/be/Modules/User/module.json new file mode 100644 index 0000000..09e540d --- /dev/null +++ b/be/Modules/User/module.json @@ -0,0 +1,11 @@ +{ + "name": "User", + "alias": "user", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\User\\Providers\\UserServiceProvider" + ], + "files": [] +} diff --git a/be/Modules/User/package.json b/be/Modules/User/package.json new file mode 100644 index 0000000..d6fbfc8 --- /dev/null +++ b/be/Modules/User/package.json @@ -0,0 +1,15 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.5", + "sass": "^1.69.5", + "postcss": "^8.3.7", + "vite": "^4.0.0" + } +} diff --git a/be/README.md b/be/README.md new file mode 100644 index 0000000..75c347a --- /dev/null +++ b/be/README.md @@ -0,0 +1,61 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). + +### Premium Partners + +- **[Vehikl](https://vehikl.com)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Redberry](https://redberry.international/laravel-development)** +- **[Active Logic](https://activelogic.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/be/app/Console/Commands/AutoGenerateWeeklyReportForUnit.php b/be/app/Console/Commands/AutoGenerateWeeklyReportForUnit.php new file mode 100644 index 0000000..2020eba --- /dev/null +++ b/be/app/Console/Commands/AutoGenerateWeeklyReportForUnit.php @@ -0,0 +1,56 @@ +argument('unit'); + + $unit = Unit::where('name', $unitName)->first(); + + if (! $unit) { + $this->error("Unit '{$unitName}' not found."); + + return 1; + } + + $month = strtolower(now()->format('F')); + $week = (int) ceil(now()->day / 7); + + if (! $this->option('force')) { + $existingReports = KJCReport::where('unit_id', $unit->id) + ->where('report_type', 'weekly') + ->where('report_month', $month) + ->where('report_week', $week) + ->exists(); + + if ($existingReports) { + $this->info("Reports for {$unitName} - {$month} week {$week} already exist. Skipping."); + + return 0; + } + } + + $user = User::where('unit_id', $unit->id)->first(); + + GenerateTeamWeeklyReports::dispatch($unit->id, $month, $week, $user?->id); + + $this->info("✓ Queued weekly report generation for {$unitName} - {$month} week {$week}"); + + return 0; + } +} diff --git a/be/app/Console/Commands/TriggerKJCHistoricalDataCapture.php b/be/app/Console/Commands/TriggerKJCHistoricalDataCapture.php new file mode 100644 index 0000000..c8380de --- /dev/null +++ b/be/app/Console/Commands/TriggerKJCHistoricalDataCapture.php @@ -0,0 +1,68 @@ +option('month'); + $year = $this->option('year'); + $useQueue = $this->option('queue'); + + // If no month/year provided, use previous month + if (! $month || ! $year) { + $lastMonth = Carbon::now()->subMonth(); + $month = $month ?: $lastMonth->format('m'); + $year = $year ?: $lastMonth->format('Y'); + } + + $this->info("Triggering KJC historical data capture for {$month}/{$year}..."); + + try { + if ($useQueue) { + // Dispatch to queue + CaptureKJCHistoricalDataJob::dispatch($month, $year); + $this->info('✓ KJC historical data capture job dispatched to queue'); + $this->info('You can monitor the job in Horizon dashboard'); + } else { + // Run immediately + $job = new CaptureKJCHistoricalDataJob($month, $year); + $job->handle(app(KJCHistoricalDataService::class)); + $this->info('✓ KJC historical data capture completed immediately'); + } + + } catch (\Exception $e) { + $this->error('Error: '.$e->getMessage()); + + return 1; + } + + return 0; + } +} diff --git a/be/app/Console/Commands/TriggerPKJHistoricalDataCapture.php b/be/app/Console/Commands/TriggerPKJHistoricalDataCapture.php new file mode 100644 index 0000000..b3c638b --- /dev/null +++ b/be/app/Console/Commands/TriggerPKJHistoricalDataCapture.php @@ -0,0 +1,55 @@ +option('month'); + $year = $this->option('year'); + $useQueue = $this->option('queue'); + + // If no month/year provided, use previous month + if (! $month || ! $year) { + $lastMonth = Carbon::now()->subMonth(); + $month = $month ?: $lastMonth->format('m'); + $year = $year ?: $lastMonth->format('Y'); + } + + $this->info("Triggering PKJ historical data capture for {$month}/{$year}..."); + + try { + if ($useQueue) { + // Dispatch to queue + CapturePKJHistoricalDataJob::dispatch($month, $year); + $this->info('✓ PKJ historical data capture job dispatched to queue'); + $this->info('You can monitor the job in Horizon dashboard'); + } else { + // Run immediately + $job = new CapturePKJHistoricalDataJob($month, $year); + $job->handle(app(PKJHistoricalDataService::class)); + $this->info('✓ PKJ historical data capture completed immediately'); + } + + } catch (\Exception $e) { + $this->error('Error: '.$e->getMessage()); + + return 1; + } + + return 0; + } +} diff --git a/be/app/Http/Controllers/BaseCrudController.php b/be/app/Http/Controllers/BaseCrudController.php new file mode 100644 index 0000000..8281cb6 --- /dev/null +++ b/be/app/Http/Controllers/BaseCrudController.php @@ -0,0 +1,378 @@ +repository = $repository; + } + + /** + * Display a listing of the resource. + */ + public function index(Request $request): JsonResponse + { + $this->authorize('viewAny', $this->modelClass); + + try { + $perPage = $request->get('per_page', 10) ?? 10; + $perPage = min($perPage, 1000); // Limit max per page to 1000 + $search = (string) ($request->get('search', '') ?? ''); + $sortBy = (string) ($request->get('sort_by', 'id') ?? 'id'); + $sortOrder = (string) ($request->get('sort_order', 'asc') ?? 'asc'); + + $items = $this->getIndexData($request, $perPage, $search, $sortBy, $sortOrder); + + // Check if the result is paginated + if ($items instanceof LengthAwarePaginator) { + return response()->json([ + 'success' => true, + 'data' => $this->resourceClass::collection($items->items()), + 'pagination' => [ + 'current_page' => $items->currentPage(), + 'per_page' => $items->perPage(), + 'total' => $items->total(), + 'last_page' => $items->lastPage(), + 'from' => $items->firstItem(), + 'to' => $items->lastItem(), + 'has_more_pages' => $items->hasMorePages(), + ], + 'message' => $this->getSuccessMessage('index'), + ]); + } + + // Fallback for non-paginated results + return response()->json([ + 'success' => true, + 'data' => $this->resourceClass::collection($items), + 'message' => $this->getSuccessMessage('index'), + ]); + } catch (Exception $e) { + Log::error("Error fetching {$this->resourceNamePlural}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('index'), 500); + } + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request): JsonResponse + { + $this->authorize('create', $this->modelClass); + + try { + $validated = $this->validateRequest($request); + $data = $this->prepareStoreData($validated); + + $item = $this->repository->create($data); + + ActivityLogger::log("Created {$this->resourceName}: {$this->getItemName($item)}", $item); + + return response()->json([ + 'success' => true, + 'data' => new $this->resourceClass($item), + 'message' => $this->getSuccessMessage('store'), + ], 201); + + } catch (Exception $e) { + Log::error("Error creating {$this->resourceName}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('store').': '.$e->getMessage(), 500); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id): JsonResponse + { + $this->authorize('view', $this->modelClass); + + try { + $item = $this->repository->findById($id); + + if (! $item) { + return $this->errorResponse($this->getNotFoundMessage(), 404); + } + + $item = $this->loadShowRelations($item); + + return response()->json([ + 'success' => true, + 'data' => new $this->resourceClass($item), + 'message' => $this->getSuccessMessage('show'), + ]); + } catch (Exception $e) { + Log::error("Error fetching {$this->resourceName}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('show'), 500); + } + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id): JsonResponse + { + $this->authorize('update', $this->modelClass); + + try { + $item = $this->repository->findById($id); + + if (! $item) { + return $this->errorResponse($this->getNotFoundMessage(), 404); + } + + $validated = $this->validateRequest($request); + $data = $this->prepareUpdateData($validated, $item); + + $item->update($data); + + ActivityLogger::log("Updated {$this->resourceName}: {$this->getItemName($item)}", $item); + + return response()->json([ + 'success' => true, + 'data' => new $this->resourceClass($item), + 'message' => $this->getSuccessMessage('update'), + ]); + + } catch (Exception $e) { + Log::error("Error updating {$this->resourceName}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('update').': '.$e->getMessage(), 500); + } + } + + /** + * Partially update the specified resource in storage (PATCH). + */ + public function patch(Request $request, string $id): JsonResponse + { + // PATCH uses the same logic as update + return $this->update($request, $id); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id): JsonResponse + { + $this->authorize('deleteAny', $this->modelClass); + + try { + $item = $this->repository->findById($id); + + if (! $item) { + return $this->errorResponse($this->getNotFoundMessage(), 404); + } + + // Check for dependencies before deletion + $dependencyCheck = $this->checkDependencies($item); + if ($dependencyCheck !== null) { + return $dependencyCheck; + } + + $this->repository->delete($id); + + ActivityLogger::log("Deleted {$this->resourceName}: {$this->getItemName($item)}", $item); + + return response()->json([ + 'success' => true, + 'message' => $this->getSuccessMessage('destroy'), + ]); + + } catch (Exception $e) { + Log::error("Error deleting {$this->resourceName}: ".$e->getMessage()); + + return $this->errorResponse($this->getErrorMessage('destroy').': '.$e->getMessage(), 500); + } + } + + /** + * Get data for index method - can be overridden by child classes + */ + protected function getIndexData(Request $request, int $perPage = 10, string $search = '', string $sortBy = 'id', string $sortOrder = 'asc') + { + // Always try paginated methods first when perPage is specified + if ($perPage > 0) { + if (method_exists($this->repository, 'getAllWithRelationsPaginated')) { + return $this->repository->getAllWithRelationsPaginated($perPage, $search, $sortBy, $sortOrder); + } + + if (method_exists($this->repository, 'getAllPaginated')) { + return $this->repository->getAllPaginated($perPage, $search, $sortBy, $sortOrder); + } + } + + // Fallback to non-paginated methods + if (method_exists($this->repository, 'getAllWithRelations')) { + return $this->repository->getAllWithRelations($search, $sortBy, $sortOrder); + } + + return $this->repository->all($search, $sortBy, $sortOrder); + } + + /** + * Validate request data - can be overridden by child classes + */ + protected function validateRequest(Request $request): array + { + if ($this->requestClass) { + // For multipart/form-data, use direct validation to avoid FormRequest parsing issues + if (str_contains($request->header('Content-Type', ''), 'multipart/form-data')) { + return $request->validate(app($this->requestClass)->rules()); + } + + // Create FormRequest instance with the current request + $formRequest = $this->requestClass::createFrom($request); + $formRequest->setContainer(app()); + $formRequest->setRedirector(app('redirect')); + + // Validate the request + $formRequest->validateResolved(); + + return $formRequest->validated(); + } + + return $request->all(); + } + + /** + * Prepare data for store method - can be overridden by child classes + */ + protected function prepareStoreData(array $validated): array + { + return $validated; + } + + /** + * Prepare data for update method - can be overridden by child classes + */ + protected function prepareUpdateData(array $validated, $item): array + { + return $validated; + } + + /** + * Load relations for show method - can be overridden by child classes + */ + protected function loadShowRelations($item) + { + return $item; + } + + /** + * Check dependencies before deletion - can be overridden by child classes + * Return null if deletion is allowed, or a JsonResponse if not + */ + protected function checkDependencies($item): ?JsonResponse + { + return null; + } + + /** + * Get the name of the item for logging - can be overridden by child classes + */ + protected function getItemName($item): string + { + return $item->name ?? $item->id; + } + + /** + * Get success message for different operations + */ + protected function getSuccessMessage(string $operation): string + { + $messages = [ + 'index' => ucfirst($this->resourceNamePlural).' berjaya dimuatkan', + 'store' => ucfirst($this->resourceName).' berjaya ditambah', + 'show' => ucfirst($this->resourceName).' berjaya dimuatkan', + 'update' => ucfirst($this->resourceName).' berjaya dikemaskini', + 'destroy' => ucfirst($this->resourceName).' berjaya dipadam', + ]; + + return $messages[$operation] ?? 'Operasi berjaya'; + } + + /** + * Get error message for different operations + */ + protected function getErrorMessage(string $operation): string + { + $messages = [ + 'index' => 'Gagal memuatkan '.$this->resourceNamePlural, + 'store' => 'Gagal menambah '.$this->resourceName, + 'show' => 'Gagal memuatkan '.$this->resourceName, + 'update' => 'Gagal mengemaskini '.$this->resourceName, + 'destroy' => 'Gagal memadam '.$this->resourceName, + ]; + + return $messages[$operation] ?? 'Operasi gagal'; + } + + /** + * Get not found message + */ + protected function getNotFoundMessage(): string + { + return ucfirst($this->resourceName).' tidak dijumpai.'; + } + + /** + * Return a standardized error response + */ + protected function errorResponse(string $message, int $statusCode = 400): JsonResponse + { + return response()->json([ + 'success' => false, + 'message' => $message, + ], $statusCode); + } +} diff --git a/be/app/Http/Controllers/ContactController.php b/be/app/Http/Controllers/ContactController.php new file mode 100644 index 0000000..5fae078 --- /dev/null +++ b/be/app/Http/Controllers/ContactController.php @@ -0,0 +1,209 @@ +contactService = $contactService; + } + + /** + * Get all active contact persons + */ + public function getContacts(): JsonResponse + { + try { + $contacts = $this->contactService->getActiveContacts(); + + return response()->json([ + 'success' => true, + 'data' => $contacts, + 'message' => 'Contact persons retrieved successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve contact persons', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get contact settings for admin (including inactive) + */ + public function getContactSettings(): JsonResponse + { + try { + $settings = $this->contactService->getAllContactSettings(); + + return response()->json([ + 'success' => true, + 'data' => $settings, + 'message' => 'Contact settings retrieved successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve contact settings', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Update contact settings (Admin only) + */ + public function updateContacts(Request $request): JsonResponse + { + $request->validate([ + 'contacts' => 'required|array', + 'contacts.*.name' => 'required|string|max:100', + 'contacts.*.position' => 'nullable|string|max:100', + 'contacts.*.email' => 'nullable|email|max:255', + 'contacts.*.phone' => 'nullable|string|max:50', + 'contacts.*.department' => 'nullable|string|max:100', + 'contacts.*.is_active' => 'boolean', + 'contacts.*.sort_order' => 'integer|min:0' + ]); + + try { + DB::beginTransaction(); + + $result = $this->contactService->updateContactSettings($request->contacts); + + DB::commit(); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Contact settings updated successfully' + ]); + } catch (\Exception $e) { + DB::rollBack(); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to update contact settings', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Add a new contact person (Admin only) + */ + public function addContact(Request $request): JsonResponse + { + $request->validate([ + 'name' => 'required|string|max:100', + 'position' => 'nullable|string|max:100', + 'email' => 'nullable|email|max:255', + 'phone' => 'nullable|string|max:50', + 'department' => 'nullable|string|max:100', + 'is_active' => 'boolean', + 'sort_order' => 'integer|min:0' + ]); + + try { + $result = $this->contactService->addContactPerson($request->all()); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Contact person added successfully' + ], 201); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to add contact person', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Update a specific contact person (Admin only) + */ + public function updateContact(Request $request, int $id): JsonResponse + { + $request->validate([ + 'name' => 'required|string|max:100', + 'position' => 'nullable|string|max:100', + 'email' => 'nullable|email|max:255', + 'phone' => 'nullable|string|max:50', + 'department' => 'nullable|string|max:100', + 'is_active' => 'boolean', + 'sort_order' => 'integer|min:0' + ]); + + try { + $result = $this->contactService->updateContactPerson($id, $request->all()); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Contact person updated successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to update contact person', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Delete a contact person (Admin only) + */ + public function deleteContact(int $id): JsonResponse + { + try { + $result = $this->contactService->deleteContactPerson($id); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Contact person deleted successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to delete contact person', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Toggle active status of a contact person (Admin only) + */ + public function toggleContact(int $id): JsonResponse + { + try { + $result = $this->contactService->toggleContactPerson($id); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Contact person status toggled successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to toggle contact person status', + 'error' => $e->getMessage() + ], 500); + } + } +} diff --git a/be/app/Http/Controllers/Controller.php b/be/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/be/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ +json([ + 'success' => true, + 'data' => $countries, + 'message' => 'Countries fetched successfully', + ]); + return response()->json([ + 'success' => true, + 'data' => $countries, + 'message' => 'Countries fetched successfully', + ]); + } +} \ No newline at end of file diff --git a/be/app/Http/Controllers/ImpersonateController.php b/be/app/Http/Controllers/ImpersonateController.php new file mode 100644 index 0000000..34cdbbc --- /dev/null +++ b/be/app/Http/Controllers/ImpersonateController.php @@ -0,0 +1,151 @@ +user(); + + if (! $admin->can('impersonate.user', $target)) { + return $this->error('Anda tidak mempunyai keizinan untuk menyamar pengguna.', 403); + } + + if ($request->hasCookie(AuthCookie::originalUserCookieName())) { + return $this->error('Anda sudah menyamar sebagai pengguna.', 400); + } + + $issued = $this->issueToken($target, self::IMPERSONATION_TOKEN); + + return AuthCookie::attachAuthToken( + response()->json([ + 'success' => true, + 'message' => "Anda sekarang menyamar sebagai {$target->name}", + 'impersonated_user' => $this->userSummary($target), + ...$this->sessionPayload($target, $issued['accessToken']), + ]), + $issued['plainTextToken'] + )->withCookie(AuthCookie::makeOriginalUserId($admin->id)); + } + + public function leave(Request $request): JsonResponse + { + $originalUserId = $request->cookie(AuthCookie::originalUserCookieName()); + + if (! $originalUserId) { + return $this->error('Maklumat pengguna asal tidak ditemui.', 400); + } + + $original = User::findOrFail($originalUserId); + + $request->user()?->tokens()->where('name', self::IMPERSONATION_TOKEN)->delete(); + $original->tokens()->whereIn('name', [self::IMPERSONATION_TOKEN, ...self::AUTH_TOKEN_NAMES])->delete(); + + $issued = $this->issueToken($original, 'auth-token', expires: true); + + $response = response()->json([ + 'success' => true, + 'message' => 'Anda telah kembali ke akaun anda', + 'original_user' => $this->userSummary($original), + ...$this->sessionPayload($original, $issued['accessToken']), + ]); + + if (AuthCookie::shouldExposeTokenInResponse()) { + $response->setData(array_merge($response->getData(true), [ + 'original_token' => $issued['plainTextToken'], + ])); + } + + return AuthCookie::attachAuthToken($response, $issued['plainTextToken']) + ->withCookie(AuthCookie::forgetOriginalUserId()); + } + + public function status(Request $request): JsonResponse + { + if (! $request->hasCookie(AuthCookie::originalUserCookieName())) { + return response()->json(['is_impersonating' => false]); + } + + $user = $request->user(); + + return response()->json([ + 'is_impersonating' => true, + 'impersonated_user' => $user ? $this->userSummary($user) : null, + ]); + } + + /** + * @return array{plainTextToken: string, accessToken: PersonalAccessToken} + */ + private function issueToken(User $user, string $name, bool $expires = false): array + { + $user->loadMissing(['roles.permissions']); + + $result = $user->createToken( + $name, + ['*'], + $expires ? now()->addMinutes((int) config('auth_cookie.lifetime_minutes', 720)) : null + ); + + ActiveRoleService::assignDefaultToToken($user, $result->accessToken); + + return [ + 'plainTextToken' => $result->plainTextToken, + 'accessToken' => $result->accessToken, + ]; + } + + /** + * @return array + */ + private function sessionPayload(User $user, PersonalAccessToken $accessToken): array + { + $user->loadMissing(['roles.permissions']); + + $activeRole = $user->roles->firstWhere('id', $accessToken->active_role_id) + ?? ActiveRoleService::resolveDefaultRole($user); + + return [ + 'data' => new UserResource($user), + 'active_role' => ActiveRoleService::formatRole($activeRole), + 'can_switch_role' => $user->roles->count() > 1, + 'redirect_path' => $activeRole + ? ActiveRoleService::redirectPathForRole($activeRole) + : config('active_role.member_redirect', '/profile'), + ]; + } + + /** + * @return array{id: mixed, name: string, email: string} + */ + private function userSummary(User $user): array + { + return [ + 'id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, + ]; + } + + private function error(string $message, int $status): JsonResponse + { + return response()->json([ + 'success' => false, + 'message' => $message, + ], $status); + } +} diff --git a/be/app/Http/Controllers/OnlineUsersController.php b/be/app/Http/Controllers/OnlineUsersController.php new file mode 100644 index 0000000..3e53297 --- /dev/null +++ b/be/app/Http/Controllers/OnlineUsersController.php @@ -0,0 +1,183 @@ +onlineUsersService = $onlineUsersService; + } + + /** + * Get list of online users + * + * @param Request $request + * @return JsonResponse + */ + public function index(Request $request): JsonResponse + { + try { + $timeoutMinutes = 5; // Fixed to 5 minutes + + $onlineUsers = $this->onlineUsersService->getOnlineUsers($timeoutMinutes); + + return response()->json([ + 'success' => true, + 'data' => $onlineUsers, + 'meta' => [ + 'timeout_minutes' => $timeoutMinutes, + 'total_online' => $onlineUsers->count(), + 'timestamp' => now()->toISOString() + ], + 'message' => 'Online users retrieved successfully.' + ]); + + } catch (\Exception $e) { + Log::error('Error fetching online users: ' . $e->getMessage()); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve online users.', + 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' + ], 500); + } + } + + /** + * Get online users count + * + * @param Request $request + * @return JsonResponse + */ + public function count(Request $request): JsonResponse + { + try { + $timeoutMinutes = 5; // Fixed to 5 minutes + + $count = $this->onlineUsersService->getOnlineUsersCount($timeoutMinutes); + + return response()->json([ + 'success' => true, + 'data' => [ + 'count' => $count, + 'timeout_minutes' => $timeoutMinutes + ], + 'message' => 'Online users count retrieved successfully.' + ]); + + } catch (\Exception $e) { + Log::error('Error fetching online users count: ' . $e->getMessage()); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve online users count.', + 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' + ], 500); + } + } + + /** + * Get online users statistics + * + * @return JsonResponse + */ + public function stats(): JsonResponse + { + try { + $stats = $this->onlineUsersService->getOnlineUsersStats(); + + return response()->json([ + 'success' => true, + 'data' => $stats, + 'message' => 'Online users statistics retrieved successfully.' + ]); + + } catch (\Exception $e) { + Log::error('Error fetching online users stats: ' . $e->getMessage()); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve online users statistics.', + 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' + ], 500); + } + } + + /** + * Get current user's session information + * + * @param Request $request + * @return JsonResponse + */ + public function mySession(Request $request): JsonResponse + { + try { + $user = $request->user(); + + if (!$user) { + return response()->json([ + 'success' => false, + 'message' => 'User not authenticated.' + ], 401); + } + + $sessionInfo = $this->onlineUsersService->getUserSessionInfo($user->id); + + if (!$sessionInfo) { + return response()->json([ + 'success' => false, + 'message' => 'No active session found.' + ], 404); + } + + return response()->json([ + 'success' => true, + 'data' => $sessionInfo, + 'message' => 'Session information retrieved successfully.' + ]); + + } catch (\Exception $e) { + Log::error('Error fetching user session info: ' . $e->getMessage()); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve session information.', + 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' + ], 500); + } + } + + /** + * Clear online users cache (admin only) + * + * @return JsonResponse + */ + public function clearCache(): JsonResponse + { + try { + $this->onlineUsersService->clearCache(); + + return response()->json([ + 'success' => true, + 'message' => 'Online users cache cleared successfully.' + ]); + + } catch (\Exception $e) { + Log::error('Error clearing online users cache: ' . $e->getMessage()); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to clear cache.', + 'error' => config('app.debug') ? $e->getMessage() : 'Internal server error' + ], 500); + } + } +} diff --git a/be/app/Http/Controllers/SocialMediaController.php b/be/app/Http/Controllers/SocialMediaController.php new file mode 100644 index 0000000..3421812 --- /dev/null +++ b/be/app/Http/Controllers/SocialMediaController.php @@ -0,0 +1,206 @@ +socialMediaService = $socialMediaService; + } + + /** + * Get all active social media platforms + */ + public function getSocialMedia(): JsonResponse + { + try { + $socialMedia = $this->socialMediaService->getActiveSocialMedia(); + + return response()->json([ + 'success' => true, + 'data' => $socialMedia, + 'message' => 'Social media platforms retrieved successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve social media platforms', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Update social media settings (Admin only) + */ + public function updateSocialMedia(Request $request): JsonResponse + { + $request->validate([ + 'social_media' => 'required|array', + 'social_media.*.platform' => 'required|string|max:50', + 'social_media.*.name' => 'required|string|max:100', + 'social_media.*.url' => 'required|url|max:255', + 'social_media.*.icon' => 'nullable|string|max:100', + 'social_media.*.is_active' => 'boolean', + 'social_media.*.sort_order' => 'integer|min:0' + ]); + + try { + DB::beginTransaction(); + + $result = $this->socialMediaService->updateSocialMediaSettings($request->social_media); + + DB::commit(); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Social media settings updated successfully' + ]); + } catch (\Exception $e) { + DB::rollBack(); + + return response()->json([ + 'success' => false, + 'message' => 'Failed to update social media settings', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Get social media settings for admin (including inactive) + */ + public function getSocialMediaSettings(): JsonResponse + { + try { + $settings = $this->socialMediaService->getAllSocialMediaSettings(); + + return response()->json([ + 'success' => true, + 'data' => $settings, + 'message' => 'Social media settings retrieved successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to retrieve social media settings', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Add a new social media platform (Admin only) + */ + public function addSocialMedia(Request $request): JsonResponse + { + $request->validate([ + 'platform' => 'required|string|max:50', + 'name' => 'required|string|max:100', + 'url' => 'required|url|max:255', + 'icon' => 'nullable|string|max:100', + 'is_active' => 'boolean', + 'sort_order' => 'integer|min:0' + ]); + + try { + $result = $this->socialMediaService->addSocialMediaPlatform($request->all()); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Social media platform added successfully' + ], 201); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to add social media platform', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Update a specific social media platform (Admin only) + */ + public function updateSocialMediaPlatform(Request $request, int $id): JsonResponse + { + $request->validate([ + 'platform' => 'required|string|max:50', + 'name' => 'required|string|max:100', + 'url' => 'required|url|max:255', + 'icon' => 'nullable|string|max:100', + 'is_active' => 'boolean', + 'sort_order' => 'integer|min:0' + ]); + + try { + $result = $this->socialMediaService->updateSocialMediaPlatform($id, $request->all()); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Social media platform updated successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to update social media platform', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Delete a social media platform (Admin only) + */ + public function deleteSocialMediaPlatform(int $id): JsonResponse + { + try { + $result = $this->socialMediaService->deleteSocialMediaPlatform($id); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Social media platform deleted successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to delete social media platform', + 'error' => $e->getMessage() + ], 500); + } + } + + /** + * Toggle active status of a social media platform (Admin only) + */ + public function toggleSocialMediaPlatform(int $id): JsonResponse + { + try { + $result = $this->socialMediaService->toggleSocialMediaPlatform($id); + + return response()->json([ + 'success' => true, + 'data' => $result, + 'message' => 'Social media platform status toggled successfully' + ]); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'Failed to toggle social media platform status', + 'error' => $e->getMessage() + ], 500); + } + } +} \ No newline at end of file diff --git a/be/app/Http/Middleware/ApiKeyAuthenticationMiddleware.php b/be/app/Http/Middleware/ApiKeyAuthenticationMiddleware.php new file mode 100644 index 0000000..0c9fca4 --- /dev/null +++ b/be/app/Http/Middleware/ApiKeyAuthenticationMiddleware.php @@ -0,0 +1,114 @@ +extractApiKey($request); + + if (!$apiKey) { + return response()->json([ + 'success' => false, + 'message' => 'API key is required for external system access.', + 'error' => 'API_KEY_REQUIRED' + ], 401); + } + + // Validate API key + if (!$this->isValidApiKey($apiKey)) { + // Log invalid API key attempt + if (config('api_security.log_api_key_usage', true)) { + Log::warning('Invalid API key attempt', [ + 'ip' => $request->ip(), + 'user_agent' => $request->header('User-Agent'), + 'endpoint' => $request->fullUrl(), + 'method' => $request->method(), + 'api_key_prefix' => substr($apiKey, 0, 8) . '...', + ]); + } + + return response()->json([ + 'success' => false, + 'message' => 'Invalid API key provided.', + 'error' => 'API_KEY_INVALID' + ], 401); + } + + // Log successful API key usage + if (config('api_security.log_api_key_usage', true)) { + Log::info('API key authenticated', [ + 'ip' => $request->ip(), + 'user_agent' => $request->header('User-Agent'), + 'endpoint' => $request->fullUrl(), + 'method' => $request->method(), + 'api_key_prefix' => substr($apiKey, 0, 8) . '...', + ]); + } + + // Add API key info to request for downstream use + $request->merge(['_api_key' => $apiKey]); + + return $next($request); + } + + /** + * Extract API key from request headers + */ + private function extractApiKey(Request $request): ?string + { + // Check multiple header formats + $apiKeyHeaders = config('api_security.api_key_headers', [ + 'X-API-Key', + 'API-Key', + 'Authorization' + ]); + + foreach ($apiKeyHeaders as $header) { + $value = $request->header($header); + + if ($value) { + // Handle Bearer token format + if ($header === 'Authorization' && preg_match('/Bearer\s+(.*)$/i', $value, $matches)) { + return $matches[1]; + } + + // Direct API key + return $value; + } + } + + return null; + } + + /** + * Validate API key against configured valid keys + */ + private function isValidApiKey(string $apiKey): bool + { + $validApiKeys = config('api_security.valid_api_keys', []); + + if (empty($validApiKeys)) { + return false; + } + + return in_array($apiKey, $validApiKeys); + } +} diff --git a/be/app/Http/Middleware/AuthenticateFromCookie.php b/be/app/Http/Middleware/AuthenticateFromCookie.php new file mode 100644 index 0000000..7bb3eab --- /dev/null +++ b/be/app/Http/Middleware/AuthenticateFromCookie.php @@ -0,0 +1,27 @@ +bearerToken()) { + $token = $request->cookie(AuthCookie::name()); + + if (is_string($token) && $token !== '') { + $request->headers->set('Authorization', 'Bearer '.$token); + } + } + + return $next($request); + } +} diff --git a/be/app/Http/Middleware/BlockApiToolsMiddleware.php b/be/app/Http/Middleware/BlockApiToolsMiddleware.php new file mode 100644 index 0000000..1ba8126 --- /dev/null +++ b/be/app/Http/Middleware/BlockApiToolsMiddleware.php @@ -0,0 +1,157 @@ +is('api/external*')) { + return $next($request); + } + + // Only block in production environment + if (app()->environment('production')) { + $userAgent = strtolower($request->header('User-Agent', '')); + $clientIp = $request->ip(); + + // Check if request has valid API key - bypass blocking for external systems + if ($this->hasValidApiKey($request)) { + return $next($request); + } + + // Check if IP is in allowed list + $allowedIps = config('api_security.allowed_ips', []); + if (!empty($allowedIps) && in_array($clientIp, $allowedIps)) { + return $next($request); + } + + // Check if User-Agent is in allowed list + $allowedUserAgents = config('api_security.allowed_user_agents', []); + foreach ($allowedUserAgents as $allowedAgent) { + if (str_contains($userAgent, strtolower($allowedAgent))) { + return $next($request); + } + } + + // Check if the User-Agent matches any blocked patterns + $blockedUserAgents = config('api_security.blocked_user_agents', []); + foreach ($blockedUserAgents as $blockedAgent) { + if (str_contains($userAgent, $blockedAgent)) { + return response()->json([ + 'success' => false, + 'message' => config('api_security.blocked_message', 'API access is restricted in production environment. Please use the web interface.'), + 'error' => 'API_TOOLS_BLOCKED' + ], 403); + } + } + + // Additional check for requests without proper browser User-Agent + // This catches tools that might not be in our list but don't look like browsers + if ($this->isSuspiciousUserAgent($userAgent)) { + return response()->json([ + 'success' => false, + 'message' => config('api_security.blocked_message', 'API access is restricted in production environment. Please use the web interface.'), + 'error' => 'API_TOOLS_BLOCKED' + ], 403); + } + } + + return $next($request); + } + + /** + * Check if the User-Agent looks suspicious (not a real browser) + */ + private function isSuspiciousUserAgent(string $userAgent): bool + { + $minLength = config('api_security.min_user_agent_length', 10); + + // If User-Agent is empty or very short, it's suspicious + if (empty($userAgent) || strlen($userAgent) < $minLength) { + return true; + } + + // Check for common browser patterns + $browserPatterns = [ + 'mozilla', + 'chrome', + 'safari', + 'firefox', + 'edge', + 'opera', + 'webkit', + 'gecko', + 'trident', + 'msie', + ]; + + $hasBrowserPattern = false; + foreach ($browserPatterns as $pattern) { + if (str_contains($userAgent, $pattern)) { + $hasBrowserPattern = true; + break; + } + } + + // If no browser pattern is found, it's likely an API tool + return !$hasBrowserPattern; + } + + /** + * Check if the request has a valid API key for external system access + */ + private function hasValidApiKey(Request $request): bool + { + // Check for API key in headers (X-API-Key, Authorization Bearer, or API-Key) + $apiKey = $request->header('X-API-Key') + ?? $request->header('API-Key') + ?? $this->extractBearerToken($request->header('Authorization')); + + if (!$apiKey) { + return false; + } + + // Get valid API keys from configuration + $validApiKeys = config('api_security.valid_api_keys', []); + + // If no API keys configured, return false + if (empty($validApiKeys)) { + return false; + } + + // Check if the provided API key is valid + return in_array($apiKey, $validApiKeys); + } + + /** + * Extract Bearer token from Authorization header + */ + private function extractBearerToken(?string $authorization): ?string + { + if (!$authorization) { + return null; + } + + if (preg_match('/Bearer\s+(.*)$/i', $authorization, $matches)) { + return $matches[1]; + } + + return null; + } +} diff --git a/be/app/Http/Middleware/SingleSessionMiddleware.php b/be/app/Http/Middleware/SingleSessionMiddleware.php new file mode 100644 index 0000000..323244b --- /dev/null +++ b/be/app/Http/Middleware/SingleSessionMiddleware.php @@ -0,0 +1,279 @@ +user(); + + if ($user) { + try { + $this->enforceSingleSession($user, $request); + } catch (\Throwable $e) { + // Log error but don't block the request + Log::error('SingleSessionMiddleware error', [ + 'user_id' => $user->id, + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString() + ]); + } + } + + return $next($request); + } + + /** + * Enforce single session per user + */ + private function enforceSingleSession(User $user, Request $request): void + { + if (app()->environment('local')) { + return; + } + + // Skip single session enforcement during impersonation + if ($this->isImpersonationRequest($request)) { + return; + } + + // Skip single session enforcement for post-impersonation requests + if ($this->isPostImpersonationRequest($request)) { + return; + } + + // Get current token from request (Bearer header or HttpOnly cookie) + $currentToken = $this->resolveToken($request); + if (!$currentToken) { + return; + } + + // Parse the token to get the token ID and hash + $tokenParts = explode('|', $currentToken); + if (count($tokenParts) !== 2) { + return; + } + + $tokenId = $tokenParts[0]; + $tokenHash = $tokenParts[1]; + + // Find current token record with caching + $currentTokenRecord = $this->getTokenRecord($tokenId, $tokenHash); + + if (!$currentTokenRecord) { + return; + } + + // Check if this is an impersonation token - skip enforcement + if ($currentTokenRecord->name === 'impersonation-token') { + return; + } + + // Skip enforcement for fresh login tokens (SSO login or fresh auth-token) + if ($this->isFreshLoginToken($currentTokenRecord, $user)) { + return; + } + + // Use atomic cache lock per user to prevent race conditions + $lockKey = "single_session_user_{$user->id}"; + $lock = Cache::lock($lockKey, self::PROCESSING_LOCK_TTL); + + if (!$lock->get()) { + return; + } + + try { + // Get all active tokens for this user (excluding impersonation), ordered by newest first + $activeTokens = PersonalAccessToken::where('tokenable_type', get_class($user)) + ->where('tokenable_id', $user->id) + ->where('name', '!=', 'impersonation-token') + ->where(function ($query) { + $query->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->orderByDesc('created_at') + ->orderByDesc('id') + ->get(); + + // Keep only the most recently created token (latest login); revoke all others + if ($activeTokens->count() > 1) { + $latestToken = $activeTokens->first(); + $idsToDelete = $activeTokens->where('id', '!=', $latestToken->id)->pluck('id'); + + PersonalAccessToken::whereIn('id', $idsToDelete)->delete(); + + $this->notifyConcurrentSession($user, $request); + } + } finally { + $lock->release(); + } + } + + /** + * Get token record with caching + */ + private function getTokenRecord(string $tokenId, string $tokenHash): ?PersonalAccessToken + { + $cacheKey = "token_record_{$tokenId}"; + + return Cache::remember($cacheKey, self::TOKEN_NAME_CACHE_TTL, function () use ($tokenId, $tokenHash) { + return PersonalAccessToken::where('id', $tokenId) + ->where('token', hash('sha256', $tokenHash)) + ->first(); + }); + } + + /** + * Check if this is an impersonation-related request + */ + private function isImpersonationRequest(Request $request): bool + { + $path = $request->path(); + + // Check if the request is to impersonation endpoints + if (str_contains($path, 'impersonate')) { + return true; + } + + // Check if there's an impersonation header + if ($request->hasHeader('X-Original-User-Id')) { + return true; + } + + // Check if the request has impersonation token + $currentToken = $this->resolveToken($request); + if ($currentToken) { + $tokenParts = explode('|', $currentToken); + if (count($tokenParts) === 2) { + $tokenId = $tokenParts[0]; + $tokenHash = $tokenParts[1]; + + // Use cached token record to avoid duplicate queries + $tokenRecord = $this->getTokenRecord($tokenId, $tokenHash); + + if ($tokenRecord && $tokenRecord->name === 'impersonation-token') { + return true; + } + } + } + + return false; + } + + /** + * Check if this is a post-impersonation request (after leaving impersonation) + */ + private function isPostImpersonationRequest(Request $request): bool + { + $path = $request->path(); + + // Check if this is a request after leaving impersonation + // Look for requests that have X-Original-User-Id header but are not impersonation endpoints + if ($request->hasHeader('X-Original-User-Id') && !str_contains($path, 'impersonate')) { + return true; + } + + return false; + } + + /** + * Check if the current token is a fresh login token (SSO login or post-impersonation) + * This prevents false positives when a user legitimately logs in + */ + private function isFreshLoginToken(PersonalAccessToken $currentTokenRecord, User $user): bool + { + // Check if token was created recently (within threshold) + $tokenAge = $currentTokenRecord->created_at->diffInSeconds(now()); + + if ($tokenAge > self::FRESH_TOKEN_AGE) { + return false; // Token is not fresh + } + + // For SSO tokens, if they're fresh, skip enforcement (legitimate login) + if ($currentTokenRecord->name === 'sso-token') { + return true; + } + + // Check for both 'authToken' (camelCase - regular login) and 'auth-token' (kebab-case - post-impersonation) + $isAuthToken = in_array($currentTokenRecord->name, ['authToken', 'auth-token'], true); + + if ($isAuthToken) { + // Check if there are any other auth tokens for this user that were created before this one + // When logging out properly, all tokens should be deleted, so if there are no older + // auth tokens, this is likely a fresh login or post-impersonation + $olderAuthTokens = PersonalAccessToken::where('tokenable_type', get_class($user)) + ->where('tokenable_id', $user->id) + ->where('id', '!=', $currentTokenRecord->id) + ->whereIn('name', ['authToken', 'auth-token']) // Check for both naming conventions + ->where('created_at', '<', $currentTokenRecord->created_at) + ->where(function ($query) { + $query->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->exists(); // Use exists() instead of count() for better performance + + // If there are no older auth tokens, this is a fresh login or post-impersonation + if (!$olderAuthTokens) { + return true; + } + } + + return false; + } + + /** + * Notify user about concurrent session + */ + private function notifyConcurrentSession(User $user, Request $request): void + { + // Notification creation removed per user request + // Concurrent session detection still works, but no notification is created + } + + /** + * Resolve Sanctum plain-text token from Authorization header or auth cookie. + */ + private function resolveToken(Request $request): ?string + { + $token = $request->bearerToken(); + + if (is_string($token) && $token !== '') { + return $token; + } + + $cookieToken = $request->cookie(AuthCookie::name()); + + return is_string($cookieToken) && $cookieToken !== '' ? $cookieToken : null; + } +} diff --git a/be/app/Jobs/CaptureKJCHistoricalDataJob.php b/be/app/Jobs/CaptureKJCHistoricalDataJob.php new file mode 100644 index 0000000..2d71057 --- /dev/null +++ b/be/app/Jobs/CaptureKJCHistoricalDataJob.php @@ -0,0 +1,102 @@ +month = $month; + $this->year = $year; + + // Set queue name for Horizon monitoring + $this->onQueue('kjc-historical-data'); + } + + /** + * Execute the job. + */ + public function handle(KJCHistoricalDataService $kjcHistoricalService) + { + try { + Log::info('Starting KJC historical data capture job', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + ]); + + $success = $kjcHistoricalService->captureMonthlySnapshots($this->month, $this->year); + + if ($success) { + Log::info('KJC historical data capture job completed successfully', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + ]); + } else { + Log::error('KJC historical data capture job failed', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + ]); + + throw new \Exception('KJC historical data capture failed'); + } + + } catch (\Exception $e) { + Log::error('KJC historical data capture job exception', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + + throw $e; + } + } + + /** + * Handle a job failure. + */ + public function failed(\Throwable $exception) + { + Log::error('KJC historical data capture job failed permanently', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + 'error' => $exception->getMessage(), + ]); + } + + /** + * Get the tags that should be assigned to the job. + */ + public function tags() + { + return ['kjc-historical-data', "month-{$this->month}", "year-{$this->year}"]; + } +} diff --git a/be/app/Jobs/CapturePKJHistoricalDataJob.php b/be/app/Jobs/CapturePKJHistoricalDataJob.php new file mode 100644 index 0000000..eee5f0d --- /dev/null +++ b/be/app/Jobs/CapturePKJHistoricalDataJob.php @@ -0,0 +1,102 @@ +month = $month; + $this->year = $year; + + // Set queue name for Horizon monitoring + $this->onQueue('pkj-historical-data'); + } + + /** + * Execute the job. + */ + public function handle(PKJHistoricalDataService $historicalService) + { + try { + Log::info('Starting PKJ historical data capture job', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + ]); + + $success = $historicalService->captureMonthlySnapshots($this->month, $this->year); + + if ($success) { + Log::info('PKJ historical data capture job completed successfully', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + ]); + } else { + Log::error('PKJ historical data capture job failed', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + ]); + + throw new \Exception('PKJ historical data capture failed'); + } + + } catch (\Exception $e) { + Log::error('PKJ historical data capture job exception', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]); + + throw $e; + } + } + + /** + * Handle a job failure. + */ + public function failed(\Throwable $exception) + { + Log::error('PKJ historical data capture job failed permanently', [ + 'month' => $this->month, + 'year' => $this->year, + 'job_id' => $this->job ? $this->job->getJobId() : 'manual-execution', + 'error' => $exception->getMessage(), + ]); + } + + /** + * Get the tags that should be assigned to the job. + */ + public function tags() + { + return ['pkj-historical-data', "month-{$this->month}", "year-{$this->year}"]; + } +} diff --git a/be/app/Models/Country.php b/be/app/Models/Country.php new file mode 100644 index 0000000..431c4bf --- /dev/null +++ b/be/app/Models/Country.php @@ -0,0 +1,12 @@ +belongsTo(Role::class, 'active_role_id'); + } +} diff --git a/be/app/Policies/ImpersonatePolicy.php b/be/app/Policies/ImpersonatePolicy.php new file mode 100644 index 0000000..9c4d6aa --- /dev/null +++ b/be/app/Policies/ImpersonatePolicy.php @@ -0,0 +1,49 @@ +hasRole('DEVELOPER')) { + return true; + } + + return $user->hasPermissionTo('menyamar pengguna'); + } + + /** + * Determine whether the user can impersonate a specific target user. + */ + public function impersonateUser(User $user, User $targetUser): bool + { + // DEVELOPER cannot be impersonated by anyone + if ($targetUser->hasRole('DEVELOPER')) { + return false; + } + + // DEVELOPER role bypasses all permission checks + if ($user->hasRole('DEVELOPER')) { + return true; + } + + // Check if user has permission to impersonate + if (!$user->hasPermissionTo('menyamar pengguna')) { + return false; + } + + // Users with permission can impersonate other users (except DEVELOPER) + return true; + } +} + diff --git a/be/app/Providers/AppServiceProvider.php b/be/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..489fa86 --- /dev/null +++ b/be/app/Providers/AppServiceProvider.php @@ -0,0 +1,34 @@ +app->register(AuthServiceProvider::class); + } + + /** + * Bootstrap any application services. + */ + public function boot(): void + { + Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class); + + // Register impersonate policy + Gate::define('impersonate', [ImpersonatePolicy::class, 'impersonate']); + Gate::define('impersonate.user', [ImpersonatePolicy::class, 'impersonateUser']); + } +} diff --git a/be/app/Providers/FortifyServiceProvider.php b/be/app/Providers/FortifyServiceProvider.php new file mode 100644 index 0000000..f9abbaa --- /dev/null +++ b/be/app/Providers/FortifyServiceProvider.php @@ -0,0 +1,92 @@ +app->singleton(LoginResponse::class, ApiLoginResponse::class); + $this->app->singleton(LogoutResponse::class, ApiLogoutResponse::class); + $this->app->singleton(RegisterResponse::class, ApiRegisterResponse::class); + } + + /** + * Bootstrap any application services. + */ + public function boot(): void + { + Fortify::createUsersUsing(CreateNewUser::class); + Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class); + Fortify::updateUserPasswordsUsing(UpdateUserPassword::class); + Fortify::resetUserPasswordsUsing(ResetUserPassword::class); + Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class); + + RateLimiter::for('login', function (Request $request) { + $throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip()); + + return Limit::perMinute(5)->by($throttleKey); + }); + + RateLimiter::for('two-factor', function (Request $request) { + return Limit::perMinute(5)->by($request->session()->get('login.id')); + }); + + RateLimiter::for('email-verification', function (Request $request) { + $throttleKey = Str::transliterate(Str::lower($request->input('email', '')).'|'.$request->ip()); + + return Limit::perMinute(5)->by($throttleKey); + }); + + RateLimiter::for('email-verification-resend', function (Request $request) { + $throttleKey = Str::transliterate(Str::lower($request->input('email', '')).'|'.$request->ip()); + + return Limit::perMinute(1)->by($throttleKey); + }); + + Fortify::authenticateUsing(function (Request $request) { + $user = User::where('email', $request->email)->first(); + + // Bypass password check in local or development environments + $shouldBypassPassword = config('app.env', 'local'); + + if ($user && ($shouldBypassPassword || Hash::check($request->password, $user->password))) { + if (! $user->hasVerifiedEmail()) { + return $user; + } + + if (! $user->canAuthenticate()) { + throw ValidationException::withMessages([ + 'email' => [$user->getLoginRestrictionMessage()], + ]); + } + + return $user; + } + }); + } +} diff --git a/be/app/Providers/HorizonServiceProvider.php b/be/app/Providers/HorizonServiceProvider.php new file mode 100644 index 0000000..b5a6268 --- /dev/null +++ b/be/app/Providers/HorizonServiceProvider.php @@ -0,0 +1,32 @@ + true); + } +} diff --git a/be/app/Providers/TelescopeServiceProvider.php b/be/app/Providers/TelescopeServiceProvider.php new file mode 100644 index 0000000..470ef17 --- /dev/null +++ b/be/app/Providers/TelescopeServiceProvider.php @@ -0,0 +1,64 @@ +hideSensitiveRequestDetails(); + + $isLocal = $this->app->environment('local'); + + Telescope::filter(function (IncomingEntry $entry) use ($isLocal) { + return $isLocal || + $entry->isReportableException() || + $entry->isFailedRequest() || + $entry->isFailedJob() || + $entry->isScheduledTask() || + $entry->hasMonitoredTag(); + }); + } + + /** + * Prevent sensitive request details from being logged by Telescope. + */ + protected function hideSensitiveRequestDetails(): void + { + if ($this->app->environment('local')) { + return; + } + + Telescope::hideRequestParameters(['_token']); + + Telescope::hideRequestHeaders([ + 'cookie', + 'x-csrf-token', + 'x-xsrf-token', + ]); + } + + /** + * Register the Telescope gate. + * + * This gate determines who can access Telescope in non-local environments. + */ + protected function gate(): void + { + Gate::define('viewTelescope', function ($user) { + return in_array($user->email, [ + // + ]); + }); + } +} diff --git a/be/app/Services/ActiveRoleService.php b/be/app/Services/ActiveRoleService.php new file mode 100644 index 0000000..6652829 --- /dev/null +++ b/be/app/Services/ActiveRoleService.php @@ -0,0 +1,131 @@ +roles; + + if ($roles->isEmpty()) { + return null; + } + + if ($roles->count() === 1) { + return $roles->first(); + } + + if (config('active_role.prefer_member_on_login', true)) { + $memberRole = $roles->first(fn (Role $role) => self::roleContext($role) === 'member'); + + if ($memberRole) { + return $memberRole; + } + } + + return $roles->first(); + } + + public static function assignToCurrentToken(User $user, Role $role): void + { + $token = $user->currentAccessToken(); + + if ($token instanceof PersonalAccessToken) { + $token->forceFill(['active_role_id' => $role->id])->save(); + } + } + + public static function assignDefaultToToken(User $user, PersonalAccessToken $accessToken): void + { + $user->loadMissing('roles'); + + $role = self::resolveDefaultRole($user); + + if ($role) { + $accessToken->forceFill(['active_role_id' => $role->id])->save(); + } + } + + public static function getActiveRole(User $user): ?Role + { + $user->loadMissing(['roles.permissions']); + + $token = $user->currentAccessToken(); + + if ($token instanceof PersonalAccessToken && $token->active_role_id) { + $role = $user->roles->firstWhere('id', $token->active_role_id); + + if ($role) { + return $role; + } + } + + return self::resolveDefaultRole($user); + } + + public static function switchRole(User $user, string $roleId): ?Role + { + $role = $user->roles()->where('roles.id', $roleId)->first(); + + if (! $role) { + return null; + } + + self::assignToCurrentToken($user, $role); + + return $role->load('permissions'); + } + + public static function roleContext(Role $role): string + { + $context = $role->context ?? 'member'; + + return in_array($context, ['admin', 'member'], true) ? $context : 'member'; + } + + public static function redirectPathForRole(Role $role): string + { + return self::roleContext($role) === 'admin' + ? config('active_role.admin_redirect', '/profile') + : config('active_role.member_redirect', '/profile'); + } + + /** + * @return array|null + */ + public static function formatRole(?Role $role): ?array + { + if (! $role) { + return null; + } + + return [ + 'id' => $role->id, + 'name' => $role->name, + 'fullname' => $role->fullname ?? null, + 'guard_name' => $role->guard_name, + 'context' => self::roleContext($role), + ]; + } + + /** + * @return array + */ + public static function sessionMeta(User $user): array + { + $activeRole = self::getActiveRole($user); + + return [ + 'active_role' => self::formatRole($activeRole), + 'can_switch_role' => $user->roles->count() > 1, + 'redirect_path' => $activeRole + ? self::redirectPathForRole($activeRole) + : config('active_role.member_redirect', '/profile'), + ]; + } +} diff --git a/be/app/Services/ActivityLogger.php b/be/app/Services/ActivityLogger.php new file mode 100644 index 0000000..e775ab2 --- /dev/null +++ b/be/app/Services/ActivityLogger.php @@ -0,0 +1,92 @@ +causedBy(Auth::user()) + ->withProperties($properties) + ->log($description); + + if ($subject) { + $activity->update(['subject_type' => get_class($subject), 'subject_id' => $subject->getKey()]); + } + + return $activity; + } + + public static function logLogin(string $email): void + { + self::log("User logged in with email: {$email}", null, [ + 'email' => $email, + 'ip_address' => request()->ip(), + 'user_agent' => request()->userAgent(), + ], 'authentication'); + } + + public static function logLogout(): void + { + self::log('User logged out', null, [ + 'ip_address' => request()->ip(), + 'user_agent' => request()->userAgent(), + ], 'authentication'); + } + + public static function logView(Model $model, ?string $customDescription = null): void + { + $modelName = class_basename($model); + $description = $customDescription ?: "Viewed {$modelName}"; + + self::log($description, $model, [ + 'action' => 'view', + 'url' => request()->fullUrl(), + 'method' => request()->method(), + ], 'view'); + } + + public static function logCustomAction(string $action, string $description, ?Model $subject = null, array $properties = []): void + { + $properties = array_merge($properties, [ + 'action' => $action, + 'url' => request()->fullUrl(), + 'method' => request()->method(), + 'ip_address' => request()->ip(), + ]); + + self::log($description, $subject, $properties, 'custom'); + } + + public static function logSearch(string $query, string $module): void + { + self::log("Searched for '{$query}' in {$module}", null, [ + 'search_query' => $query, + 'module' => $module, + 'results_count' => 0, // You can update this if needed + ], 'search'); + } + + public static function logExport(string $type, ?string $filename = null): void + { + self::log("Exported {$type} data", null, [ + 'export_type' => $type, + 'filename' => $filename, + 'format' => pathinfo($filename, PATHINFO_EXTENSION) ?? 'unknown', + ], 'export'); + } + + public static function logError(string $error, ?Model $subject = null): void + { + self::log("Error occurred: {$error}", $subject, [ + 'error_message' => $error, + 'url' => request()->fullUrl(), + 'method' => request()->method(), + ], 'error'); + } +} diff --git a/be/app/Services/ContactService.php b/be/app/Services/ContactService.php new file mode 100644 index 0000000..e98d14a --- /dev/null +++ b/be/app/Services/ContactService.php @@ -0,0 +1,198 @@ +where('is_active', true) + ->orderBy('sort_order', 'asc') + ->orderBy('name', 'asc') + ->get() + ->toArray(); + + return array_map(function ($item) { + return [ + 'id' => $item->id, + 'name' => $item->name, + 'position' => $item->position, + 'email' => $item->email, + 'phone' => $item->phone, + 'department' => $item->department, + 'sort_order' => $item->sort_order, + ]; + }, $contacts); + } catch (\Exception $e) { + Log::error('Error fetching active contacts: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Get all contact settings (including inactive) for admin + */ + public function getAllContactSettings(): array + { + try { + $settings = DB::table('contact_settings') + ->orderBy('sort_order', 'asc') + ->orderBy('name', 'asc') + ->get() + ->toArray(); + + return array_map(function ($item) { + return [ + 'id' => $item->id, + 'name' => $item->name, + 'position' => $item->position, + 'email' => $item->email, + 'phone' => $item->phone, + 'department' => $item->department, + 'is_active' => (bool) $item->is_active, + 'sort_order' => $item->sort_order, + 'created_at' => $item->created_at, + 'updated_at' => $item->updated_at, + ]; + }, $settings); + } catch (\Exception $e) { + Log::error('Error fetching all contact settings: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Update contact settings (bulk update) + */ + public function updateContactSettings(array $contactData): array + { + try { + // Clear existing settings + DB::table('contact_settings')->truncate(); + + // Insert new settings + $insertData = []; + foreach ($contactData as $index => $item) { + $insertData[] = [ + 'name' => $item['name'], + 'position' => $item['position'] ?? null, + 'email' => $item['email'] ?? null, + 'phone' => $item['phone'] ?? null, + 'department' => $item['department'] ?? null, + 'is_active' => $item['is_active'] ?? true, + 'sort_order' => $item['sort_order'] ?? $index, + 'created_at' => now(), + 'updated_at' => now(), + ]; + } + + DB::table('contact_settings')->insert($insertData); + + // Return updated settings + return $this->getAllContactSettings(); + } catch (\Exception $e) { + Log::error('Error updating contact settings: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Add a single contact person + */ + public function addContactPerson(array $data): array + { + try { + $id = DB::table('contact_settings')->insertGetId([ + 'name' => $data['name'], + 'position' => $data['position'] ?? null, + 'email' => $data['email'] ?? null, + 'phone' => $data['phone'] ?? null, + 'department' => $data['department'] ?? null, + 'is_active' => $data['is_active'] ?? true, + 'sort_order' => $data['sort_order'] ?? 0, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + return $this->getAllContactSettings(); + } catch (\Exception $e) { + Log::error('Error adding contact person: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Update a single contact person + */ + public function updateContactPerson(int $id, array $data): array + { + try { + DB::table('contact_settings') + ->where('id', $id) + ->update([ + 'name' => $data['name'], + 'position' => $data['position'] ?? null, + 'email' => $data['email'] ?? null, + 'phone' => $data['phone'] ?? null, + 'department' => $data['department'] ?? null, + 'is_active' => $data['is_active'] ?? true, + 'sort_order' => $data['sort_order'] ?? 0, + 'updated_at' => now(), + ]); + + return $this->getAllContactSettings(); + } catch (\Exception $e) { + Log::error('Error updating contact person: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Delete a contact person + */ + public function deleteContactPerson(int $id): array + { + try { + DB::table('contact_settings')->where('id', $id)->delete(); + + return $this->getAllContactSettings(); + } catch (\Exception $e) { + Log::error('Error deleting contact person: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Toggle active status of a contact person + */ + public function toggleContactPerson(int $id): array + { + try { + $contact = DB::table('contact_settings')->where('id', $id)->first(); + + if (!$contact) { + throw new \Exception('Contact person not found'); + } + + DB::table('contact_settings') + ->where('id', $id) + ->update([ + 'is_active' => !$contact->is_active, + 'updated_at' => now(), + ]); + + return $this->getAllContactSettings(); + } catch (\Exception $e) { + Log::error('Error toggling contact person: ' . $e->getMessage()); + throw $e; + } + } +} diff --git a/be/app/Services/DocumentService.php b/be/app/Services/DocumentService.php new file mode 100644 index 0000000..4aaaee8 --- /dev/null +++ b/be/app/Services/DocumentService.php @@ -0,0 +1,174 @@ +getClientOriginalName(); + + // Store file in a folder named after the model + $folderName = strtolower(class_basename($model)); + $filePath = $file->storeAs("documents/{$folderName}", $fileName, 'public'); + + // Create document record + return Document::create([ + 'documentable_type' => get_class($model), + 'documentable_id' => $model->id, + 'document_name' => $file->getClientOriginalName(), + 'document_path' => $filePath, + 'file_size' => $file->getSize(), + 'mime_type' => $file->getClientMimeType(), + 'document_type' => $documentType, + 'description' => $description, + 'uploaded_by' => auth()->id(), + ]); + } + + /** + * Delete a document. + */ + public function deleteDocument(int $documentId): bool + { + $document = Document::findOrFail($documentId); + + return $document->delete(); + } + + /** + * Get all documents for a model. + */ + public function getDocuments(Model $model, ?string $documentType = null) + { + $query = $model->documents(); + + if ($documentType) { + $query->where('document_type', $documentType); + } + + return $query->with('uploadedBy')->get(); + } + + /** + * Get document by ID with validation. + */ + public function getDocument(int $documentId): Document + { + return Document::with('uploadedBy')->findOrFail($documentId); + } + + /** + * Download a document. + */ + public function downloadDocument(int $documentId) + { + $document = $this->getDocument($documentId); + + if (! Storage::exists($document->document_path)) { + throw new Exception('File not found'); + } + + return Storage::download($document->document_path, $document->document_name); + } + + /** + * Get documents count for a model. + */ + public function getDocumentsCount(Model $model, ?string $documentType = null): int + { + $query = $model->documents(); + + if ($documentType) { + $query->where('document_type', $documentType); + } + + return $query->count(); + } + + /** + * Check if model has documents. + */ + public function hasDocuments(Model $model, ?string $documentType = null): bool + { + return $this->getDocumentsCount($model, $documentType) > 0; + } + + /** + * Get supported file types. + */ + public function getSupportedFileTypes(): array + { + return [ + 'pdf' => 'application/pdf', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'jpg' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'png' => 'image/png', + 'gif' => 'image/gif', + ]; + } + + /** + * Get max file size in KB. + */ + public function getMaxFileSize(): int + { + return 10240; // 10MB + } + + /** + * Validate file upload. + */ + public function validateFile(UploadedFile $file): bool + { + $supportedTypes = $this->getSupportedFileTypes(); + $maxSize = $this->getMaxFileSize() * 1024; // Convert to bytes + + // Check file size + if ($file->getSize() > $maxSize) { + throw new Exception('File size exceeds maximum limit of '.$this->getMaxFileSize().'KB'); + } + + // Check mime type + if (! in_array($file->getClientMimeType(), $supportedTypes)) { + throw new Exception('File type not supported. Supported types: '.implode(', ', array_keys($supportedTypes))); + } + + return true; + } + + /** + * Bulk delete documents for a model. + */ + public function bulkDeleteDocuments(Model $model, array $documentIds): int + { + $deletedCount = 0; + + foreach ($documentIds as $documentId) { + $document = $model->documents()->find($documentId); + + if ($document) { + $document->delete(); + $deletedCount++; + } + } + + return $deletedCount; + } +} diff --git a/be/app/Services/OnlineUsersService.php b/be/app/Services/OnlineUsersService.php new file mode 100644 index 0000000..8d6a3a4 --- /dev/null +++ b/be/app/Services/OnlineUsersService.php @@ -0,0 +1,212 @@ +subSeconds($timeoutSeconds); + + // Get active Sanctum tokens with user information + $onlineTokens = PersonalAccessToken::with(['tokenable.unit', 'tokenable.rank', 'tokenable.position']) + ->where('tokenable_type', User::class) + ->where('last_used_at', '>', $cutoffTime) + ->where(function ($query) { + $query->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->whereHas('tokenable', function ($query) { + $query->whereNull('deleted_at'); + }) + ->orderBy('last_used_at', 'desc') + ->get(); + + // Group by user to handle multiple tokens + $onlineUsers = $onlineTokens->groupBy('tokenable_id')->map(function ($tokens) { + $token = $tokens->first(); + $user = $token->tokenable; + $latestToken = $tokens->sortByDesc('last_used_at')->first(); + + return [ + 'id' => $user->id, + 'name' => $user->name, + 'email' => $user->email, + 'army_number' => $user->army_number, + 'image_url' => $user->image_url ? Storage::disk('public')->url($user->image_url) : null, + 'status' => $user->status, + 'unit_name' => $user->unit?->name, + 'rank_name' => $user->rank?->name, + 'position_name' => $user->position?->name, + 'ip_address' => 'N/A', // Sanctum doesn't store IP by default + 'user_agent' => $this->parseUserAgent('Sanctum Token'), + 'last_activity' => $latestToken->last_used_at?->timestamp ?? $latestToken->created_at->timestamp, + 'last_activity_human' => $latestToken->last_used_at?->diffForHumans() ?? $latestToken->created_at->diffForHumans(), + 'session_count' => $tokens->count(), + 'is_online' => true + ]; + }); + + return $onlineUsers->values(); + }); + } + + /** + * Get online users count + * + * @param int $timeoutMinutes Minutes of inactivity to consider user offline + * @return int + */ + public function getOnlineUsersCount(int $timeoutMinutes = 5): int + { + $cacheKey = "online_users_count_{$timeoutMinutes}"; + + return Cache::remember($cacheKey, 30, function () use ($timeoutMinutes) { + $timeoutSeconds = $timeoutMinutes * 60; + $cutoffTime = now()->subSeconds($timeoutSeconds); + + return PersonalAccessToken::where('tokenable_type', User::class) + ->where('last_used_at', '>', $cutoffTime) + ->where(function ($query) { + $query->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->whereHas('tokenable', function ($query) { + $query->whereNull('deleted_at'); + }) + ->distinct('tokenable_id') + ->count('tokenable_id'); + }); + } + + /** + * Get user's current session information + * + * @param int $userId + * @return array|null + */ + public function getUserSessionInfo(int $userId): ?array + { + $token = PersonalAccessToken::where('tokenable_type', User::class) + ->where('tokenable_id', $userId) + ->where(function ($query) { + $query->whereNull('expires_at') + ->orWhere('expires_at', '>', now()); + }) + ->orderBy('last_used_at', 'desc') + ->first(); + + if (!$token) { + return null; + } + + return [ + 'session_id' => $token->id, + 'ip_address' => 'N/A', // Sanctum doesn't store IP by default + 'user_agent' => $this->parseUserAgent('Sanctum Token'), + 'last_activity' => $token->last_used_at?->timestamp ?? $token->created_at->timestamp, + 'last_activity_human' => $token->last_used_at?->diffForHumans() ?? $token->created_at->diffForHumans(), + 'is_online' => $token->last_used_at && $token->last_used_at->gt(now()->subMinutes(5)) + ]; + } + + /** + * Parse user agent string to extract browser and OS info + * + * @param string $userAgent + * @return array + */ + private function parseUserAgent(string $userAgent): array + { + $browser = 'Unknown'; + $os = 'Unknown'; + + // Simple browser detection + if (strpos($userAgent, 'Chrome') !== false) { + $browser = 'Chrome'; + } elseif (strpos($userAgent, 'Firefox') !== false) { + $browser = 'Firefox'; + } elseif (strpos($userAgent, 'Safari') !== false) { + $browser = 'Safari'; + } elseif (strpos($userAgent, 'Edge') !== false) { + $browser = 'Edge'; + } + + // Simple OS detection + if (strpos($userAgent, 'Windows') !== false) { + $os = 'Windows'; + } elseif (strpos($userAgent, 'Mac') !== false) { + $os = 'macOS'; + } elseif (strpos($userAgent, 'Linux') !== false) { + $os = 'Linux'; + } elseif (strpos($userAgent, 'Android') !== false) { + $os = 'Android'; + } elseif (strpos($userAgent, 'iOS') !== false) { + $os = 'iOS'; + } + + return [ + 'browser' => $browser, + 'os' => $os, + 'raw' => $userAgent + ]; + } + + /** + * Clear online users cache + */ + public function clearCache(): void + { + Cache::forget('online_users_5'); + Cache::forget('online_users_10'); + Cache::forget('online_users_15'); + Cache::forget('online_users_30'); + Cache::forget('online_users_count_5'); + Cache::forget('online_users_count_10'); + Cache::forget('online_users_count_15'); + Cache::forget('online_users_count_30'); + } + + /** + * Get online users statistics + * + * @return array + */ + public function getOnlineUsersStats(): array + { + $stats = []; + + // Get stats for different timeout periods + $timeouts = [5, 10, 15, 30]; + + foreach ($timeouts as $timeout) { + $stats["online_{$timeout}min"] = $this->getOnlineUsersCount($timeout); + } + + // Get total registered users + $stats['total_users'] = User::count(); + + // Get users by status + $stats['active_users'] = User::where('status', 'active')->count(); + $stats['inactive_users'] = User::where('status', 'inactive')->count(); + + return $stats; + } +} diff --git a/be/app/Services/SocialMediaService.php b/be/app/Services/SocialMediaService.php new file mode 100644 index 0000000..433dc8b --- /dev/null +++ b/be/app/Services/SocialMediaService.php @@ -0,0 +1,193 @@ +where('is_active', true) + ->orderBy('sort_order', 'asc') + ->orderBy('name', 'asc') + ->get() + ->toArray(); + + return array_map(function ($item) { + return [ + 'id' => $item->id, + 'platform' => $item->platform, + 'name' => $item->name, + 'url' => $item->url, + 'icon' => $item->icon, + 'sort_order' => $item->sort_order, + ]; + }, $socialMedia); + } catch (\Exception $e) { + Log::error('Error fetching active social media: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Get all social media settings (including inactive) for admin + */ + public function getAllSocialMediaSettings(): array + { + try { + $settings = DB::table('social_media_settings') + ->orderBy('sort_order', 'asc') + ->orderBy('name', 'asc') + ->get() + ->toArray(); + + return array_map(function ($item) { + return [ + 'id' => $item->id, + 'platform' => $item->platform, + 'name' => $item->name, + 'url' => $item->url, + 'icon' => $item->icon, + 'is_active' => (bool) $item->is_active, + 'sort_order' => $item->sort_order, + 'created_at' => $item->created_at, + 'updated_at' => $item->updated_at, + ]; + }, $settings); + } catch (\Exception $e) { + Log::error('Error fetching all social media settings: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Update social media settings (bulk update) + */ + public function updateSocialMediaSettings(array $socialMediaData): array + { + try { + // Clear existing settings + DB::table('social_media_settings')->truncate(); + + // Insert new settings + $insertData = []; + foreach ($socialMediaData as $index => $item) { + $insertData[] = [ + 'platform' => $item['platform'], + 'name' => $item['name'], + 'url' => $item['url'], + 'icon' => $item['icon'] ?? null, + 'is_active' => $item['is_active'] ?? true, + 'sort_order' => $item['sort_order'] ?? $index, + 'created_at' => now(), + 'updated_at' => now(), + ]; + } + + DB::table('social_media_settings')->insert($insertData); + + // Return updated settings + return $this->getAllSocialMediaSettings(); + } catch (\Exception $e) { + Log::error('Error updating social media settings: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Add a single social media platform + */ + public function addSocialMediaPlatform(array $data): array + { + try { + $id = DB::table('social_media_settings')->insertGetId([ + 'platform' => $data['platform'], + 'name' => $data['name'], + 'url' => $data['url'], + 'icon' => $data['icon'] ?? null, + 'is_active' => $data['is_active'] ?? true, + 'sort_order' => $data['sort_order'] ?? 0, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + return $this->getAllSocialMediaSettings(); + } catch (\Exception $e) { + Log::error('Error adding social media platform: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Update a single social media platform + */ + public function updateSocialMediaPlatform(int $id, array $data): array + { + try { + DB::table('social_media_settings') + ->where('id', $id) + ->update([ + 'platform' => $data['platform'], + 'name' => $data['name'], + 'url' => $data['url'], + 'icon' => $data['icon'] ?? null, + 'is_active' => $data['is_active'] ?? true, + 'sort_order' => $data['sort_order'] ?? 0, + 'updated_at' => now(), + ]); + + return $this->getAllSocialMediaSettings(); + } catch (\Exception $e) { + Log::error('Error updating social media platform: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Delete a social media platform + */ + public function deleteSocialMediaPlatform(int $id): array + { + try { + DB::table('social_media_settings')->where('id', $id)->delete(); + + return $this->getAllSocialMediaSettings(); + } catch (\Exception $e) { + Log::error('Error deleting social media platform: ' . $e->getMessage()); + throw $e; + } + } + + /** + * Toggle active status of a social media platform + */ + public function toggleSocialMediaPlatform(int $id): array + { + try { + $platform = DB::table('social_media_settings')->where('id', $id)->first(); + + if (!$platform) { + throw new \Exception('Social media platform not found'); + } + + DB::table('social_media_settings') + ->where('id', $id) + ->update([ + 'is_active' => !$platform->is_active, + 'updated_at' => now(), + ]); + + return $this->getAllSocialMediaSettings(); + } catch (\Exception $e) { + Log::error('Error toggling social media platform: ' . $e->getMessage()); + throw $e; + } + } +} diff --git a/be/app/Services/VisibilityService.php b/be/app/Services/VisibilityService.php new file mode 100644 index 0000000..dad6050 --- /dev/null +++ b/be/app/Services/VisibilityService.php @@ -0,0 +1,304 @@ +can('akses peringkat keseluruhan', Unit::class)) { + return $query; + } + + // Get user's unit + $userUnit = Unit::find($user->unit_id); + if (!$userUnit) { + return $query->whereRaw('1 = 0'); + } + + // Government permission: Can view all units under their government + // Government users do NOT see units without formations + // SEL PERO 91 REJ (process models): ONLY see units without formation - not their gov/formation units + if ($user->can('akses peringkat formasi')) { + if ($includeUnitsWithoutFormation && $user->hasRole('SEL PERO 91 REJ')) { + $unitIds = Unit::whereNull('formation_id') + ->whereNull('repair_formation_id') + ->pluck('id') + ->toArray(); + } else { + $unitIds = $this->getUnitsUnderGovernment($userUnit); + $unitIds = $this->excludeUnitsWithoutFormation($unitIds); + } + + if (!empty($unitIds)) { + return $query->whereIn($unitColumn, $unitIds); + } + return $query->whereRaw('1 = 0'); + } + + // DIV permission: Can view all units under their formation (including repair formations) + if ($user->can('akses peringkat divisyen')) { + $unitIds = $this->getVisibleUnitIdsForFormationUser($user, $userUnit, $includeUnitsWithoutFormation); + + if (!empty($unitIds)) { + return $query->whereIn($unitColumn, $unitIds); + } + return $query->whereRaw('1 = 0'); + } + + // Unit permission: Can only view data within their unit + return $query->where($unitColumn, $user->unit_id); + } + + /** + * Apply visibility scoping for models with indirect unit relationships + * + * @param bool $includeUnitsWithoutFormation When true (process models), SEL PERO 91 REJ + * users can see units without formations. Government users never see units without formations. + */ + public function applyVisibilityToIndirectQuery(Builder $query, $user, array $unitRelationship, bool $includeUnitsWithoutFormation = false): Builder + { + // Check if user has akses peringkat keseluruhan permission (super admin) + if ($user->can('akses peringkat keseluruhan', Unit::class)) { + return $query; + } + + // Get user's unit + $userUnit = Unit::find($user->unit_id); + if (!$userUnit) { + return $query->whereRaw('1 = 0'); + } + + // Government permission: Can view all units under their government + // SEL PERO 91 REJ (process models): ONLY see units without formation - not their gov/formation units + if ($user->can('akses peringkat formasi')) { + if ($includeUnitsWithoutFormation && $user->hasRole('SEL PERO 91 REJ')) { + $unitIds = Unit::whereNull('formation_id') + ->whereNull('repair_formation_id') + ->pluck('id') + ->toArray(); + } else { + $unitIds = $this->getUnitsUnderGovernment($userUnit); + $unitIds = $this->excludeUnitsWithoutFormation($unitIds); + } + + if (!empty($unitIds)) { + return $query->whereHas($unitRelationship['relationship'], function ($subQuery) use ($unitIds, $unitRelationship) { + $subQuery->whereIn($unitRelationship['unitColumn'], $unitIds); + }); + } + return $query->whereRaw('1 = 0'); + } + + // DIV permission: Can view all units under their formation (including repair formations) + if ($user->can('akses peringkat divisyen')) { + $unitIds = $this->getVisibleUnitIdsForFormationUser($user, $userUnit, $includeUnitsWithoutFormation); + + if (!empty($unitIds)) { + return $query->whereHas($unitRelationship['relationship'], function ($subQuery) use ($unitIds, $unitRelationship) { + $subQuery->whereIn($unitRelationship['unitColumn'], $unitIds); + }); + } + return $query->whereRaw('1 = 0'); + } + + // Unit permission: Can only view data within their unit + return $query->whereHas($unitRelationship['relationship'], function ($subQuery) use ($user, $unitRelationship) { + $subQuery->where($unitRelationship['unitColumn'], $user->unit_id); + }); + } + + /** + * Get all units under the same government as the user's unit + * Handles both direct government relationships and formation-government relationships + * Priority: Direct government_id takes precedence over formation government + * + * @param Unit $userUnit + * @return array + */ + public function getUnitsUnderGovernment(Unit $userUnit): array + { + $unitIds = collect(); + + // Case 1: User's unit has direct government relationship (HIGHEST PRIORITY) + if ($userUnit->government_id) { + $directUnits = Unit::where('government_id', $userUnit->government_id) + ->pluck('id'); + $unitIds = $unitIds->merge($directUnits); + + // Also get units in formations under the same direct government + $formationUnits = Unit::whereHas('formation', function ($query) use ($userUnit) { + $query->where('government_id', $userUnit->government_id); + })->pluck('id'); + $unitIds = $unitIds->merge($formationUnits); + + return $unitIds->unique()->toArray(); + } + + // Case 2: User's unit belongs to a formation that has a government (FALLBACK) + if ($userUnit->formation_id) { + $formation = Formation::find($userUnit->formation_id); + if ($formation && $formation->government_id) { + // Get all units in formations under the same government + $formationUnits = Unit::whereHas('formation', function ($query) use ($formation) { + $query->where('government_id', $formation->government_id); + })->pluck('id'); + $unitIds = $unitIds->merge($formationUnits); + + // Also get direct government units under the same government + $directGovUnits = Unit::where('government_id', $formation->government_id) + ->pluck('id'); + $unitIds = $unitIds->merge($directGovUnits); + } + } + + return $unitIds->unique()->toArray(); + } + + /** + * Get the repair formation ID for a unit + * Priority: repair_formation_id > formation_id > null + * + * @param Unit $unit + * @return int|null + */ + public function getRepairFormationId(Unit $unit): ?int + { + // Priority 1: Check repair_formation_id (custom repair formation) + if ($unit->repair_formation_id) { + return $unit->repair_formation_id; + } + + // Priority 2: Fall back to regular formation_id + if ($unit->formation_id) { + return $unit->formation_id; + } + + // Priority 3: No formation (government-level only) + return null; + } + + /** + * Get visible unit IDs for a user + * + * @param bool $includeUnitsWithoutFormation When true (process models), SEL PERO 91 REJ + * users can see units without formations. Government users never see units without formations. + */ + public function getVisibleUnitIds($user, bool $includeUnitsWithoutFormation = false): array + { + // Check if user has akses peringkat keseluruhan permission (super admin) + if ($user->can('akses peringkat keseluruhan', Unit::class)) { + return Unit::pluck('id')->toArray(); + } + + // Get user's unit + $userUnit = Unit::find($user->unit_id); + if (!$userUnit) { + return []; + } + + // Government permission: Can view all units under their government + // SEL PERO 91 REJ (process models): ONLY see units without formation - not their gov/formation units + if ($user->can('akses peringkat formasi')) { + if ($includeUnitsWithoutFormation && $user->hasRole('SEL PERO 91 REJ')) { + return Unit::whereNull('formation_id') + ->whereNull('repair_formation_id') + ->pluck('id') + ->toArray(); + } + $unitIds = $this->getUnitsUnderGovernment($userUnit); + return $this->excludeUnitsWithoutFormation($unitIds); + } + + // DIV permission: Can view all units under their formation (including repair formations) + if ($user->can('akses peringkat divisyen')) { + return $this->getVisibleUnitIdsForFormationUser($user, $userUnit, $includeUnitsWithoutFormation); + } + + // Unit permission: Can only view data within their unit + return [$user->unit_id]; + } + + /** + * Exclude units that have no formation (both formation_id and repair_formation_id are null). + * Government users do not see these units. + */ + protected function excludeUnitsWithoutFormation(array $unitIds): array + { + if (empty($unitIds)) { + return []; + } + + return Unit::whereIn('id', $unitIds) + ->where(function ($q) { + $q->whereNotNull('formation_id') + ->orWhereNotNull('repair_formation_id'); + }) + ->pluck('id') + ->toArray(); + } + + /** + * Get visible unit IDs for a user with akses peringkat divisyen permission. + * + * Asset view (includeUnitsWithoutFormation=false): Only units where formation_id matches. + * Excludes units that have repair_formation_id but formation_id null (e.g. 10 SKN RAJD uses + * 3 DIV for repair only - 3 DIV users see their repairs but NOT their asset data). + * + * Process view (includeUnitsWithoutFormation=true): Units where repair_formation_id OR + * formation_id matches. SEL PERO 91 REJ also sees units without any formation. + */ + protected function getVisibleUnitIdsForFormationUser($user, Unit $userUnit, bool $includeUnitsWithoutFormation): array + { + $userRepairFormationId = $this->getRepairFormationId($userUnit); + + if ($userRepairFormationId) { + if (!$includeUnitsWithoutFormation) { + // Asset view: Only units that belong to the formation (formation_id matches). + // Exclude units that use formation only for repair (formation_id null, repair_formation_id set). + return Unit::where('formation_id', $userRepairFormationId) + ->pluck('id') + ->toArray(); + } + + // SEL PERO 91 REJ: ONLY see units without formation - not their formation's units + // (formation units are handled by SEL PERO DIV) + if ($user->hasRole('SEL PERO 91 REJ')) { + return Unit::whereNull('formation_id') + ->whereNull('repair_formation_id') + ->pluck('id') + ->toArray(); + } + + // Process view: Units in user's formation (repair_formation_id or formation_id) + return Unit::where(function ($q) use ($userRepairFormationId) { + $q->where('repair_formation_id', $userRepairFormationId) + ->orWhere(function ($q2) use ($userRepairFormationId) { + $q2->whereNull('repair_formation_id') + ->where('formation_id', $userRepairFormationId); + }); + })->pluck('id')->toArray(); + } + + // User's unit has no formation - check if they have SEL PERO 91 REJ (process models only) + if ($includeUnitsWithoutFormation && $user->hasRole('SEL PERO 91 REJ')) { + return Unit::whereNull('formation_id') + ->whereNull('repair_formation_id') + ->pluck('id') + ->toArray(); + } + + return []; + } +} + diff --git a/be/app/Support/AuthCookie.php b/be/app/Support/AuthCookie.php new file mode 100644 index 0000000..2d7704e --- /dev/null +++ b/be/app/Support/AuthCookie.php @@ -0,0 +1,96 @@ +withCookie(self::make($plainTextToken)); + } + + public static function clearAuthCookies(JsonResponse $response): JsonResponse + { + return $response + ->withCookie(self::forget()) + ->withCookie(self::forgetOriginalUserId()); + } + + public static function shouldExposeTokenInResponse(): bool + { + return (bool) config('auth_cookie.expose_token_in_response', false); + } +} diff --git a/be/app/Traits/HasDocuments.php b/be/app/Traits/HasDocuments.php new file mode 100644 index 0000000..e4580a3 --- /dev/null +++ b/be/app/Traits/HasDocuments.php @@ -0,0 +1,91 @@ +morphMany(Document::class, 'documentable'); + } + + /** + * Get documents of a specific type. + */ + public function documentsOfType($type) + { + return $this->documents()->where('document_type', $type); + } + + /** + * Upload a document for this model. + */ + public function uploadDocument(UploadedFile $file, $documentType = 'general', $description = null) + { + // Generate unique filename + $fileName = time().'_'.$file->getClientOriginalName(); + + // Store file in a folder named after the model + $folderName = strtolower(class_basename($this)); + $filePath = $file->storeAs("documents/{$folderName}", $fileName); + + // Create document record + return $this->documents()->create([ + 'document_name' => $file->getClientOriginalName(), + 'document_path' => $filePath, + 'file_size' => $file->getSize(), + 'mime_type' => $file->getClientMimeType(), + 'document_type' => $documentType, + 'description' => $description, + 'uploaded_by' => auth()->id(), + ]); + } + + /** + * Delete a document by ID. + */ + public function deleteDocument($documentId) + { + $document = $this->documents()->findOrFail($documentId); + + return $document->delete(); + } + + /** + * Get documents count. + */ + public function getDocumentsCountAttribute() + { + return $this->documents()->count(); + } + + /** + * Get documents count by type. + */ + public function getDocumentsCountByType($type) + { + return $this->documentsOfType($type)->count(); + } + + /** + * Check if model has documents. + */ + public function hasDocuments() + { + return $this->documents()->exists(); + } + + /** + * Check if model has documents of specific type. + */ + public function hasDocumentsOfType($type) + { + return $this->documentsOfType($type)->exists(); + } +} diff --git a/be/app/Traits/HasVisibility.php b/be/app/Traits/HasVisibility.php new file mode 100644 index 0000000..1d42fd0 --- /dev/null +++ b/be/app/Traits/HasVisibility.php @@ -0,0 +1,58 @@ +includeUnitsWithoutFormation + : false; + + // Check if model has a direct unit column + $unitColumn = property_exists($this, 'unitColumn') ? $this->unitColumn : 'unit_id'; + + // Check if model has an indirect unit relationship + $unitRelationship = property_exists($this, 'unitRelationship') ? $this->unitRelationship : null; + + if ($unitRelationship) { + return $this->getVisibilityService()->applyVisibilityToIndirectQuery( + $query, + $user, + $unitRelationship, + $includeUnitsWithoutFormation + ); + } + + return $this->getVisibilityService()->applyVisibilityToQuery( + $query, + $user, + $unitColumn, + $includeUnitsWithoutFormation + ); + } + + /** + * Get all units under the same government as the user's unit + * Handles both direct government relationships and formation-government relationships + * Priority: Direct government_id takes precedence over formation government + * + * @deprecated Use VisibilityService::getUnitsUnderGovernment() instead + */ + protected function getUnitsUnderGovernment($userUnit) + { + return $this->getVisibilityService()->getUnitsUnderGovernment($userUnit); + } +} \ No newline at end of file diff --git a/be/app/Traits/HttpClientTrait.php b/be/app/Traits/HttpClientTrait.php new file mode 100644 index 0000000..0177084 --- /dev/null +++ b/be/app/Traits/HttpClientTrait.php @@ -0,0 +1,104 @@ +withoutVerifying(); + } + + return $client; + } + + /** + * Get a configured HTTP client with authentication. + * + * @param string $token Bearer token for authentication + * @param array $additionalHeaders Additional headers to add + * @param bool $withoutVerifying Whether to skip SSL verification + * @return \Illuminate\Http\Client\PendingRequest + */ + protected function getAuthenticatedHttpClient(string $token, array $additionalHeaders = [], bool $withoutVerifying = false) + { + $headers = array_merge([ + 'Authorization' => 'Bearer '.$token, + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + ], $additionalHeaders); + + return $this->getHttpClient($headers, $withoutVerifying); + } + + /** + * Log HTTP request details for debugging. + * + * @param string $method HTTP method + * @param string $url Request URL + * @param array $data Request data + * @param array $headers Request headers + */ + protected function logHttpRequest(string $method, string $url, array $data = [], array $headers = []) + { + Log::debug('HTTP Request', [ + 'method' => $method, + 'url' => $url, + 'data' => $data, + 'headers' => array_keys($headers), // Don't log sensitive header values + 'environment' => config('app.env'), + 'proxy_enabled' => $this->isProxyEnabled(), + ]); + } + + /** + * Log HTTP response details for debugging. + * + * @param \Illuminate\Http\Client\Response $response + * @param string $context Additional context + */ + protected function logHttpResponse($response, string $context = '') + { + Log::debug('HTTP Response'.($context ? " - {$context}" : ''), [ + 'status' => $response->status(), + 'successful' => $response->successful(), + 'body_length' => strlen($response->body()), + 'headers' => $response->headers(), + ]); + } + + /** + * Check if proxy is enabled for current environment. + */ + protected function isProxyEnabled(): bool + { + $config = config('http'); + $proxyConfig = $config['proxy'] ?? []; + + return isset($proxyConfig['enabled']) && $proxyConfig['enabled'] && + in_array(config('app.env'), $proxyConfig['environments'] ?? []); + } + + /** + * Get current proxy configuration. + */ + protected function getProxyConfig(): array + { + $config = config('http'); + + return $config['proxy'] ?? []; + } +} diff --git a/be/app/Traits/NotifiesAdmins.php b/be/app/Traits/NotifiesAdmins.php new file mode 100644 index 0000000..0b808c8 --- /dev/null +++ b/be/app/Traits/NotifiesAdmins.php @@ -0,0 +1,55 @@ +whereIn('name', ['PENTADBIR', 'DEVELOPER']); + })->get(); + } + + /** + * Merge admin users with specific role users and return unique collection + */ + protected function mergeWithAdmins(Collection $specificUsers): Collection + { + $adminUsers = $this->getAdminUsers(); + return $specificUsers->merge($adminUsers)->unique('id'); + } + + /** + * Get users with specific roles and merge with admins + */ + protected function getUsersWithRolesAndAdmins(array $roles): Collection + { + $specificUsers = User::whereHas('roles', function ($query) use ($roles) { + $query->whereIn('name', $roles); + })->get(); + + return $this->mergeWithAdmins($specificUsers); + } + + /** + * Get user IDs from a collection and merge with admin user IDs + */ + protected function mergeUserIdsWithAdmins($userIds): Collection + { + $adminIds = $this->getAdminUsers()->pluck('id'); + + if ($userIds instanceof Collection) { + return $userIds->merge($adminIds)->unique()->filter(); + } + + return collect($userIds)->merge($adminIds)->unique()->filter(); + } +} + diff --git a/be/artisan b/be/artisan new file mode 100755 index 0000000..c35e31d --- /dev/null +++ b/be/artisan @@ -0,0 +1,18 @@ +#!/usr/bin/env php +handleCommand(new ArgvInput); + +exit($status); diff --git a/be/bootstrap/app.php b/be/bootstrap/app.php new file mode 100644 index 0000000..7746dd5 --- /dev/null +++ b/be/bootstrap/app.php @@ -0,0 +1,124 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', + commands: __DIR__.'/../routes/console.php', + apiPrefix: '', + // health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // HttpOnly cookie → Bearer for Sanctum (SPA on mykopkb.com → api.mykopkb.com) + $middleware->api(prepend: [ + \App\Http\Middleware\AuthenticateFromCookie::class, + ]); + + // Single session enforcement for authenticated routes + $middleware->alias([ + 'single.session' => \App\Http\Middleware\SingleSessionMiddleware::class, + 'block.api.tools' => \App\Http\Middleware\BlockApiToolsMiddleware::class, + 'api.key.auth' => \App\Http\Middleware\ApiKeyAuthenticationMiddleware::class, + ]); + }) + ->withExceptions(function (Exceptions $exceptions): void { + // Customize authorization exception message to Malay + $exceptions->render(function (Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Tindakan ini tidak dibenarkan.', + ], 403); + } + }); + + // Also handle AuthorizationException for backward compatibility + $exceptions->render(function (Illuminate\Auth\Access\AuthorizationException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Tindakan ini tidak dibenarkan.', + ], 403); + } + }); + + // Handle Model Not Found exceptions (404 errors) + $exceptions->render(function (Illuminate\Database\Eloquent\ModelNotFoundException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Data tidak dijumpai.', + ], 404); + } + }); + + // Handle Validation exceptions (422 errors) + $exceptions->render(function (Illuminate\Validation\ValidationException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Data tidak sah.', + 'errors' => $e->errors(), + ], 422); + } + }); + + // Handle Authentication exceptions (401 errors) + $exceptions->render(function (Illuminate\Auth\AuthenticationException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Anda perlu log masuk terlebih dahulu.', + ], 401); + } + return redirect()->guest('/login'); + }); + + // Handle Method Not Allowed exceptions (405 errors) + $exceptions->render(function (Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Kaedah HTTP tidak dibenarkan.', + ], 405); + } + }); + + // Handle Route Not Found exceptions (404 errors) + $exceptions->render(function (Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Halaman tidak dijumpai.', + ], 404); + } + }); + + // Handle Too Many Requests exceptions (429 errors) + $exceptions->render(function (Illuminate\Http\Exceptions\ThrottleRequestsException $e, $request) { + if ($request->expectsJson()) { + return response()->json([ + 'success' => false, + 'message' => 'Terlalu banyak permintaan. Sila cuba lagi nanti.', + ], 429); + } + }); + + // Handle general exceptions (500 errors) - only in production + $exceptions->render(function (Throwable $e, $request) { + if ($request->expectsJson()) { + $message = app()->environment('production') + ? 'Ralat dalaman pelayan. Sila hubungi pentadbir sistem.' + : $e->getMessage(); + + return response()->json([ + 'success' => false, + 'message' => $message, + ], 500); + } + }); + })->create(); diff --git a/be/bootstrap/cache/.gitignore b/be/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/be/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/be/bootstrap/providers.php b/be/bootstrap/providers.php new file mode 100644 index 0000000..8dc618d --- /dev/null +++ b/be/bootstrap/providers.php @@ -0,0 +1,8 @@ +=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" + }, + "time": "2025-09-16T12:23:56+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dompdf/dompdf", + "version": "v3.1.2", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/b3493e35d31a5e76ec24c3b64a29b0034b2f32a6", + "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6", + "shasum": "" + }, + "require": { + "dompdf/php-font-lib": "^1.0.0", + "dompdf/php-svg-lib": "^1.0.0", + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-gd": "*", + "ext-json": "*", + "ext-zip": "*", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "The Dompdf Community", + "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v3.1.2" + }, + "time": "2025-09-23T03:06:41+00:00" + }, + { + "name": "dompdf/php-font-lib", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "The FontLib Community", + "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/dompdf/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/1.0.1" + }, + "time": "2024-12-02T14:37:59+00:00" + }, + { + "name": "dompdf/php-svg-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "The SvgLib Community", + "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/dompdf/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.0" + }, + "time": "2024-04-29T13:26:35+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8c784d071debd117328803d86b2097615b457500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2024-10-09T13:47:03+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.18.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + }, + "time": "2024-11-01T03:51:45+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.10.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-08-23T22:36:01+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "21dc724a0583619cd1652f673303492272778051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2025-08-23T21:21:41+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:27:06+00:00" + }, + { + "name": "lab404/laravel-impersonate", + "version": "1.7.7", + "source": { + "type": "git", + "url": "https://github.com/404labfr/laravel-impersonate.git", + "reference": "5033f3433a55ca8bb2cc3e4a018a39dd8a327a9f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/404labfr/laravel-impersonate/zipball/5033f3433a55ca8bb2cc3e4a018a39dd8a327a9f", + "reference": "5033f3433a55ca8bb2cc3e4a018a39dd8a327a9f", + "shasum": "" + }, + "require": { + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", + "php": "^7.2 | ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^4.0 | ^5.0 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "phpunit/phpunit": "^7.5 | ^8.0 | ^9.0 | ^10.0 | ^11.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Lab404\\Impersonate\\ImpersonateServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Lab404\\Impersonate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marceau Casals", + "email": "marceau@casals.fr" + } + ], + "description": "Laravel Impersonate is a plugin that allows to you to authenticate as your users.", + "keywords": [ + "auth", + "impersonate", + "impersonation", + "laravel", + "laravel-package", + "laravel-plugin", + "package", + "plugin", + "user" + ], + "support": { + "issues": "https://github.com/404labfr/laravel-impersonate/issues", + "source": "https://github.com/404labfr/laravel-impersonate/tree/1.7.7" + }, + "time": "2025-02-24T16:18:38+00:00" + }, + { + "name": "laravel/fortify", + "version": "v1.30.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/fortify.git", + "reference": "005f4d535ae671312d267d942b964807fc0ef6f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/fortify/zipball/005f4d535ae671312d267d942b964807fc0ef6f8", + "reference": "005f4d535ae671312d267d942b964807fc0ef6f8", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^3.0", + "ext-json": "*", + "illuminate/support": "^10.0|^11.0|^12.0", + "php": "^8.1", + "pragmarx/google2fa": "^8.0", + "symfony/console": "^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^8.16|^9.0|^10.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.4|^11.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Fortify\\FortifyServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Fortify\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Backend controllers and scaffolding for Laravel authentication.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/fortify/issues", + "source": "https://github.com/laravel/fortify" + }, + "time": "2025-08-29T20:15:47+00:00" + }, + { + "name": "laravel/framework", + "version": "v12.29.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "a9e4c73086f5ba38383e9c1d74b84fe46aac730b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/a9e4c73086f5ba38383e9c1d74b84fe46aac730b", + "reference": "a9e4c73086f5ba38383e9c1d74b84fe46aac730b", + "shasum": "" + }, + "require": { + "brick/math": "^0.11|^0.12|^0.13|^0.14", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.7", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "phiki/phiki": "v2.0.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", + "symfony/http-foundation": "^7.2.0", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", + "symfony/polyfill-php83": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-php85": "^1.33", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^10.6.5", + "pda/pheanstalk": "^5.0.6|^7.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", + "predis/predis": "^2.3|^3.0", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", + "predis/predis": "Required to use the predis connector (^2.3|^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "12.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2025-09-16T14:15:03+00:00" + }, + { + "name": "laravel/horizon", + "version": "v5.36.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/horizon.git", + "reference": "eccc804c9da78064c97a8f506bb148f05c816409" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/horizon/zipball/eccc804c9da78064c97a8f506bb148f05c816409", + "reference": "eccc804c9da78064c97a8f506bb148f05c816409", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcntl": "*", + "ext-posix": "*", + "illuminate/contracts": "^9.21|^10.0|^11.0|^12.0", + "illuminate/queue": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.17|^3.0", + "php": "^8.0", + "ramsey/uuid": "^4.0", + "symfony/console": "^6.0|^7.0", + "symfony/error-handler": "^6.0|^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "phpstan/phpstan": "^1.10|^2.0", + "phpunit/phpunit": "^9.0|^10.4|^11.5|^12.0", + "predis/predis": "^1.1|^2.0|^3.0" + }, + "suggest": { + "ext-redis": "Required to use the Redis PHP driver.", + "predis/predis": "Required when not using the Redis PHP driver (^1.1|^2.0|^3.0)." + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Horizon": "Laravel\\Horizon\\Horizon" + }, + "providers": [ + "Laravel\\Horizon\\HorizonServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Horizon\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Dashboard and code-driven configuration for Laravel queues.", + "keywords": [ + "laravel", + "queue" + ], + "support": { + "issues": "https://github.com/laravel/horizon/issues", + "source": "https://github.com/laravel/horizon/tree/v5.36.0" + }, + "time": "2025-10-10T13:44:39+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.6", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "86a8b692e8661d0fb308cec64f3d176821323077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", + "reference": "86a8b692e8661d0fb308cec64f3d176821323077", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.6" + }, + "time": "2025-07-07T14:17:42+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v4.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "fd6df4f79f48a72992e8d29a9c0ee25422a0d677" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/fd6df4f79f48a72992e8d29a9c0ee25422a0d677", + "reference": "fd6df4f79f48a72992e8d29a9c0ee25422a0d677", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^11.0|^12.0", + "illuminate/contracts": "^11.0|^12.0", + "illuminate/database": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", + "php": "^8.2", + "symfony/console": "^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.0|^10.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2025-07-09T19:45:24+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2025-03-19T13:51:03+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.10.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.10.1" + }, + "time": "2025-01-27T14:24:01+00:00" + }, + { + "name": "league/commonmark", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "10732241927d3971d28e7ea7b5712721fa2296ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca", + "reference": "10732241927d3971d28e7ea7b5712721fa2296ca", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2025-07-20T12:47:49+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.30.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", + "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + }, + "time": "2025-06-25T13:29:59+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.30.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", + "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + }, + "time": "2025-05-21T10:34:19+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "81fb5145d2644324614cc532b28efd0215bda430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.5", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.5.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:18:47+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.67", + "source": { + "type": "git", + "url": "https://github.com/SpartnerNL/Laravel-Excel.git", + "reference": "e508e34a502a3acc3329b464dad257378a7edb4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/e508e34a502a3acc3329b464dad257378a7edb4d", + "reference": "e508e34a502a3acc3329b464dad257378a7edb4d", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "ext-json": "*", + "illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0||^12.0", + "php": "^7.0||^8.0", + "phpoffice/phpspreadsheet": "^1.30.0", + "psr/simple-cache": "^1.0||^2.0||^3.0" + }, + "require-dev": { + "laravel/scout": "^7.0||^8.0||^9.0||^10.0", + "orchestra/testbench": "^6.0||^7.0||^8.0||^9.0||^10.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + }, + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@spartner.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "support": { + "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.67" + }, + "funding": [ + { + "url": "https://laravel-excel.com/commercial-support", + "type": "custom" + }, + { + "url": "https://github.com/patrickbrouwers", + "type": "github" + } + ], + "time": "2025-08-26T09:13:16+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "9712d8fa4cdf9240380b01eb4be55ad8dcf71416" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/9712d8fa4cdf9240380b01eb4be55ad8dcf71416", + "reference": "9712d8fa4cdf9240380b01eb4be55ad8dcf71416", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.3" + }, + "require-dev": { + "brianium/paratest": "^7.7", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^12.0", + "vimeo/psalm": "^6.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2025-07-17T11:15:13+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + }, + "time": "2025-07-25T09:04:22+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2025-03-24T10:02:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.10.3", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "reference": "8e3643dcd149ae0fe1d2ff4f2c8e4bbfad7c165f", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", + "kylekatarnls/multi-tester": "^2.5.3", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-09-06T13:39:36+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.4" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.2" + }, + "time": "2024-10-06T23:10:23+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "shasum": "" + }, + "require": { + "php": "8.0 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.8" + }, + "time": "2025-08-06T21:43:34+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + }, + "time": "2025-08-13T20:13:15+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", + "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.2.6" + }, + "require-dev": { + "illuminate/console": "^11.44.7", + "laravel/pint": "^1.22.0", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.2", + "phpstan/phpstan": "^1.12.25", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.2.6", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2025-05-08T08:14:37+00:00" + }, + { + "name": "nwidart/laravel-modules", + "version": "v12.0.4", + "source": { + "type": "git", + "url": "https://github.com/nWidart/laravel-modules.git", + "reference": "6e1f50de63366206b06ec53bbc823282977ddd06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/6e1f50de63366206b06ec53bbc823282977ddd06", + "reference": "6e1f50de63366206b06ec53bbc823282977ddd06", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-simplexml": "*", + "php": ">=8.2", + "wikimedia/composer-merge-plugin": "^2.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.52", + "laravel/framework": "^v12.0", + "laravel/pint": "^1.16", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^v10.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.3|^12.0.", + "spatie/phpunit-snapshot-assertions": "^5.0" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Module": "Nwidart\\Modules\\Facades\\Module" + }, + "providers": [ + "Nwidart\\Modules\\LaravelModulesServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "12.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Nwidart\\Modules\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Widart", + "email": "n.widart@gmail.com", + "homepage": "https://nicolaswidart.com", + "role": "Developer" + } + ], + "description": "Laravel Module management", + "keywords": [ + "laravel", + "module", + "modules", + "nwidart", + "rad" + ], + "support": { + "issues": "https://github.com/nWidart/laravel-modules/issues", + "source": "https://github.com/nWidart/laravel-modules/tree/v12.0.4" + }, + "funding": [ + { + "url": "https://github.com/dcblogdev", + "type": "github" + }, + { + "url": "https://github.com/nwidart", + "type": "github" + } + ], + "time": "2025-06-29T09:23:53+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2024-05-08T12:36:18+00:00" + }, + { + "name": "phiki/phiki", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phikiphp/phiki.git", + "reference": "461f6dd7e91dc3a95463b42f549ac7d0aab4702f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phikiphp/phiki/zipball/461f6dd7e91dc3a95463b42f549ac7d0aab4702f", + "reference": "461f6dd7e91dc3a95463b42f549ac7d0aab4702f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/commonmark": "^2.5.3", + "php": "^8.2", + "psr/simple-cache": "^3.0" + }, + "require-dev": { + "illuminate/support": "^11.45", + "laravel/pint": "^1.18.1", + "orchestra/testbench": "^9.15", + "pestphp/pest": "^3.5.1", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^7.1.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Phiki\\Adapters\\Laravel\\PhikiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Phiki\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Chandler", + "email": "support@ryangjchandler.co.uk", + "homepage": "https://ryangjchandler.co.uk", + "role": "Developer" + } + ], + "description": "Syntax highlighting using TextMate grammars in PHP.", + "support": { + "issues": "https://github.com/phikiphp/phiki/issues", + "source": "https://github.com/phikiphp/phiki/tree/v2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/ryangjchandler", + "type": "github" + }, + { + "url": "https://buymeacoffee.com/ryangjchandler", + "type": "other" + } + ], + "time": "2025-08-28T18:20:27+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.30.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "2f39286e0136673778b7a142b3f0d141e43d1714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2f39286e0136673778b7a142b3f0d141e43d1714", + "reference": "2f39286e0136673778b7a142b3f0d141e43d1714", + "shasum": "" + }, + "require": { + "composer/pcre": "^1||^2||^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.30.0" + }, + "time": "2025-08-10T06:28:02+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.4", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", + "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-08-21T11:53:16+00:00" + }, + { + "name": "pragmarx/google2fa", + "version": "v8.0.3", + "source": { + "type": "git", + "url": "https://github.com/antonioribeiro/google2fa.git", + "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", + "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PragmaRX\\Google2FA\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" + } + ], + "description": "A One Time Password Authentication package, compatible with Google Authenticator.", + "keywords": [ + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa" + ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3" + }, + "time": "2024-09-05T11:56:40+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.10", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22", + "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.10" + }, + "time": "2025-08-04T12:39:37+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.1" + }, + "time": "2025-09-04T20:59:21+00:00" + }, + { + "name": "sabberworm/php-css-parser", + "version": "v8.9.0", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41", + "rawr/cross-data-providers": "^2.0.0" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Jake Hotson", + "email": "jake.github@qzdesign.co.uk" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0" + }, + "time": "2025-07-11T13:20:48+00:00" + }, + { + "name": "spatie/laravel-activitylog", + "version": "4.10.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-activitylog.git", + "reference": "bb879775d487438ed9a99e64f09086b608990c10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/bb879775d487438ed9a99e64f09086b608990c10", + "reference": "bb879775d487438ed9a99e64f09086b608990c10", + "shasum": "" + }, + "require": { + "illuminate/config": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/database": "^8.69 || ^9.27 || ^10.0 || ^11.0 || ^12.0", + "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.6.3" + }, + "require-dev": { + "ext-json": "*", + "orchestra/testbench": "^6.23 || ^7.0 || ^8.0 || ^9.0 || ^10.0", + "pestphp/pest": "^1.20 || ^2.0 || ^3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Activitylog\\ActivitylogServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Activitylog\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Tom Witkowski", + "email": "dev.gummibeer@gmail.com", + "homepage": "https://gummibeer.de", + "role": "Developer" + } + ], + "description": "A very simple activity logger to monitor the users of your website or application", + "homepage": "https://github.com/spatie/activitylog", + "keywords": [ + "activity", + "laravel", + "log", + "spatie", + "user" + ], + "support": { + "issues": "https://github.com/spatie/laravel-activitylog/issues", + "source": "https://github.com/spatie/laravel-activitylog/tree/4.10.2" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-06-15T06:59:49+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.92.7", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "f09a799850b1ed765103a4f0b4355006360c49a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5", + "reference": "f09a799850b1ed765103a4f0b4355006360c49a5", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", + "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/php-code-coverage": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^9.5.24|^10.5|^11.5", + "spatie/pest-plugin-test-time": "^1.1|^2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-07-17T15:46:43+00:00" + }, + { + "name": "spatie/laravel-permission", + "version": "6.21.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "6a118e8855dfffcd90403aab77bbf35a03db51b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/6a118e8855dfffcd90403aab77bbf35a03db51b3", + "reference": "6a118e8855dfffcd90403aab77bbf35a03db51b3", + "shasum": "" + }, + "require": { + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/passport": "^11.0|^12.0", + "laravel/pint": "^1.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", + "phpunit/phpunit": "^9.4|^10.1|^11.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Permission\\PermissionServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Permission\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Permission handling for Laravel 8.0 and up", + "homepage": "https://github.com/spatie/laravel-permission", + "keywords": [ + "acl", + "laravel", + "permission", + "permissions", + "rbac", + "roles", + "security", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/6.21.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-07-23T16:08:05+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/console", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-25T06:35:40+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-07T08:17:57+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-13T11:49:31+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", + "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7475561ec27020196c49bb7c4f178d33d7d3dc00", + "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/clock": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-20T08:04:18+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/72c304de37e1a1cec6d5d12b81187ebd4850a17b", + "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^7.3", + "symfony/http-foundation": "^7.3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-29T08:23:45+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/a32f3f45f1990db8c4341d5122a7d3a381c7e575", + "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-13T11:49:31+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-23T16:12:55+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", + "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-18T09:42:54+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:36:08+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-04-25T09:37:31+00:00" + }, + { + "name": "symfony/string", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-25T06:35:40+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-01T21:02:37+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-27T08:32:26+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb", + "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T19:55:54+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-13T11:49:31+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" + }, + "time": "2024-12-21T16:25:41+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.2", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-04-30T23:37:27+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2024-11-21T01:49:47+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/a03d426c8e9fb2c9c569d9deeb31a083292788bc", + "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" + }, + "require-dev": { + "composer/composer": "^1.1||^2.0", + "ext-json": "*", + "mediawiki/mediawiki-phan-config": "0.11.1", + "php-parallel-lint/php-parallel-lint": "~1.3.1", + "phpspec/prophecy": "~1.15.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.7.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin", + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\Merge\\V2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.1.0" + }, + "time": "2023-04-15T19:07:00+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/8cc3d575c1f0e57eeb923f366a37528c50d2385a", + "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0", + "illuminate/contracts": "^10.24|^11.0|^12.0", + "illuminate/log": "^10.24|^11.0|^12.0", + "illuminate/process": "^10.24|^11.0|^12.0", + "illuminate/support": "^10.24|^11.0|^12.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2025-06-05T13:55:57+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.25.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/5016e263f95d97670d71b9a987bd8996ade6d8d9", + "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.87.2", + "illuminate/view": "^11.46.0", + "larastan/larastan": "^3.7.1", + "laravel-zero/framework": "^11.45.0", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.3.1", + "pestphp/pest": "^2.36.0" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2025-09-19T02:57:12+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.45.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "019a2933ff4a9199f098d4259713f9bc266a874e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/019a2933ff4a9199f098d4259713f9bc266a874e", + "reference": "019a2933ff4a9199f098d4259713f9bc266a874e", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0", + "symfony/yaml": "^6.0|^7.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "phpstan/phpstan": "^1.10" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2025-08-25T19:28:31+00:00" + }, + { + "name": "laravel/telescope", + "version": "v5.11.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/telescope.git", + "reference": "8b7bd77857d6b1b8c9362560cde74911cee68ab8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/telescope/zipball/8b7bd77857d6b1b8c9362560cde74911cee68ab8", + "reference": "8b7bd77857d6b1b8c9362560cde74911cee68ab8", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": "^8.37|^9.0|^10.0|^11.0|^12.0", + "php": "^8.0", + "symfony/console": "^5.3|^6.0|^7.0", + "symfony/var-dumper": "^5.0|^6.0|^7.0" + }, + "require-dev": { + "ext-gd": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "laravel/octane": "^1.4|^2.0|dev-develop", + "orchestra/testbench": "^6.40|^7.37|^8.17|^9.0|^10.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.0|^10.5|^11.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Telescope\\TelescopeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Telescope\\": "src/", + "Laravel\\Telescope\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mohamed Said", + "email": "mohamed@laravel.com" + } + ], + "description": "An elegant debug assistant for the Laravel framework.", + "keywords": [ + "debugging", + "laravel", + "monitoring" + ], + "support": { + "issues": "https://github.com/laravel/telescope/issues", + "source": "https://github.com/laravel/telescope/tree/v5.11.4" + }, + "time": "2025-09-12T14:36:07+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.8.2", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/60207965f9b7b7a4ce15a0f75d57f9dadb105bdb", + "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.1", + "nunomaduro/termwind": "^2.3.1", + "php": "^8.2.0", + "symfony/console": "^7.3.0" + }, + "conflict": { + "laravel/framework": "<11.44.2 || >=13.0.0", + "phpunit/phpunit": "<11.5.15 || >=13.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.3", + "larastan/larastan": "^3.4.2", + "laravel/framework": "^11.44.2 || ^12.18", + "laravel/pint": "^1.22.1", + "laravel/sail": "^1.43.1", + "laravel/sanctum": "^4.1.1", + "laravel/tinker": "^2.10.1", + "orchestra/testbench-core": "^9.12.0 || ^10.4", + "pestphp/pest": "^3.8.2", + "sebastian/environment": "^7.2.1 || ^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2025-06-25T02:12:12+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.4.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.2" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-08-27T14:37:49+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-27T05:02:59+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.39", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "ad5597f79d8489d2870073ac0bc0dd0ad1fa9931" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad5597f79d8489d2870073ac0bc0dd0ad1fa9931", + "reference": "ad5597f79d8489d2870073ac0bc0dd0ad1fa9931", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.11", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.2", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.39" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-09-14T06:20:41+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2025-08-10T08:07:46+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2025-05-21T11:55:47+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-12-05T09:17:50+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:42:22+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2025-08-09T06:55:48+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "d4f4a66866fe2451f61296924767280ab5732d9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d", + "reference": "d4f4a66866fe2451f61296924767280ab5732d9d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-27T11:34:33+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/be/config/active_role.php b/be/config/active_role.php new file mode 100644 index 0000000..44532cd --- /dev/null +++ b/be/config/active_role.php @@ -0,0 +1,17 @@ + (bool) env('ACTIVE_ROLE_PREFER_MEMBER', true), + + 'member_redirect' => env('ACTIVE_ROLE_MEMBER_REDIRECT', '/profile'), + + 'admin_redirect' => env('ACTIVE_ROLE_ADMIN_REDIRECT', '/profile'), + +]; diff --git a/be/config/api_security.php b/be/config/api_security.php new file mode 100644 index 0000000..60e42e2 --- /dev/null +++ b/be/config/api_security.php @@ -0,0 +1,167 @@ + env('BLOCK_API_TOOLS_IN_PRODUCTION', true), + + /* + |-------------------------------------------------------------------------- + | Enable API Key Authentication + |-------------------------------------------------------------------------- + | + | When enabled, external systems can use API keys to bypass API tool + | blocking and access protected endpoints. + | + */ + + 'enable_api_key_auth' => env('ENABLE_API_KEY_AUTH', true), + + /* + |-------------------------------------------------------------------------- + | Blocked User Agents + |-------------------------------------------------------------------------- + | + | List of User-Agent strings that should be blocked in production. + | These are common API testing tools and clients. + | + */ + + 'blocked_user_agents' => [ + 'insomnia', + 'postman', + 'postmanruntime', + 'curl', + 'wget', + 'httpie', + 'restclient', + 'apifox', + 'thunder client', + 'rapidapi', + 'swagger', + 'openapi', + 'api tester', + 'api client', + 'rest client', + 'http client', + 'api explorer', + 'api documentation', + 'soapui', + 'jmeter', + 'newman', + 'paw', + 'charles', + 'fiddler', + 'burp', + 'zap', + 'mitmproxy', + ], + + /* + |-------------------------------------------------------------------------- + | Minimum User-Agent Length + |-------------------------------------------------------------------------- + | + | Minimum length for User-Agent strings. Shorter strings are considered + | suspicious and will be blocked. + | + */ + + 'min_user_agent_length' => env('MIN_USER_AGENT_LENGTH', 10), + + /* + |-------------------------------------------------------------------------- + | Custom Error Message + |-------------------------------------------------------------------------- + | + | Custom error message to display when API tools are blocked. + | + */ + + 'blocked_message' => env('API_BLOCKED_MESSAGE', 'API access is restricted in production environment. Please use the web interface.'), + + /* + |-------------------------------------------------------------------------- + | Allowed IP Addresses + |-------------------------------------------------------------------------- + | + | List of IP addresses that are allowed to bypass API tool blocking. + | Useful for monitoring tools or legitimate API clients. + | + */ + + 'allowed_ips' => array_filter(explode(',', env('API_ALLOWED_IPS', ''))), + + /* + |-------------------------------------------------------------------------- + | Allowed User Agents + |-------------------------------------------------------------------------- + | + | List of User-Agent patterns that are allowed even if they match + | blocked patterns. Useful for legitimate monitoring tools. + | + */ + + 'allowed_user_agents' => array_filter(explode(',', env('API_ALLOWED_USER_AGENTS', ''))), + + /* + |-------------------------------------------------------------------------- + | Valid API Keys + |-------------------------------------------------------------------------- + | + | List of valid API keys for external system access. These keys allow + | external systems to bypass API tool blocking when making requests. + | + | Format: Comma-separated list of API keys + | Example: API_VALID_KEYS=key1,key2,key3 + | + */ + + 'valid_api_keys' => array_filter(explode(',', env('API_VALID_KEYS', ''))), + + /* + |-------------------------------------------------------------------------- + | API Key Header Names + |-------------------------------------------------------------------------- + | + | List of header names that can contain API keys. The middleware will + | check these headers for valid API keys. + | + */ + + 'api_key_headers' => [ + 'X-API-Key', + 'API-Key', + 'Authorization', // Bearer token format + ], + + /* + |-------------------------------------------------------------------------- + | API Key Logging + |-------------------------------------------------------------------------- + | + | Whether to log API key usage for monitoring and security purposes. + | When enabled, logs will include API key usage (without exposing the key). + | + */ + + 'log_api_key_usage' => env('API_LOG_KEY_USAGE', true), +]; diff --git a/be/config/app.php b/be/config/app.php new file mode 100644 index 0000000..423eed5 --- /dev/null +++ b/be/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/be/config/auth.php b/be/config/auth.php new file mode 100644 index 0000000..3f1a624 --- /dev/null +++ b/be/config/auth.php @@ -0,0 +1,125 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + 'api' => [ + 'driver' => 'sanctum', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', Modules\Auth\Entities\User::class), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the number of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + + /* + |-------------------------------------------------------------------------- + | Email Verification OTP + |-------------------------------------------------------------------------- + */ + + 'email_verification' => [ + 'expiry_minutes' => (int) env('EMAIL_VERIFICATION_OTP_EXPIRY_MINUTES', 10), + 'max_attempts' => (int) env('EMAIL_VERIFICATION_OTP_MAX_ATTEMPTS', 5), + ], + +]; diff --git a/be/config/auth_cookie.php b/be/config/auth_cookie.php new file mode 100644 index 0000000..5f0f000 --- /dev/null +++ b/be/config/auth_cookie.php @@ -0,0 +1,29 @@ + env('AUTH_COOKIE_NAME', 'auth_token'), + + 'lifetime_minutes' => (int) env('AUTH_COOKIE_LIFETIME', 60 * 12), + + 'secure' => env('AUTH_COOKIE_SECURE', env('APP_ENV') !== 'local'), + + 'same_site' => env('AUTH_COOKIE_SAME_SITE', 'lax'), + + 'original_user_cookie' => env('AUTH_COOKIE_ORIGINAL_USER', 'original_user_id'), + + /* + | Include token in JSON login/SSO responses (disable in production SPA flow). + */ + 'expose_token_in_response' => env('AUTH_COOKIE_EXPOSE_TOKEN', false), + +]; diff --git a/be/config/cache.php b/be/config/cache.php new file mode 100644 index 0000000..c2d927d --- /dev/null +++ b/be/config/cache.php @@ -0,0 +1,108 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), + +]; diff --git a/be/config/cors.php b/be/config/cors.php new file mode 100644 index 0000000..28c3045 --- /dev/null +++ b/be/config/cors.php @@ -0,0 +1,38 @@ + ['/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => [ + 'http://localhost:5173', + 'http://127.0.0.1:5173', + 'http://20.11.32.49', + 'http://20.11.32.50', + ], + + 'allowed_origins_patterns' => ['*'], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => true, +]; diff --git a/be/config/database.php b/be/config/database.php new file mode 100644 index 0000000..53dcae0 --- /dev/null +++ b/be/config/database.php @@ -0,0 +1,183 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + ], + +]; diff --git a/be/config/filesystems.php b/be/config/filesystems.php new file mode 100644 index 0000000..3d671bd --- /dev/null +++ b/be/config/filesystems.php @@ -0,0 +1,80 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + 'report' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + 'report' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/be/config/fortify.php b/be/config/fortify.php new file mode 100644 index 0000000..dfc5deb --- /dev/null +++ b/be/config/fortify.php @@ -0,0 +1,159 @@ + 'web', + + /* + |-------------------------------------------------------------------------- + | Fortify Password Broker + |-------------------------------------------------------------------------- + | + | Here you may specify which password broker Fortify can use when a user + | is resetting their password. This configured value should match one + | of your password brokers setup in your "auth" configuration file. + | + */ + + 'passwords' => 'users', + + /* + |-------------------------------------------------------------------------- + | Username / Email + |-------------------------------------------------------------------------- + | + | This value defines which model attribute should be considered as your + | application's "username" field. Typically, this might be the email + | address of the users but you are free to change this value here. + | + | Out of the box, Fortify expects forgot password and reset password + | requests to have a field named 'email'. If the application uses + | another name for the field you may define it below as needed. + | + */ + + 'username' => 'email', + + 'email' => 'email', + + /* + |-------------------------------------------------------------------------- + | Lowercase Usernames + |-------------------------------------------------------------------------- + | + | This value defines whether usernames should be lowercased before saving + | them in the database, as some database system string fields are case + | sensitive. You may disable this for your application if necessary. + | + */ + + 'lowercase_usernames' => true, + + /* + |-------------------------------------------------------------------------- + | Home Path + |-------------------------------------------------------------------------- + | + | Here you may configure the path where users will get redirected during + | authentication or password reset when the operations are successful + | and the user is authenticated. You are free to change this value. + | + */ + + 'home' => '/home', + + /* + |-------------------------------------------------------------------------- + | Fortify Routes Prefix / Subdomain + |-------------------------------------------------------------------------- + | + | Here you may specify which prefix Fortify will assign to all the routes + | that it registers with the application. If necessary, you may change + | subdomain under which all of the Fortify routes will be available. + | + */ + + 'prefix' => '', + + 'domain' => null, + + /* + |-------------------------------------------------------------------------- + | Fortify Routes Middleware + |-------------------------------------------------------------------------- + | + | Here you may specify which middleware Fortify will assign to the routes + | that it registers with the application. If necessary, you may change + | these middleware but typically this provided default is preferred. + | + */ + + 'middleware' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Rate Limiting + |-------------------------------------------------------------------------- + | + | By default, Fortify will throttle logins to five requests per minute for + | every email and IP address combination. However, if you would like to + | specify a custom rate limiter to call then you may specify it here. + | + */ + + 'limiters' => [ + 'login' => 'login', + 'two-factor' => 'two-factor', + ], + + /* + |-------------------------------------------------------------------------- + | Register View Routes + |-------------------------------------------------------------------------- + | + | Here you may specify if the routes returning views should be disabled as + | you may not need them when building your own application. This may be + | especially true if you're writing a custom single-page application. + | + */ + + 'views' => false, + + /* + |-------------------------------------------------------------------------- + | Features + |-------------------------------------------------------------------------- + | + | Some of the Fortify features are optional. You may disable the features + | by removing them from this array. You're free to only remove some of + | these features or you can even remove all of these if you need to. + | + */ + + 'features' => [ + Features::registration(), + Features::resetPasswords(), + // Features::emailVerification(), + Features::updateProfileInformation(), + Features::updatePasswords(), + Features::twoFactorAuthentication([ + 'confirm' => true, + 'confirmPassword' => true, + // 'window' => 0, + ]), + ], + +]; diff --git a/be/config/horizon.php b/be/config/horizon.php new file mode 100644 index 0000000..d171010 --- /dev/null +++ b/be/config/horizon.php @@ -0,0 +1,230 @@ + env('HORIZON_NAME'), + + /* + |-------------------------------------------------------------------------- + | Horizon Domain + |-------------------------------------------------------------------------- + | + | This is the subdomain where Horizon will be accessible from. If this + | setting is null, Horizon will reside under the same domain as the + | application. Otherwise, this value will serve as the subdomain. + | + */ + + 'domain' => env('HORIZON_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | Horizon Path + |-------------------------------------------------------------------------- + | + | This is the URI path where Horizon will be accessible from. Feel free + | to change this path to anything you like. Note that the URI will not + | affect the paths of its internal API that aren't exposed to users. + | + */ + + 'path' => env('HORIZON_PATH', 'horizon'), + + /* + |-------------------------------------------------------------------------- + | Horizon Redis Connection + |-------------------------------------------------------------------------- + | + | This is the name of the Redis connection where Horizon will store the + | meta information required for it to function. It includes the list + | of supervisors, failed jobs, job metrics, and other information. + | + */ + + 'use' => 'default', + + /* + |-------------------------------------------------------------------------- + | Horizon Redis Prefix + |-------------------------------------------------------------------------- + | + | This prefix will be used when storing all Horizon data in Redis. You + | may modify the prefix when you are running multiple installations + | of Horizon on the same server so that they don't have problems. + | + */ + + 'prefix' => env( + 'HORIZON_PREFIX', + Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:' + ), + + /* + |-------------------------------------------------------------------------- + | Horizon Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will get attached onto each Horizon route, giving you + | the chance to add your own middleware to this list or change any of + | the existing middleware. Or, you can simply stick with this list. + | + */ + + 'middleware' => ['auth.basic'], + + /* + |-------------------------------------------------------------------------- + | Queue Wait Time Thresholds + |-------------------------------------------------------------------------- + | + | This option allows you to configure when the LongWaitDetected event + | will be fired. Every connection / queue combination may have its + | own, unique threshold (in seconds) before this event is fired. + | + */ + + 'waits' => [ + 'redis:default' => 60, + ], + + /* + |-------------------------------------------------------------------------- + | Job Trimming Times + |-------------------------------------------------------------------------- + | + | Here you can configure for how long (in minutes) you desire Horizon to + | persist the recent and failed jobs. Typically, recent jobs are kept + | for one hour while all failed jobs are stored for an entire week. + | + */ + + 'trim' => [ + 'recent' => 60, + 'pending' => 60, + 'completed' => 60, + 'recent_failed' => 10080, + 'failed' => 10080, + 'monitored' => 10080, + ], + + /* + |-------------------------------------------------------------------------- + | Silenced Jobs + |-------------------------------------------------------------------------- + | + | Silencing a job will instruct Horizon to not place the job in the list + | of completed jobs within the Horizon dashboard. This setting may be + | used to fully remove any noisy jobs from the completed jobs list. + | + */ + + 'silenced' => [ + // App\Jobs\ExampleJob::class, + ], + + 'silenced_tags' => [ + // 'notifications', + ], + + /* + |-------------------------------------------------------------------------- + | Metrics + |-------------------------------------------------------------------------- + | + | Here you can configure how many snapshots should be kept to display in + | the metrics graph. This will get used in combination with Horizon's + | `horizon:snapshot` schedule to define how long to retain metrics. + | + */ + + 'metrics' => [ + 'trim_snapshots' => [ + 'job' => 24, + 'queue' => 24, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Fast Termination + |-------------------------------------------------------------------------- + | + | When this option is enabled, Horizon's "terminate" command will not + | wait on all of the workers to terminate unless the --wait option + | is provided. Fast termination can shorten deployment delay by + | allowing a new instance of Horizon to start while the last + | instance will continue to terminate each of its workers. + | + */ + + 'fast_termination' => false, + + /* + |-------------------------------------------------------------------------- + | Memory Limit (MB) + |-------------------------------------------------------------------------- + | + | This value describes the maximum amount of memory the Horizon master + | supervisor may consume before it is terminated and restarted. For + | configuring these limits on your workers, see the next section. + | + */ + + 'memory_limit' => 64, + + /* + |-------------------------------------------------------------------------- + | Queue Worker Configuration + |-------------------------------------------------------------------------- + | + | Here you may define the queue worker settings used by your application + | in all environments. These supervisors and settings handle all your + | queued jobs and will be provisioned by Horizon during deployment. + | + */ + + 'defaults' => [ + 'supervisor-1' => [ + 'connection' => 'redis', + 'queue' => ['default', 'kjc-historical-data', 'pkj-historical-data'], + 'balance' => 'auto', + 'autoScalingStrategy' => 'time', + 'maxProcesses' => 1, + 'maxTime' => 0, + 'maxJobs' => 0, + 'memory' => (int) env('HORIZON_WORKER_MEMORY', 512), // MB; 512 for large syncs (SPATD), was 128 + 'tries' => 1, + 'timeout' => env('HORIZON_WORKER_TIMEOUT', 60), + 'nice' => 0, + ], + ], + + 'environments' => [ + 'production' => [ + 'supervisor-1' => [ + 'maxProcesses' => 10, + 'balanceMaxShift' => 1, + 'balanceCooldown' => 3, + ], + ], + + 'local' => [ + 'supervisor-1' => [ + 'maxProcesses' => 3, + ], + ], + ], +]; diff --git a/be/config/http.php b/be/config/http.php new file mode 100644 index 0000000..9e04c7d --- /dev/null +++ b/be/config/http.php @@ -0,0 +1,33 @@ + env('HTTP_TIMEOUT', 30), + 'connect_timeout' => env('HTTP_CONNECT_TIMEOUT', 10), + + /* + |-------------------------------------------------------------------------- + | Proxy Configuration + |-------------------------------------------------------------------------- + | + | Proxy settings for HTTP clients + | + */ + + 'proxy' => [ + 'enabled' => env('HTTP_PROXY_ENABLED', false), + 'environments' => env('HTTP_PROXY_ENVIRONMENTS', 'production') ? explode(',', env('HTTP_PROXY_ENVIRONMENTS', 'production')) : [], + 'host' => env('HTTP_PROXY_HOST'), + 'port' => env('HTTP_PROXY_PORT'), + 'username' => env('HTTP_PROXY_USERNAME'), + 'password' => env('HTTP_PROXY_PASSWORD'), + ], +]; diff --git a/be/config/laravel-impersonate.php b/be/config/laravel-impersonate.php new file mode 100644 index 0000000..84ff38c --- /dev/null +++ b/be/config/laravel-impersonate.php @@ -0,0 +1,41 @@ + 'impersonated_by', + + /** + * The session key used to stored the original user guard. + */ + 'session_guard' => 'impersonator_guard', + + /** + * The session key used to stored what guard is impersonator using. + */ + 'session_guard_using' => 'impersonator_guard_using', + + /** + * The default impersonator guard used. + */ + 'default_impersonator_guard' => 'api', + + /** + * The URI to redirect after taking an impersonation. + * + * Only used in the built-in controller. + * * Use 'back' to redirect to the previous page + */ + 'take_redirect_to' => '/', + + /** + * The URI to redirect after leaving an impersonation. + * + * Only used in the built-in controller. + * Use 'back' to redirect to the previous page + */ + 'leave_redirect_to' => '/', + +]; diff --git a/be/config/logging.php b/be/config/logging.php new file mode 100644 index 0000000..9e998a4 --- /dev/null +++ b/be/config/logging.php @@ -0,0 +1,132 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'handler_with' => [ + 'stream' => 'php://stderr', + ], + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/be/config/mail.php b/be/config/mail.php new file mode 100644 index 0000000..522b284 --- /dev/null +++ b/be/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + 'retry_after' => 60, + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + +]; diff --git a/be/config/modules.php b/be/config/modules.php new file mode 100644 index 0000000..9511890 --- /dev/null +++ b/be/config/modules.php @@ -0,0 +1,301 @@ + 'Modules', + + /* + |-------------------------------------------------------------------------- + | Module Stubs + |-------------------------------------------------------------------------- + | + | Default module stubs. + | + */ + 'stubs' => [ + 'enabled' => true, + 'path' => base_path('stubs/nwidart-stubs'), + 'files' => [ + 'Routes/web' => 'Routes/web.php', + 'Routes/api' => 'Routes/api.php', + // Disabled for API-only modules + // 'views/index' => 'resources/views/index.blade.php', + // 'views/master' => 'resources/views/components/layouts/master.blade.php', + 'scaffold/config' => 'config/config.php', + 'composer' => 'composer.json', + // Disabled for API-only modules + // 'assets/js/app' => 'resources/assets/js/app.js', + // 'assets/sass/app' => 'resources/assets/sass/app.scss', + // 'vite' => 'vite.config.js', + 'package' => 'package.json', + ], + 'replacements' => [ + /** + * Define custom replacements for each section. + * You can specify a closure for dynamic values. + * + * Example: + * + * 'composer' => [ + * 'CUSTOM_KEY' => fn (\Nwidart\Modules\Generators\ModuleGenerator $generator) => $generator->getModule()->getLowerName() . '-module', + * 'CUSTOM_KEY2' => fn () => 'custom text', + * 'LOWER_NAME', + * 'STUDLY_NAME', + * // ... + * ], + * + * Note: Keys should be in UPPERCASE. + */ + 'Routes/web' => ['LOWER_NAME', 'STUDLY_NAME', 'PLURAL_LOWER_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'CONTROLLER_NAMESPACE'], + 'Routes/api' => ['LOWER_NAME', 'STUDLY_NAME', 'PLURAL_LOWER_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'CONTROLLER_NAMESPACE'], + 'vite' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME'], + 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME', 'MODULE_NAMESPACE', 'PROVIDER_NAMESPACE'], + 'views/index' => ['LOWER_NAME'], + 'views/master' => ['LOWER_NAME', 'STUDLY_NAME', 'KEBAB_NAME'], + 'scaffold/config' => ['STUDLY_NAME'], + 'composer' => [ + 'LOWER_NAME', + 'STUDLY_NAME', + 'VENDOR', + 'AUTHOR_NAME', + 'AUTHOR_EMAIL', + 'MODULE_NAMESPACE', + 'PROVIDER_NAMESPACE', + 'APP_FOLDER_NAME', + ], + ], + 'gitkeep' => true, + ], + 'paths' => [ + /* + |-------------------------------------------------------------------------- + | Modules path + |-------------------------------------------------------------------------- + | + | This path is used to save the generated module. + | This path will also be added automatically to the list of scanned folders. + | + */ + 'modules' => base_path('Modules'), + + /* + |-------------------------------------------------------------------------- + | Modules assets path + |-------------------------------------------------------------------------- + | + | Here you may update the modules' assets path. + | + */ + 'assets' => public_path('modules'), + + /* + |-------------------------------------------------------------------------- + | The migrations' path + |-------------------------------------------------------------------------- + | + | Where you run the 'module:publish-migration' command, where do you publish the + | the migration files? + | + */ + 'migration' => base_path('database/migrations'), + + /* + |-------------------------------------------------------------------------- + | The app path + |-------------------------------------------------------------------------- + | + | app folder name + | for example can change it to 'src' or 'App' + */ + 'app_folder' => 'App', + + /* + |-------------------------------------------------------------------------- + | Generator path + |-------------------------------------------------------------------------- + | Customise the paths where the folders will be generated. + | Setting the generate key to false will not generate that folder + */ + 'generator' => [ + // Actions/ + 'actions' => ['path' => 'Actions', 'generate' => true], + 'casts' => ['path' => 'Casts', 'generate' => false], + 'channels' => ['path' => 'Broadcasting', 'generate' => false], + 'class' => ['path' => 'Classes', 'generate' => false], + 'command' => ['path' => 'Console', 'generate' => true], + 'component-class' => ['path' => 'View/Components', 'generate' => false], + 'emails' => ['path' => 'Emails', 'generate' => true], + 'event' => ['path' => 'Events', 'generate' => false], + 'enums' => ['path' => 'Enums', 'generate' => false], + 'exceptions' => ['path' => 'Exceptions', 'generate' => false], + 'jobs' => ['path' => 'Jobs', 'generate' => true], + 'helpers' => ['path' => 'Helpers', 'generate' => true], + 'interfaces' => ['path' => 'Interfaces', 'generate' => false], + 'listener' => ['path' => 'Listeners', 'generate' => false], + 'model' => ['path' => 'Entities', 'generate' => true], + 'notifications' => ['path' => 'Notifications', 'generate' => true], + 'observer' => ['path' => 'Observers', 'generate' => false], + 'policies' => ['path' => 'Policies', 'generate' => true], + 'provider' => ['path' => 'Providers', 'generate' => true], + 'repository' => ['path' => 'Repositories', 'generate' => true], + 'repository-interface' => ['path' => 'Repositories/Contracts', 'generate' => true], + 'resource' => ['path' => 'Transformers', 'generate' => true], + 'route-provider' => ['path' => 'Providers', 'generate' => true], + 'rules' => ['path' => 'Rules', 'generate' => false], + 'services' => ['path' => 'Services', 'generate' => true], + 'scopes' => ['path' => 'Entities/Scopes', 'generate' => false], + 'traits' => ['path' => 'Traits', 'generate' => false], + + // Http/ + 'controller' => ['path' => 'Http/Controllers', 'generate' => true], + 'filter' => ['path' => 'Http/Middleware', 'generate' => false], + 'request' => ['path' => 'Http/Requests', 'generate' => true], + + // Config/ + 'config' => ['path' => 'Config', 'generate' => true], + + // Database/ + 'factory' => ['path' => 'Database/Factories', 'generate' => true], + 'migration' => ['path' => 'Database/Migrations', 'generate' => true], + 'seeder' => ['path' => 'Database/Seeders', 'generate' => true], + + // Lang/ + 'lang' => ['path' => 'Lang', 'generate' => false], + + // Resources/ (disabled for API-only modules) + 'assets' => ['path' => 'Resources/Assets', 'generate' => false], + 'component-view' => ['path' => 'Resources/Views/Components', 'generate' => false], + 'views' => ['path' => 'Resources/Views', 'generate' => false], + + // Routes/ + 'routes' => ['path' => 'Routes', 'generate' => true], + + // Tests/ + 'test-feature' => ['path' => 'Tests/Feature', 'generate' => true], + 'test-unit' => ['path' => 'Tests/Unit', 'generate' => true], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Auto Discover of Modules + |-------------------------------------------------------------------------- + | + | Here you configure auto discover of module + | This is useful for simplify module providers. + | + */ + 'auto-discover' => [ + /* + |-------------------------------------------------------------------------- + | Migrations + |-------------------------------------------------------------------------- + | + | This option for register migration automatically. + | + */ + 'migrations' => true, + + /* + |-------------------------------------------------------------------------- + | Translations + |-------------------------------------------------------------------------- + | + | This option for register lang file automatically. + | + */ + 'translations' => false, + + ], + + /* + |-------------------------------------------------------------------------- + | Package commands + |-------------------------------------------------------------------------- + | + | Here you can define which commands will be visible and used in your + | application. You can add your own commands to merge section. + | + */ + 'commands' => ConsoleServiceProvider::defaultCommands() + ->merge([ + // New commands go here + ])->toArray(), + + /* + |-------------------------------------------------------------------------- + | Scan Path + |-------------------------------------------------------------------------- + | + | Here you define which folder will be scanned. By default will scan vendor + | directory. This is useful if you host the package in packagist website. + | + */ + 'scan' => [ + 'enabled' => false, + 'paths' => [ + base_path('vendor/*/*'), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Composer File Template + |-------------------------------------------------------------------------- + | + | Here is the config for the composer.json file, generated by this package + | + */ + 'composer' => [ + 'vendor' => env('MODULE_VENDOR', 'nwidart'), + 'author' => [ + 'name' => env('MODULE_AUTHOR_NAME', 'Nicolas Widart'), + 'email' => env('MODULE_AUTHOR_EMAIL', 'n.widart@gmail.com'), + ], + 'composer-output' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Choose what laravel-modules will register as custom namespaces. + | Setting one to false will require you to register that part + | in your own Service Provider class. + |-------------------------------------------------------------------------- + */ + 'register' => [ + 'translations' => true, + /** + * load files on boot or register method + */ + 'files' => 'register', + ], + + /* + |-------------------------------------------------------------------------- + | Activators + |-------------------------------------------------------------------------- + | + | You can define new types of activators here, file, database, etc. The only + | required parameter is 'class'. + | The file activator will store the activation status in storage/installed_modules + */ + 'activators' => [ + 'file' => [ + 'class' => FileActivator::class, + 'statuses-file' => base_path('modules_statuses.json'), + ], + ], + + 'activator' => 'file', +]; diff --git a/be/config/permission.php b/be/config/permission.php new file mode 100644 index 0000000..a1ad8e5 --- /dev/null +++ b/be/config/permission.php @@ -0,0 +1,202 @@ + [ + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * Eloquent model should be used to retrieve your permissions. Of course, it + * is often just the "Permission" model but you may use whatever you like. + * + * The model you want to use as a Permission model needs to implement the + * `Spatie\Permission\Contracts\Permission` contract. + */ + + 'permission' => App\Models\Permission::class, + + /* + * When using the "HasRoles" trait from this package, we need to know which + * Eloquent model should be used to retrieve your roles. Of course, it + * is often just the "Role" model but you may use whatever you like. + * + * The model you want to use as a Role model needs to implement the + * `Spatie\Permission\Contracts\Role` contract. + */ + + 'role' => Modules\Role\Entities\Role::class, + + ], + + 'table_names' => [ + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'roles' => 'roles', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your permissions. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'permissions' => 'permissions', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your models permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_permissions' => 'model_has_permissions', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your models roles. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_roles' => 'model_has_roles', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'role_has_permissions' => 'role_has_permissions', + ], + + 'column_names' => [ + /* + * Change this if you want to name the related pivots other than defaults + */ + 'role_pivot_key' => null, // default 'role_id', + 'permission_pivot_key' => null, // default 'permission_id', + + /* + * Change this if you want to name the related model primary key other than + * `model_id`. + * + * For example, this would be nice if your primary keys are all UUIDs. In + * that case, name this `model_uuid`. + */ + + 'model_morph_key' => 'model_id', + + /* + * Change this if you want to use the teams feature and your related model's + * foreign key is other than `team_id`. + */ + + 'team_foreign_key' => 'team_id', + ], + + /* + * When set to true, the method for checking permissions will be registered on the gate. + * Set this to false if you want to implement custom logic for checking permissions. + */ + + 'register_permission_check_method' => true, + + /* + * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered + * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated + * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it. + */ + 'register_octane_reset_listener' => false, + + /* + * Events will fire when a role or permission is assigned/unassigned: + * \Spatie\Permission\Events\RoleAttached + * \Spatie\Permission\Events\RoleDetached + * \Spatie\Permission\Events\PermissionAttached + * \Spatie\Permission\Events\PermissionDetached + * + * To enable, set to true, and then create listeners to watch these events. + */ + 'events_enabled' => false, + + /* + * Teams Feature. + * When set to true the package implements teams using the 'team_foreign_key'. + * If you want the migrations to register the 'team_foreign_key', you must + * set this to true before doing the migration. + * If you already did the migration then you must make a new migration to also + * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions' + * (view the latest version of this package's migration file) + */ + + 'teams' => false, + + /* + * The class to use to resolve the permissions team id + */ + 'team_resolver' => \Spatie\Permission\DefaultTeamResolver::class, + + /* + * Passport Client Credentials Grant + * When set to true the package will use Passports Client to check permissions + */ + + 'use_passport_client_credentials' => false, + + /* + * When set to true, the required permission names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. + */ + + 'display_permission_in_exception' => false, + + /* + * When set to true, the required role names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. + */ + + 'display_role_in_exception' => false, + + /* + * By default wildcard permission lookups are disabled. + * See documentation to understand supported syntax. + */ + + 'enable_wildcard_permission' => false, + + /* + * The class to use for interpreting wildcard permissions. + * If you need to modify delimiters, override the class and specify its name here. + */ + // 'wildcard_permission' => Spatie\Permission\WildcardPermission::class, + + /* Cache-specific settings */ + + 'cache' => [ + + /* + * By default all permissions are cached for 24 hours to speed up performance. + * When permissions or roles are updated the cache is flushed automatically. + */ + + 'expiration_time' => \DateInterval::createFromDateString('24 hours'), + + /* + * The cache key used to store all permissions. + */ + + 'key' => 'spatie.permission.cache', + + /* + * You may optionally indicate a specific cache driver to use for permission and + * role caching using any of the `store` drivers listed in the cache.php config + * file. Using 'default' here means to use the `default` set in cache.php. + */ + + 'store' => 'default', + ], +]; diff --git a/be/config/queue.php b/be/config/queue.php new file mode 100644 index 0000000..116bd8d --- /dev/null +++ b/be/config/queue.php @@ -0,0 +1,112 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/be/config/services.php b/be/config/services.php new file mode 100644 index 0000000..6182e4b --- /dev/null +++ b/be/config/services.php @@ -0,0 +1,38 @@ + [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'resend' => [ + 'key' => env('RESEND_KEY'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + +]; diff --git a/be/config/session.php b/be/config/session.php new file mode 100644 index 0000000..d2bb5a6 --- /dev/null +++ b/be/config/session.php @@ -0,0 +1,217 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => (int) env('SESSION_LIFETIME', 30), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel')).'-session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain and all subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + +]; diff --git a/be/config/sso.php b/be/config/sso.php new file mode 100644 index 0000000..ccc0b60 --- /dev/null +++ b/be/config/sso.php @@ -0,0 +1,15 @@ + env('SSO_SECRET'), + 'validation_url' => env('SSO_VALIDATION_URL'), + 'proxy_url' => env('SSO_PROXY_URL', 'http://20.9.91.1:3128'), + 'proxy_enabled' => env('SSO_PROXY_ENABLED', true), + 'max_attempts' => env('SSO_MAX_ATTEMPTS', 5), + 'token_expiration' => env('SSO_TOKEN_EXPIRATION', 300), + 'auto_activate_users' => env('SSO_AUTO_ACTIVATE_USERS', true), + 'log_activities' => env('SSO_LOG_ACTIVITIES', true), + 'connection_timeout' => env('SSO_CONNECTION_TIMEOUT', 10), + 'response_timeout' => env('SSO_RESPONSE_TIMEOUT', 30), + 'enable_fallback' => env('SSO_ENABLE_FALLBACK', true), +]; diff --git a/be/config/telescope.php b/be/config/telescope.php new file mode 100644 index 0000000..af8ca1b --- /dev/null +++ b/be/config/telescope.php @@ -0,0 +1,207 @@ + env('TELESCOPE_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Telescope Domain + |-------------------------------------------------------------------------- + | + | This is the subdomain where Telescope will be accessible from. If the + | setting is null, Telescope will reside under the same domain as the + | application. Otherwise, this value will be used as the subdomain. + | + */ + + 'domain' => env('TELESCOPE_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | Telescope Path + |-------------------------------------------------------------------------- + | + | This is the URI path where Telescope will be accessible from. Feel free + | to change this path to anything you like. Note that the URI will not + | affect the paths of its internal API that aren't exposed to users. + | + */ + + 'path' => env('TELESCOPE_PATH', 'telescope'), + + /* + |-------------------------------------------------------------------------- + | Telescope Storage Driver + |-------------------------------------------------------------------------- + | + | This configuration options determines the storage driver that will + | be used to store Telescope's data. In addition, you may set any + | custom options as needed by the particular driver you choose. + | + */ + + 'driver' => env('TELESCOPE_DRIVER', 'database'), + + 'storage' => [ + 'database' => [ + 'connection' => env('DB_CONNECTION', 'mysql'), + 'chunk' => 1000, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Telescope Queue + |-------------------------------------------------------------------------- + | + | This configuration options determines the queue connection and queue + | which will be used to process ProcessPendingUpdate jobs. This can + | be changed if you would prefer to use a non-default connection. + | + */ + + 'queue' => [ + 'connection' => env('TELESCOPE_QUEUE_CONNECTION'), + 'queue' => env('TELESCOPE_QUEUE'), + 'delay' => env('TELESCOPE_QUEUE_DELAY', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Telescope Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will be assigned to every Telescope route, giving you + | the chance to add your own middleware to this list or change any of + | the existing middleware. Or, you can simply stick with this list. + | + */ + + 'middleware' => [ + 'web', + Authorize::class, + ], + + /* + |-------------------------------------------------------------------------- + | Allowed / Ignored Paths & Commands + |-------------------------------------------------------------------------- + | + | The following array lists the URI paths and Artisan commands that will + | not be watched by Telescope. In addition to this list, some Laravel + | commands, like migrations and queue commands, are always ignored. + | + */ + + 'only_paths' => [ + // 'api/*' + ], + + 'ignore_paths' => [ + 'livewire*', + 'nova-api*', + 'pulse*', + ], + + 'ignore_commands' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Telescope Watchers + |-------------------------------------------------------------------------- + | + | The following array lists the "watchers" that will be registered with + | Telescope. The watchers gather the application's profile data when + | a request or task is executed. Feel free to customize this list. + | + */ + + 'watchers' => [ + Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), + + Watchers\CacheWatcher::class => [ + 'enabled' => env('TELESCOPE_CACHE_WATCHER', true), + 'hidden' => [], + 'ignore' => [], + ], + + Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), + + Watchers\CommandWatcher::class => [ + 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), + 'ignore' => [], + ], + + Watchers\DumpWatcher::class => [ + 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), + 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), + ], + + Watchers\EventWatcher::class => [ + 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), + 'ignore' => [], + ], + + Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), + + Watchers\GateWatcher::class => [ + 'enabled' => env('TELESCOPE_GATE_WATCHER', true), + 'ignore_abilities' => [], + 'ignore_packages' => true, + 'ignore_paths' => [], + ], + + Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), + + Watchers\LogWatcher::class => [ + 'enabled' => env('TELESCOPE_LOG_WATCHER', true), + 'level' => 'error', + ], + + Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), + + Watchers\ModelWatcher::class => [ + 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), + 'events' => ['eloquent.*'], + 'hydrations' => true, + ], + + Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), + + Watchers\QueryWatcher::class => [ + 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), + 'ignore_packages' => true, + 'ignore_paths' => [], + 'slow' => 100, + ], + + Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), + + Watchers\RequestWatcher::class => [ + 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), + 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), + 'ignore_http_methods' => [], + 'ignore_status_codes' => [], + ], + + Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), + Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), + ], +]; diff --git a/be/database/.gitignore b/be/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/be/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/be/database/factories/UserFactory.php b/be/database/factories/UserFactory.php new file mode 100644 index 0000000..584104c --- /dev/null +++ b/be/database/factories/UserFactory.php @@ -0,0 +1,44 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/be/database/migrations/0001_01_01_000000_create_users_table.php b/be/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..c056f7c --- /dev/null +++ b/be/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,54 @@ +uuid('id')->primary(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->string('ic_number')->nullable(); + $table->string('position')->nullable(); + $table->string('phone_number')->nullable(); + $table->string('image_url')->nullable(); + $table->rememberToken(); + $table->timestamps(); + $table->softDeletes(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->uuid('id')->primary(); + $table->foreignUuid('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/be/database/migrations/0001_01_01_000001_create_cache_table.php b/be/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..b9c106b --- /dev/null +++ b/be/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration'); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('expiration'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/be/database/migrations/0001_01_01_000002_create_jobs_table.php b/be/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..e8ec6ec --- /dev/null +++ b/be/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,57 @@ +uuid('id')->primary(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->uuid('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->uuid('id')->primary(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/be/database/migrations/2025_07_25_051334_create_countries_table.php b/be/database/migrations/2025_07_25_051334_create_countries_table.php new file mode 100644 index 0000000..76ad330 --- /dev/null +++ b/be/database/migrations/2025_07_25_051334_create_countries_table.php @@ -0,0 +1,30 @@ +uuid('id')->primary(); + $table->string('code', 2); + $table->string('name', 100); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('countries'); + } +}; diff --git a/be/database/migrations/2025_08_02_061334_create_documents_table.php b/be/database/migrations/2025_08_02_061334_create_documents_table.php new file mode 100644 index 0000000..7530ea0 --- /dev/null +++ b/be/database/migrations/2025_08_02_061334_create_documents_table.php @@ -0,0 +1,39 @@ +uuid('id')->primary(); + $table->string('documentable_type'); + $table->unsignedBigInteger('documentable_id'); + $table->string('name'); + $table->string('path', 500); + $table->unsignedBigInteger('file_size')->nullable(); + $table->string('mime_type', 100)->nullable(); + $table->string('type', 100)->nullable()->default('general')->index(); + $table->text('description')->nullable(); + $table->uuid('uploaded_by')->foreign('users')->onDelete('restrict'); + $table->timestamps(); + $table->softDeletes(); + + $table->index(['documentable_type', 'documentable_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('documents'); + } +}; diff --git a/be/database/migrations/2025_09_16_215723_create_personal_access_tokens_table.php b/be/database/migrations/2025_09_16_215723_create_personal_access_tokens_table.php new file mode 100644 index 0000000..62a379f --- /dev/null +++ b/be/database/migrations/2025_09_16_215723_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->uuidMorphs('tokenable'); + $table->text('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable()->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/be/database/migrations/2025_09_19_133435_add_two_factor_columns_to_users_table.php b/be/database/migrations/2025_09_19_133435_add_two_factor_columns_to_users_table.php new file mode 100644 index 0000000..45739ef --- /dev/null +++ b/be/database/migrations/2025_09_19_133435_add_two_factor_columns_to_users_table.php @@ -0,0 +1,42 @@ +text('two_factor_secret') + ->after('password') + ->nullable(); + + $table->text('two_factor_recovery_codes') + ->after('two_factor_secret') + ->nullable(); + + $table->timestamp('two_factor_confirmed_at') + ->after('two_factor_recovery_codes') + ->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn([ + 'two_factor_secret', + 'two_factor_recovery_codes', + 'two_factor_confirmed_at', + ]); + }); + } +}; diff --git a/be/database/migrations/2025_09_20_093654_create_telescope_entries_table.php b/be/database/migrations/2025_09_20_093654_create_telescope_entries_table.php new file mode 100644 index 0000000..700a83f --- /dev/null +++ b/be/database/migrations/2025_09_20_093654_create_telescope_entries_table.php @@ -0,0 +1,70 @@ +getConnection()); + + $schema->create('telescope_entries', function (Blueprint $table) { + $table->bigIncrements('sequence'); + $table->uuid('uuid'); + $table->uuid('batch_id'); + $table->string('family_hash')->nullable(); + $table->boolean('should_display_on_index')->default(true); + $table->string('type', 20); + $table->longText('content'); + $table->dateTime('created_at')->nullable(); + + $table->unique('uuid'); + $table->index('batch_id'); + $table->index('family_hash'); + $table->index('created_at'); + $table->index(['type', 'should_display_on_index']); + }); + + $schema->create('telescope_entries_tags', function (Blueprint $table) { + $table->uuid('entry_uuid'); + $table->string('tag'); + + $table->primary(['entry_uuid', 'tag']); + $table->index('tag'); + + $table->foreign('entry_uuid') + ->references('uuid') + ->on('telescope_entries') + ->onDelete('cascade'); + }); + + $schema->create('telescope_monitoring', function (Blueprint $table) { + $table->string('tag')->primary(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $schema = Schema::connection($this->getConnection()); + + $schema->dropIfExists('telescope_entries_tags'); + $schema->dropIfExists('telescope_entries'); + $schema->dropIfExists('telescope_monitoring'); + } +}; diff --git a/be/database/migrations/2025_09_20_121315_create_permission_tables.php b/be/database/migrations/2025_09_20_121315_create_permission_tables.php new file mode 100644 index 0000000..1eb5585 --- /dev/null +++ b/be/database/migrations/2025_09_20_121315_create_permission_tables.php @@ -0,0 +1,136 @@ +engine('InnoDB'); + $table->uuid('id')->primary(); // permission id + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + + $table->unique(['name', 'guard_name']); + }); + + Schema::create($tableNames['roles'], static function (Blueprint $table) use ($teams, $columnNames) { + // $table->engine('InnoDB'); + $table->uuid('id')->primary(); // role id + if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing + $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable(); + $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index'); + } + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + if ($teams || config('permission.testing')) { + $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']); + } else { + $table->unique(['name', 'guard_name']); + } + }); + + Schema::create($tableNames['model_has_permissions'], static function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) { + $table->uuid($pivotPermission); + + $table->string('model_type'); + $table->uuid($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } else { + $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } + + }); + + Schema::create($tableNames['model_has_roles'], static function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) { + $table->uuid($pivotRole); + + $table->string('model_type'); + $table->uuid($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } else { + $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } + }); + + Schema::create($tableNames['role_has_permissions'], static function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) { + $table->uuid($pivotPermission); + $table->uuid($pivotRole); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + + $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary'); + }); + + app('cache') + ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) + ->forget(config('permission.cache.key')); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $tableNames = config('permission.table_names'); + + if (empty($tableNames)) { + throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); + } + + Schema::drop($tableNames['role_has_permissions']); + Schema::drop($tableNames['model_has_roles']); + Schema::drop($tableNames['model_has_permissions']); + Schema::drop($tableNames['roles']); + Schema::drop($tableNames['permissions']); + } +}; diff --git a/be/database/migrations/2025_09_20_121526_create_activity_log_table.php b/be/database/migrations/2025_09_20_121526_create_activity_log_table.php new file mode 100644 index 0000000..72f83d9 --- /dev/null +++ b/be/database/migrations/2025_09_20_121526_create_activity_log_table.php @@ -0,0 +1,27 @@ +create(config('activitylog.table_name'), function (Blueprint $table) { + $table->bigIncrements('id'); + $table->string('log_name')->nullable(); + $table->text('description'); + $table->nullableUuidMorphs('subject', 'subject'); + $table->nullableUuidMorphs('causer', 'causer'); + $table->json('properties')->nullable(); + $table->timestamps(); + $table->index('log_name'); + }); + } + + public function down() + { + Schema::connection(config('activitylog.database_connection'))->dropIfExists(config('activitylog.table_name')); + } +} diff --git a/be/database/migrations/2025_09_20_121527_add_event_column_to_activity_log_table.php b/be/database/migrations/2025_09_20_121527_add_event_column_to_activity_log_table.php new file mode 100644 index 0000000..78d9a0e --- /dev/null +++ b/be/database/migrations/2025_09_20_121527_add_event_column_to_activity_log_table.php @@ -0,0 +1,22 @@ +table(config('activitylog.table_name'), function (Blueprint $table) { + $table->string('event')->nullable()->after('subject_type'); + }); + } + + public function down() + { + Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) { + $table->dropColumn('event'); + }); + } +} diff --git a/be/database/migrations/2025_09_20_121528_add_batch_uuid_column_to_activity_log_table.php b/be/database/migrations/2025_09_20_121528_add_batch_uuid_column_to_activity_log_table.php new file mode 100644 index 0000000..320ef5c --- /dev/null +++ b/be/database/migrations/2025_09_20_121528_add_batch_uuid_column_to_activity_log_table.php @@ -0,0 +1,22 @@ +table(config('activitylog.table_name'), function (Blueprint $table) { + $table->uuid('batch_uuid')->nullable()->after('properties'); + }); + } + + public function down() + { + Schema::connection(config('activitylog.database_connection'))->table(config('activitylog.table_name'), function (Blueprint $table) { + $table->dropColumn('batch_uuid'); + }); + } +} diff --git a/be/database/migrations/2025_09_30_223214_add_route_name_to_permissions_table.php b/be/database/migrations/2025_09_30_223214_add_route_name_to_permissions_table.php new file mode 100644 index 0000000..9b905f3 --- /dev/null +++ b/be/database/migrations/2025_09_30_223214_add_route_name_to_permissions_table.php @@ -0,0 +1,28 @@ +string('route_name')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('permissions', function (Blueprint $table) { + $table->dropColumn('route_name'); + }); + } +}; diff --git a/be/database/migrations/2025_09_30_232256_create_notifications_table.php b/be/database/migrations/2025_09_30_232256_create_notifications_table.php new file mode 100644 index 0000000..965b521 --- /dev/null +++ b/be/database/migrations/2025_09_30_232256_create_notifications_table.php @@ -0,0 +1,31 @@ +uuid('id')->primary(); + $table->string('type'); + $table->uuidMorphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('notifications'); + } +}; diff --git a/be/database/migrations/2025_10_05_144351_add_fullname_to_roles_table.php b/be/database/migrations/2025_10_05_144351_add_fullname_to_roles_table.php new file mode 100644 index 0000000..c5a4a5f --- /dev/null +++ b/be/database/migrations/2025_10_05_144351_add_fullname_to_roles_table.php @@ -0,0 +1,28 @@ +string('fullname')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('roles', function (Blueprint $table) { + $table->dropColumn('fullname'); + }); + } +}; diff --git a/be/database/migrations/2025_10_08_104950_add_status_to_users_table.php b/be/database/migrations/2025_10_08_104950_add_status_to_users_table.php new file mode 100644 index 0000000..196e511 --- /dev/null +++ b/be/database/migrations/2025_10_08_104950_add_status_to_users_table.php @@ -0,0 +1,42 @@ +dropColumn('status'); + }); + + DB::statement("DROP TYPE IF EXISTS user_status_enum"); + } +}; \ No newline at end of file diff --git a/be/database/migrations/2025_10_21_100954_add_performance_indexes_to_users_table.php b/be/database/migrations/2025_10_21_100954_add_performance_indexes_to_users_table.php new file mode 100644 index 0000000..338c01c --- /dev/null +++ b/be/database/migrations/2025_10_21_100954_add_performance_indexes_to_users_table.php @@ -0,0 +1,41 @@ +index('status', 'users_status_index'); + + // Composite index for common filtering combinations + $table->index(['status', 'name'], 'users_status_name_index'); + + // Index for soft deletes (if using soft deletes frequently) + $table->index('deleted_at', 'users_deleted_at_index'); + + // Index for created_at (for sorting by creation date) + $table->index('created_at', 'users_created_at_index'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropIndex('users_status_index'); + $table->dropIndex('users_status_name_index'); + $table->dropIndex('users_deleted_at_index'); + $table->dropIndex('users_created_at_index'); + }); + } +}; \ No newline at end of file diff --git a/be/database/migrations/2025_11_19_035019_add_indexes_to_personal_access_tokens_table_for_single_session.php b/be/database/migrations/2025_11_19_035019_add_indexes_to_personal_access_tokens_table_for_single_session.php new file mode 100644 index 0000000..5bd0d1a --- /dev/null +++ b/be/database/migrations/2025_11_19_035019_add_indexes_to_personal_access_tokens_table_for_single_session.php @@ -0,0 +1,44 @@ +index(['tokenable_type', 'tokenable_id', 'name'], 'pat_tokenable_type_id_name_index'); + + // Index on name for filtering impersonation tokens and token types + $table->index('name', 'pat_name_index'); + + // Composite index for checking older tokens by user and creation date + // This optimizes queries checking for older tokens during fresh login detection + $table->index(['tokenable_type', 'tokenable_id', 'created_at'], 'pat_tokenable_created_index'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('personal_access_tokens', function (Blueprint $table) { + $table->dropIndex('pat_tokenable_type_id_name_index'); + $table->dropIndex('pat_name_index'); + $table->dropIndex('pat_tokenable_created_index'); + }); + } +}; diff --git a/be/database/migrations/2026_05_25_000001_add_active_role_id_to_personal_access_tokens_table.php b/be/database/migrations/2026_05_25_000001_add_active_role_id_to_personal_access_tokens_table.php new file mode 100644 index 0000000..ab53145 --- /dev/null +++ b/be/database/migrations/2026_05_25_000001_add_active_role_id_to_personal_access_tokens_table.php @@ -0,0 +1,27 @@ +uuid('active_role_id')->nullable()->after('expires_at'); + $table->foreign('active_role_id') + ->references('id') + ->on('roles') + ->nullOnDelete(); + }); + } + + public function down(): void + { + Schema::table('personal_access_tokens', function (Blueprint $table) { + $table->dropForeign(['active_role_id']); + $table->dropColumn('active_role_id'); + }); + } +}; diff --git a/be/database/migrations/2026_05_25_000002_add_context_to_roles_table.php b/be/database/migrations/2026_05_25_000002_add_context_to_roles_table.php new file mode 100644 index 0000000..04eb97c --- /dev/null +++ b/be/database/migrations/2026_05_25_000002_add_context_to_roles_table.php @@ -0,0 +1,28 @@ +string('context', 20)->default('member')->after('fullname'); + }); + + // Backfill known admin roles; all others remain member + DB::table('roles') + ->whereIn('name', ['DEVELOPER', 'PENTADBIR']) + ->update(['context' => 'admin']); + } + + public function down(): void + { + Schema::table('roles', function (Blueprint $table) { + $table->dropColumn('context'); + }); + } +}; diff --git a/be/database/migrations/2026_06_04_000001_create_email_verification_otps_table.php b/be/database/migrations/2026_06_04_000001_create_email_verification_otps_table.php new file mode 100644 index 0000000..b514553 --- /dev/null +++ b/be/database/migrations/2026_06_04_000001_create_email_verification_otps_table.php @@ -0,0 +1,33 @@ +uuid('id')->primary(); + $table->foreignUuid('user_id')->constrained('users')->cascadeOnDelete(); + $table->string('code'); + $table->timestamp('expires_at'); + $table->unsignedTinyInteger('attempts')->default(0); + $table->timestamps(); + + $table->index(['user_id', 'expires_at']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('email_verification_otps'); + } +}; diff --git a/be/database/seeders/DatabaseSeeder.php b/be/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..b7da91a --- /dev/null +++ b/be/database/seeders/DatabaseSeeder.php @@ -0,0 +1,30 @@ +create(); + + // User::factory()->create([ + // 'name' => 'Test User', + // 'email' => 'test@example.com', + // ]); + $needsSeeder = [ + PermissionsSeeder::class, + RolesSeeder::class, + RoleHasPermissionsSeeder::class, + UserSeeder::class, + ]; + $this->call($needsSeeder); + } +} diff --git a/be/database/seeders/PermissionsSeeder.php b/be/database/seeders/PermissionsSeeder.php new file mode 100644 index 0000000..e4ac213 --- /dev/null +++ b/be/database/seeders/PermissionsSeeder.php @@ -0,0 +1,29 @@ +insert( + [ + 'id' => Str::uuid(), + 'name' => $permission['name'], + 'guard_name' => $permission['guard_name'], + 'created_at' => $permission['created_at'], + 'updated_at' => $permission['updated_at'], + 'route_name' => $permission['route_name'], + ], + ); + } + } +} diff --git a/be/database/seeders/RoleHasPermissionsSeeder.php b/be/database/seeders/RoleHasPermissionsSeeder.php new file mode 100644 index 0000000..569c4a8 --- /dev/null +++ b/be/database/seeders/RoleHasPermissionsSeeder.php @@ -0,0 +1,35 @@ +where('name', $item['permission_name']) + ->where('guard_name', $guardName) + ->first(); + + $role = DB::table('roles') + ->where('name', $item['role_name']) + ->where('guard_name', $guardName) + ->first(); + + DB::table('role_has_permissions')->insert([ + 'permission_id' => $permission->id, + 'role_id' => $role->id, + ]); + } + } +} diff --git a/be/database/seeders/RolesSeeder.php b/be/database/seeders/RolesSeeder.php new file mode 100644 index 0000000..4bd9f23 --- /dev/null +++ b/be/database/seeders/RolesSeeder.php @@ -0,0 +1,29 @@ +insert( + [ + 'id' => Str::uuid(), + 'name' => $role['name'], + 'guard_name' => $role['guard_name'], + 'created_at' => $role['created_at'], + 'updated_at' => $role['updated_at'], + 'fullname' => $role['fullname'], + ] + ); + } + } +} diff --git a/be/database/seeders/UserSeeder.php b/be/database/seeders/UserSeeder.php new file mode 100644 index 0000000..7940c6e --- /dev/null +++ b/be/database/seeders/UserSeeder.php @@ -0,0 +1,33 @@ + 'ismail@developer.com'], + [ + 'name' => 'DEVELOPER', + 'phone_number' => '0123456789', + 'password' => bcrypt('Topazthegoat'), + 'status' => 'active', + ] + ); + + // Find the DEVELOPER role + $developerRole = Role::findByName('DEVELOPER', 'api'); + + if (! $user->hasRole('DEVELOPER')) { + $user->assignRole($developerRole); + $this->command->info('DEVELOPER role assigned to user: '.$user->email); + } else { + $this->command->info('User already has DEVELOPER role: '.$user->email); + } + } +} diff --git a/be/database/seeders/VisibilityPermissionsSeeder.php b/be/database/seeders/VisibilityPermissionsSeeder.php new file mode 100644 index 0000000..47257dd --- /dev/null +++ b/be/database/seeders/VisibilityPermissionsSeeder.php @@ -0,0 +1,37 @@ + 'akses peringkat formasi', + 'guard_name' => 'api', + 'description' => 'Can view all data under their government level' + ], + [ + 'name' => 'akses peringkat divisyen', + 'guard_name' => 'api', + 'description' => 'Can view all data under their formation (DIV) level' + ] + ]; + + foreach ($permissions as $permission) { + Permission::firstOrCreate( + ['name' => $permission['name'], 'guard_name' => $permission['guard_name']], + $permission + ); + } + + $this->command->info('Visibility permissions created successfully!'); + } +} diff --git a/be/database/seeders/json/permissions_20251014.json b/be/database/seeders/json/permissions_20251014.json new file mode 100644 index 0000000..1646a64 --- /dev/null +++ b/be/database/seeders/json/permissions_20251014.json @@ -0,0 +1,11 @@ +{ + "permissions": [ + { + "name": "DEVELOPER", + "guard_name": "api", + "created_at": "2025-07-13T00:03:02.000Z", + "updated_at": "2025-07-13T00:03:02.000Z", + "route_name": "superadminRoutes" + } + ] +} \ No newline at end of file diff --git a/be/database/seeders/json/role_has_permissions_20251014.json b/be/database/seeders/json/role_has_permissions_20251014.json new file mode 100644 index 0000000..7df15df --- /dev/null +++ b/be/database/seeders/json/role_has_permissions_20251014.json @@ -0,0 +1,9 @@ +{ + "role_has_permissions": [ + { + "role_name": "DEVELOPER", + "permission_name": "DEVELOPER", + "guard_name": "api" + } + ] +} \ No newline at end of file diff --git a/be/database/seeders/json/roles_20251014.json b/be/database/seeders/json/roles_20251014.json new file mode 100644 index 0000000..e5ea8f2 --- /dev/null +++ b/be/database/seeders/json/roles_20251014.json @@ -0,0 +1,12 @@ +{ + "roles": [ + { + "name": "DEVELOPER", + "guard_name": "api", + "created_at": "2025-06-21T22:49:54.000Z", + "updated_at": "2025-07-22T05:38:08.000Z", + "deleted_at": null, + "fullname": null + } + ] +} \ No newline at end of file diff --git a/be/docker-compose.yml b/be/docker-compose.yml new file mode 100644 index 0000000..c0b34fc --- /dev/null +++ b/be/docker-compose.yml @@ -0,0 +1,89 @@ +services: + laravel.test: + build: + context: "./vendor/laravel/sail/runtimes/8.4" + dockerfile: Dockerfile + args: + WWWGROUP: "${WWWGROUP}" + image: "sail-8.4/app" + extra_hosts: + - "host.docker.internal:host-gateway" + ports: + - "${APP_PORT:-80}:80" + - "${VITE_PORT:-5173}:${VITE_PORT:-5173}" + environment: + WWWUSER: "${WWWUSER}" + LARAVEL_SAIL: 1 + XDEBUG_MODE: "${SAIL_XDEBUG_MODE:-off}" + XDEBUG_CONFIG: "${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}" + IGNITION_LOCAL_SITES_PATH: "${PWD}" + volumes: + - ".:/var/www/html" + networks: + - sail + depends_on: + - pgsql + - redis + - memcached + - mailpit + pgsql: + image: "postgres:17-alpine" + ports: + - "${FORWARD_DB_PORT:-5432}:5432" + environment: + PGPASSWORD: "${DB_PASSWORD:-secret}" + POSTGRES_DB: "${DB_DATABASE}" + POSTGRES_USER: "${DB_USERNAME}" + POSTGRES_PASSWORD: "${DB_PASSWORD:-secret}" + volumes: + - "sail-pgsql:/var/lib/postgresql/data" + - "./vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql" + networks: + - sail + healthcheck: + test: + - CMD + - pg_isready + - "-q" + - "-d" + - "${DB_DATABASE}" + - "-U" + - "${DB_USERNAME}" + retries: 3 + timeout: 5s + redis: + image: "redis:alpine" + ports: + - "${FORWARD_REDIS_PORT:-6379}:6379" + volumes: + - "sail-redis:/data" + networks: + - sail + healthcheck: + test: + - CMD + - redis-cli + - ping + retries: 3 + timeout: 5s + memcached: + image: "memcached:alpine" + ports: + - "${FORWARD_MEMCACHED_PORT:-11211}:11211" + networks: + - sail + mailpit: + image: "axllent/mailpit:latest" + ports: + - "${FORWARD_MAILPIT_PORT:-1025}:1025" + - "${FORWARD_MAILPIT_DASHBOARD_PORT:-8025}:8025" + networks: + - sail +networks: + sail: + driver: bridge +volumes: + sail-pgsql: + driver: local + sail-redis: + driver: local diff --git a/be/docker/common/php-fpm/supervisor/historical-data-capture.conf b/be/docker/common/php-fpm/supervisor/historical-data-capture.conf new file mode 100644 index 0000000..c4394e0 --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/historical-data-capture.conf @@ -0,0 +1,12 @@ +[program:historical-data-capture] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/artisan historical:capture +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/historical-data-capture.log +stopwaitsecs=3600 +stopasgroup=true +killasgroup=true +numprocs=1 \ No newline at end of file diff --git a/be/docker/common/php-fpm/supervisor/historical-data-scheduler.conf b/be/docker/common/php-fpm/supervisor/historical-data-scheduler.conf new file mode 100644 index 0000000..2f9f738 --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/historical-data-scheduler.conf @@ -0,0 +1,12 @@ +[program:historical-data-scheduler] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/artisan schedule:work +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/historical-data-scheduler.log +stopwaitsecs=3600 +stopasgroup=true +killasgroup=true +numprocs=1 \ No newline at end of file diff --git a/be/docker/common/php-fpm/supervisor/laravel-horizon.conf b/be/docker/common/php-fpm/supervisor/laravel-horizon.conf new file mode 100644 index 0000000..c763d4e --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/laravel-horizon.conf @@ -0,0 +1,12 @@ +[program:laravel-horizon] +process_name=%(program_name)s +command=php /var/www/artisan horizon +autostart=true +autorestart=true +stopasgroup=true +killasgroup=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/horizon.log +stopwaitsecs=3600 +startsecs=10 \ No newline at end of file diff --git a/be/docker/common/php-fpm/supervisor/laravel-scheduler.conf b/be/docker/common/php-fpm/supervisor/laravel-scheduler.conf new file mode 100644 index 0000000..d82b6d4 --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/laravel-scheduler.conf @@ -0,0 +1,8 @@ +[program:laravel-scheduler] +process_name=%(program_name)s +command=bash -c "while [ true ]; do (php /var/www/artisan schedule:run --verbose --no-interaction &); sleep 60; done" +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/scheduler.log \ No newline at end of file diff --git a/be/docker/common/php-fpm/supervisor/laravel-worker.conf b/be/docker/common/php-fpm/supervisor/laravel-worker.conf new file mode 100644 index 0000000..0e4cb1f --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/laravel-worker.conf @@ -0,0 +1,12 @@ +[program:laravel-worker] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600 +autostart=true +autorestart=true +stopasgroup=true +killasgroup=true +user=www-data +numprocs=2 +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/worker.log +stopwaitsecs=3600 \ No newline at end of file diff --git a/be/docker/common/php-fpm/supervisor/php-fpm.conf b/be/docker/common/php-fpm/supervisor/php-fpm.conf new file mode 100644 index 0000000..7fb1199 --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/php-fpm.conf @@ -0,0 +1,7 @@ +[program:php-fpm] +command=php-fpm --nodaemonize +autostart=true +autorestart=true +priority=5 +stdout_logfile=/var/www/storage/logs/php-fpm.log +stderr_logfile=/var/www/storage/logs/php-fpm-error.log \ No newline at end of file diff --git a/be/docker/common/php-fpm/supervisor/supervisord.conf b/be/docker/common/php-fpm/supervisor/supervisord.conf new file mode 100644 index 0000000..bb5bb49 --- /dev/null +++ b/be/docker/common/php-fpm/supervisor/supervisord.conf @@ -0,0 +1,18 @@ +[unix_http_server] +file=/var/run/supervisor.sock +chmod=0700 + +[supervisord] +logfile=/var/www/storage/logs/supervisord.log +pidfile=/var/run/supervisord.pid +childlogdir=/var/www/storage/logs/ +nodaemon=true + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock + +[include] +files = /etc/supervisor/conf.d/*.conf \ No newline at end of file diff --git a/be/docker/common/unified/Dockerfile b/be/docker/common/unified/Dockerfile new file mode 100644 index 0000000..c586227 --- /dev/null +++ b/be/docker/common/unified/Dockerfile @@ -0,0 +1,175 @@ +# Stage 0: Build Vue frontend assets with Node.js +FROM node:22 AS frontend-builder + +WORKDIR /app/frontend + +# Copy frontend package files +COPY SUTERA-frontend/package*.json ./ +COPY SUTERA-frontend/pnpm-lock.yaml* ./ + +# Install pnpm and frontend dependencies (including dev dependencies for build) +RUN npm install -g pnpm +RUN pnpm install --frozen-lockfile + +# Copy frontend source code +COPY SUTERA-frontend/ ./ + +# Build TWO frontend bundles (path-based): +# - Production: served at / +# - Training: served at /training/ +# +# This avoids runtime JS injection and allows training/prod UI differences +# while keeping a single backend image. +RUN pnpm run typecheck \ + && pnpm exec vite build --mode=production --base=/ --outDir dist-prod \ + && pnpm exec vite build --mode=training --base=/training/ --outDir dist-training + +# Clean up dev dependencies to reduce image size +ENV CI=true +RUN pnpm prune --prod + +# Stage 1: Build environment and Composer dependencies +FROM php:8.4-fpm AS builder + +LABEL maintainer="Topaz" + +# Install system dependencies and PHP extensions for Laravel with MySQL/PostgreSQL support. +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + unzip \ + libpq-dev \ + libonig-dev \ + libssl-dev \ + libxml2-dev \ + libcurl4-openssl-dev \ + libicu-dev \ + libzip-dev \ + libjpeg-dev \ + libpng-dev \ + libfreetype6-dev \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) \ + pdo_mysql \ + pdo_pgsql \ + pgsql \ + opcache \ + intl \ + zip \ + bcmath \ + soap \ + gd \ + pcntl \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Set the working directory inside the container +WORKDIR /var/www + +# Copy the entire Laravel application code into the container +COPY SUTERA-backend/ /var/www + +# Copy Composer from official image (avoids flaky getcomposer.org in CI) +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer + +# Install PHP dependencies +RUN composer install --no-dev --optimize-autoloader --no-interaction --no-progress --prefer-dist --no-scripts \ + && rm -rf bootstrap/cache/services.php bootstrap/cache/packages.php + +# Stage 2: Unified production image with PHP-FPM + Nginx +FROM php:8.4-fpm AS base + +LABEL maintainer="Topaz" + +# Set system timezone to Asia/Kuala_Lumpur +RUN apt-get update && apt-get install -y --no-install-recommends tzdata \ + && ln -snf /usr/share/zoneinfo/Asia/Kuala_Lumpur /etc/localtime \ + && echo "Asia/Kuala_Lumpur" > /etc/timezone \ + && dpkg-reconfigure -f noninteractive tzdata \ + && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Install Nginx and all runtime dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + nginx \ + libpq-dev \ + libicu-dev \ + libzip-dev \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + libfcgi-bin \ + procps \ + netcat-openbsd \ + supervisor \ + nano \ + curl \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd \ + && pecl install redis \ + && docker-php-ext-enable redis \ + && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Download and install php-fpm health check script +RUN curl -o /usr/local/bin/php-fpm-healthcheck \ + https://raw.githubusercontent.com/renatomefi/php-fpm-healthcheck/master/php-fpm-healthcheck \ + && chmod +x /usr/local/bin/php-fpm-healthcheck + +# Copy the initialization script +COPY SUTERA-backend/docker/common/unified/entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +# Copy supervisor configuration files +COPY SUTERA-backend/docker/common/unified/supervisor/supervisord.conf /etc/supervisor/supervisord.conf + +# Create supervisor conf.d directory +RUN mkdir -p /etc/supervisor/conf.d + +# Use common supervisor and nginx config inside the image. +# If you need environment-specific behavior (training vs production), override at runtime +# by mounting files into: +# - /etc/nginx/nginx.conf +# - /etc/supervisor/conf.d/ +COPY SUTERA-backend/docker/common/unified/supervisor/unified.conf /etc/supervisor/conf.d/unified.conf +COPY SUTERA-backend/docker/common/unified/nginx/nginx.conf /etc/nginx/nginx.conf + +# Copy the initial storage structure +COPY SUTERA-backend/storage /var/www/storage-init + +# Copy PHP extensions and libraries from the builder stage +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ +COPY --from=builder /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/ +COPY --from=builder /usr/local/bin/docker-php-ext-* /usr/local/bin/ + +# Use the recommended production PHP configuration +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" + +# Enable PHP-FPM status page via separate config file (avoid modifying zz-docker.conf) +RUN echo '[www]' > /usr/local/etc/php-fpm.d/zzz-status.conf && \ + echo 'pm.status_path = /status' >> /usr/local/etc/php-fpm.d/zzz-status.conf + +# Copy the application code and dependencies from the build stage first +COPY --from=builder /var/www /var/www + +# Copy the built Vue frontends from frontend-builder stage +# - Production frontend at / +COPY --from=frontend-builder /app/frontend/dist-prod /var/www/public/ +# - Training frontend at /training/ +COPY --from=frontend-builder /app/frontend/dist-training /var/www/public/training/ + +# Set working directory +WORKDIR /var/www + +# Ensure correct permissions +RUN chown -R www-data:www-data /var/www + +# Create Nginx log directory +RUN mkdir -p /var/log/nginx && chown -R www-data:www-data /var/log/nginx + +# Run the entrypoint script +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] + +# Expose port 80 (Nginx) and 9000 (PHP-FPM for health checks) +EXPOSE 80 9000 + +# Start supervisor which manages both Nginx and PHP-FPM +CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"] diff --git a/be/docker/common/unified/entrypoint.sh b/be/docker/common/unified/entrypoint.sh new file mode 100644 index 0000000..a3891da --- /dev/null +++ b/be/docker/common/unified/entrypoint.sh @@ -0,0 +1,69 @@ +#!/bin/sh +set -e + +echo "Starting Laravel entrypoint (Unified)..." + +# Step 0: Wait for DB if configured +if [ -n "${DB_HOST:-}" ]; then + echo "Waiting for DB at ${DB_HOST}:${DB_PORT:-5432}..." + # Wait up to ~60s (60 * 1s) + i=0 + while ! nc -z "$DB_HOST" "${DB_PORT:-5432}"; do + i=$((i + 1)) + if [ "$i" -ge 60 ]; then + echo "DB not reachable after 60s. Continuing anyway." + break + fi + sleep 1 + done + echo "DB check finished." +fi + +# Step 1: Initialize persistent storage if needed +if [ ! "$(ls -A /var/www/storage 2>/dev/null)" ]; then + echo "Initializing /var/www/storage..." + cp -R /var/www/storage-init/. /var/www/storage + chown -R www-data:www-data /var/www/storage +else + echo "/var/www/storage already initialized." +fi + +rm -rf /var/www/storage-init + +# Step 2: Ensure environment is ready +if [ ! -f .env ]; then + echo ".env file is missing!" + echo "Provide it at runtime (bind mount, env_file, or secret) to /var/www/.env." + exit 1 +fi + +# Ensure bootstrap/cache directory exists and writable BEFORE artisan +if [ ! -d bootstrap/cache ]; then + echo "Creating bootstrap/cache directory..." + mkdir -p bootstrap/cache +fi +chown -R www-data:www-data bootstrap/cache + +# Step 3: Laravel setup and optimization +php artisan storage:link || true +php artisan config:clear +php artisan config:cache +php artisan route:cache +php artisan event:cache +php artisan package:discover --ansi + +# Step 4: Set permissions +chown -R www-data:www-data /var/www/storage +chown -R www-data:www-data /var/www/bootstrap/cache + +# Step 5: Ensure Laravel log directory exists +mkdir -p /var/www/storage/logs +chown -R www-data:www-data /var/www/storage/logs + +# Step 6: Create supervisor log directories +mkdir -p /var/log/supervisor +chown -R root:root /var/log/supervisor + +echo "Laravel setup complete. Starting Supervisor..." +exec supervisord -c /etc/supervisor/supervisord.conf + diff --git a/be/docker/common/unified/nginx/nginx.conf b/be/docker/common/unified/nginx/nginx.conf new file mode 100644 index 0000000..474e99d --- /dev/null +++ b/be/docker/common/unified/nginx/nginx.conf @@ -0,0 +1,108 @@ +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + # Logging + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # HTTP server (default - works for training/dev) + # For production with HTTPS, mount a custom nginx.conf that includes SSL config + server { + listen 80; + server_name _; + root /var/www/public; + index index.php index.html; + + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-XSS-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + + # API routes - pass directly to Laravel with original REQUEST_URI + # (try_files would redirect to /index.php and lose the path, causing 502/bad routing) + location /api/ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # Training SPA (built with base=/training/) + # Serve training frontend routes from /var/www/public/training + location ^~ /training/ { + try_files $uri $uri/ /training/index.html; + } + + # Serve frontend assets + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri =404; + } + + # Handle all other routes - serve Vue app or Laravel + location / { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri $uri/ /index.html /index.php?$query_string; + } + + # Handle PHP files - connect to localhost PHP-FPM + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + + # Additional FastCGI parameters + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # Deny access to hidden files + location ~ /\. { + deny all; + } + + # Cache static assets + location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri =404; + } + + location ^~ /horizon { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob 'unsafe-inline' 'unsafe-eval'" always; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + } + + # HTTPS server block removed from default config + # To enable HTTPS in production: + # 1. Mount SSL certificates to /etc/nginx/ssl/ + # 2. Mount a custom nginx.conf that includes HTTPS server block + # Example: - ./production-nginx.conf:/etc/nginx/nginx.conf:ro +} diff --git a/be/docker/common/unified/redis/redis.conf b/be/docker/common/unified/redis/redis.conf new file mode 100644 index 0000000..6008e97 --- /dev/null +++ b/be/docker/common/unified/redis/redis.conf @@ -0,0 +1,3 @@ +port 6379 +bind 0.0.0.0 +requirepass sutera_redis@2025 \ No newline at end of file diff --git a/be/docker/common/unified/supervisor/supervisord.conf b/be/docker/common/unified/supervisor/supervisord.conf new file mode 100644 index 0000000..a014b68 --- /dev/null +++ b/be/docker/common/unified/supervisor/supervisord.conf @@ -0,0 +1,19 @@ +[unix_http_server] +file=/var/run/supervisor.sock +chmod=0700 + +[supervisord] +nodaemon=true +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid +childlogdir=/var/log/supervisor +user=root + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock + +[include] +files = /etc/supervisor/conf.d/*.conf diff --git a/be/docker/common/unified/supervisor/unified.conf b/be/docker/common/unified/supervisor/unified.conf new file mode 100644 index 0000000..48a5b94 --- /dev/null +++ b/be/docker/common/unified/supervisor/unified.conf @@ -0,0 +1,48 @@ +[program:php-fpm] +command=php-fpm -F +autostart=true +autorestart=true +stderr_logfile=/var/log/supervisor/php-fpm.err.log +stdout_logfile=/var/log/supervisor/php-fpm.out.log +user=root +priority=100 + +[program:nginx] +command=nginx -g "daemon off;" +autostart=true +autorestart=true +stderr_logfile=/var/log/supervisor/nginx.err.log +stdout_logfile=/var/log/supervisor/nginx.out.log +user=root +priority=200 + +[program:laravel-horizon] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/artisan horizon +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/horizon.log +stopwaitsecs=3600 +priority=300 + +[program:laravel-worker] +process_name=%(program_name)s_%(process_num)02d +command=php /var/www/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600 +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/worker.log +stopwaitsecs=3600 +priority=400 + +[program:laravel-scheduler] +command=php /var/www/artisan schedule:work +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stdout_logfile=/var/www/storage/logs/scheduler.log +priority=500 diff --git a/be/docker/production/docker-compose.production.yml b/be/docker/production/docker-compose.production.yml new file mode 100644 index 0000000..7bc1e8a --- /dev/null +++ b/be/docker/production/docker-compose.production.yml @@ -0,0 +1,77 @@ +services: + app: + build: + context: . + dockerfile: ./SUTERA-backend/docker/common/unified/Dockerfile + platforms: + - linux/amd64 + - linux/arm64 + image: git.ismailmasseran.com/topaz/sutera:v3.0.1b + container_name: sutera-app-production + restart: unless-stopped + ports: + - "${APP_PORT:-80}:80" + environment: + - APP_ENV=production + - APP_DEBUG=true + - REDIS_HOST=redis + - REDIS_PASSWORD=${REDIS_PASSWORD} + - CACHE_DRIVER=redis + - SESSION_DRIVER=redis + - QUEUE_CONNECTION=redis + volumes: + - app-storage-production:/var/www/storage + - app-logs-production:/var/www/storage/logs + - ./.env.production:/var/www/.env:ro + - ./SUTERA-backend/docker/production/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + networks: + - sutera-production-network + depends_on: + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + + # Redis for caching and sessions + redis: + image: redis:8 + container_name: sutera-redis-production + restart: unless-stopped + volumes: + - redis-data-production:/data + - ./redis-config/redis.conf:/usr/local/etc/redis/redis.conf:ro + command: redis-server /usr/local/etc/redis/redis.conf + networks: + - sutera-production-network + healthcheck: + test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] + interval: 10s + timeout: 5s + retries: 3 + start_period: 10s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + +networks: + sutera-production-network: + driver: bridge + +volumes: + app-storage-production: + driver: local + app-logs-production: + driver: local + redis-data-production: + driver: local diff --git a/be/docker/production/nginx/nginx.conf b/be/docker/production/nginx/nginx.conf new file mode 100644 index 0000000..ac3c643 --- /dev/null +++ b/be/docker/production/nginx/nginx.conf @@ -0,0 +1,100 @@ +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + # Logging + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # Production HTTP server + server { + listen 80; + server_name _; + root /var/www/public; + index index.php index.html; + + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-XSS-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + + # API routes - pass directly to Laravel with original REQUEST_URI + location / { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # PRODUCTION: /training/ path is disabled - return 404 + location ^~ /training/ { + return 404; + } + + # Serve frontend assets + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri =404; + } + + # Handle all other routes - serve Vue app or Laravel + location / { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri $uri/ /index.html /index.php?$query_string; + } + + # Handle PHP files - connect to localhost PHP-FPM + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + + # Additional FastCGI parameters + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # Deny access to hidden files + location ~ /\. { + deny all; + } + + # Health check endpoint for Docker + location = /health { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + } + + location ^~ /horizon { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob 'unsafe-inline' 'unsafe-eval'" always; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + } +} diff --git a/be/docker/production/redis/redis.conf b/be/docker/production/redis/redis.conf new file mode 100644 index 0000000..6008e97 --- /dev/null +++ b/be/docker/production/redis/redis.conf @@ -0,0 +1,3 @@ +port 6379 +bind 0.0.0.0 +requirepass sutera_redis@2025 \ No newline at end of file diff --git a/be/docker/staging/docker-compose.staging.yml b/be/docker/staging/docker-compose.staging.yml new file mode 100644 index 0000000..4c13517 --- /dev/null +++ b/be/docker/staging/docker-compose.staging.yml @@ -0,0 +1,117 @@ +services: + app: + build: + context: . + dockerfile: ./SUTERA-backend/docker/common/unified/Dockerfile + args: + ENV: staging + platforms: + - linux/amd64 + - linux/arm64 + image: sutera-app-staging:latest + container_name: sutera-app-staging + restart: unless-stopped + ports: + - "${APP_PORT:-80}:80" + - "${HTTPS_PORT:-443}:443" + environment: + - APP_ENV=staging + - APP_DEBUG=true + - DB_HOST=postgres + - DB_PORT=${DB_PORT:-5432} + - DB_DATABASE=${DB_DATABASE} + - DB_USERNAME=${DB_USERNAME} + - DB_PASSWORD=${DB_PASSWORD} + - REDIS_HOST=redis + - REDIS_PASSWORD=${REDIS_PASSWORD} + - CACHE_DRIVER=redis + - SESSION_DRIVER=redis + - QUEUE_CONNECTION=redis + volumes: + - app-storage-staging:/var/www/storage + - app-logs-staging:/var/www/storage/logs + - /etc/letsencrypt/live/sutera.ismailmasseran.com/fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro + - /etc/letsencrypt/live/sutera.ismailmasseran.com/privkey.pem:/etc/nginx/ssl/privkey.pem:ro + networks: + - sutera-staging-network + depends_on: + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + + # Redis for caching and sessions + redis: + image: redis:8.2-alpine + container_name: sutera-redis-staging + restart: unless-stopped + volumes: + - redis-data-staging:/data + - ./redis-config/redis.conf:/usr/local/etc/redis/redis.conf:ro + command: redis-server /usr/local/etc/redis/redis.conf + networks: + - sutera-staging-network + healthcheck: + test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] + interval: 10s + timeout: 5s + retries: 3 + start_period: 10s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + + # Optional: Database (only if you want to run DB on same server for staging) + # Uncomment if you want to run MySQL on the same server for staging + postgres: + image: postgres:17 + container_name: sutera-postgres-staging + restart: unless-stopped + ports: + - "${DB_PORT:-5432}:5432" + environment: + - POSTGRES_ROOT_PASSWORD=${DB_ROOT_PASSWORD} + - POSTGRES_DATABASE=${DB_DATABASE} + - POSTGRES_USER=${DB_USERNAME} + - POSTGRES_PASSWORD=${DB_PASSWORD} + volumes: + - postgres-data-staging:/var/lib/postgres + - ./SUTERA-backend/docker/postgres/conf.d:/etc/postgres/conf.d:ro + networks: + - sutera-staging-network + healthcheck: + test: ["CMD", "postgres", "ping", "-h", "localhost"] + interval: 15s + timeout: 10s + retries: 5 + start_period: 30s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + +networks: + sutera-staging-network: + driver: bridge + +volumes: + app-storage-staging: + driver: local + app-logs-staging: + driver: local + redis-data-staging: + driver: local + postgres-data-staging: + driver: local diff --git a/be/docker/staging/nginx/nginx.conf b/be/docker/staging/nginx/nginx.conf new file mode 100644 index 0000000..d477bfc --- /dev/null +++ b/be/docker/staging/nginx/nginx.conf @@ -0,0 +1,100 @@ +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + # Logging + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # Production HTTP server + server { + listen 80; + server_name _; + root /var/www/public; + index index.php index.html; + + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-XSS-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + + # API routes - pass directly to Laravel with original REQUEST_URI + location /api/ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # PRODUCTION: /training/ path is disabled - return 404 + location ^~ /training/ { + return 404; + } + + # Serve frontend assets + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri =404; + } + + # Handle all other routes - serve Vue app or Laravel + location / { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri $uri/ /index.html /index.php?$query_string; + } + + # Handle PHP files - connect to localhost PHP-FPM + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + + # Additional FastCGI parameters + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # Deny access to hidden files + location ~ /\. { + deny all; + } + + # Health check endpoint for Docker + location = /health { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + } + + location ^~ /horizon { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob 'unsafe-inline' 'unsafe-eval'" always; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + } +} diff --git a/be/docker/staging/redis/redis.conf b/be/docker/staging/redis/redis.conf new file mode 100644 index 0000000..6008e97 --- /dev/null +++ b/be/docker/staging/redis/redis.conf @@ -0,0 +1,3 @@ +port 6379 +bind 0.0.0.0 +requirepass sutera_redis@2025 \ No newline at end of file diff --git a/be/docker/training/docker-compose.training.yml b/be/docker/training/docker-compose.training.yml new file mode 100644 index 0000000..16efeae --- /dev/null +++ b/be/docker/training/docker-compose.training.yml @@ -0,0 +1,114 @@ +services: + app: + build: + context: . + dockerfile: ./SUTERA-backend/docker/common/unified/Dockerfile + platforms: + - linux/amd64 + - linux/arm64 + image: git.ismailmasseran.com/topaz/sutera:33a53e08a641152f255f5c3fa27765200add4f45 + container_name: sutera-app-training + restart: unless-stopped + ports: + - "${APP_PORT:-80}:80" + environment: + - APP_ENV=training + - APP_DEBUG=true + - DB_HOST=postgres + - DB_PORT=${DB_PORT:-5432} + - DB_DATABASE=${DB_DATABASE} + - DB_USERNAME=${DB_USERNAME} + - DB_PASSWORD=${DB_PASSWORD} + - REDIS_HOST=redis + - REDIS_PASSWORD=${REDIS_PASSWORD} + - CACHE_DRIVER=redis + - SESSION_DRIVER=redis + - QUEUE_CONNECTION=redis + volumes: + - app-storage-training:/var/www/storage + - app-logs-training:/var/www/storage/logs + - ./.env.training:/var/www/.env:ro + - ./SUTERA-backend/docker/training/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + networks: + - sutera-training-network + depends_on: + redis: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + + # Redis for caching and sessions + redis: + image: redis:8 + container_name: sutera-redis-training + restart: unless-stopped + volumes: + - redis-data-training:/data + - ./redis-config/redis.conf:/usr/local/etc/redis/redis.conf:ro + command: redis-server /usr/local/etc/redis/redis.conf + networks: + - sutera-training-network + healthcheck: + test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] + interval: 10s + timeout: 5s + retries: 3 + start_period: 10s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + + # Optional: Database (only if you want to run DB on same server for training) + # Uncomment if you want to run MySQL on the same server for training + postgres: + image: postgres:17 + container_name: sutera-postgres-training + restart: unless-stopped + ports: + - "${DB_PORT:-5432}:5432" + environment: + - POSTGRES_ROOT_PASSWORD=${DB_ROOT_PASSWORD} + - POSTGRES_DATABASE=${DB_DATABASE} + - POSTGRES_USER=${DB_USERNAME} + - POSTGRES_PASSWORD=${DB_PASSWORD} + volumes: + - postgres-data-training:/var/lib/postgres + - ./SUTERA-backend/docker/postgres/conf.d:/etc/postgres/conf.d:ro + networks: + - sutera-training-network + healthcheck: + test: ["CMD", "postgres", "ping", "-h", "localhost"] + interval: 15s + timeout: 10s + retries: 5 + start_period: 30s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + +networks: + sutera-training-network: + driver: bridge + +volumes: + app-storage-training: + driver: local + app-logs-training: + driver: local + redis-data-training: + driver: local + postgres-data-training: + driver: local diff --git a/be/docker/training/nginx/nginx.conf b/be/docker/training/nginx/nginx.conf new file mode 100644 index 0000000..8a32824 --- /dev/null +++ b/be/docker/training/nginx/nginx.conf @@ -0,0 +1,106 @@ +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + keepalive_timeout 65; + + # Logging + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + # Training HTTP server + server { + listen 80; + server_name _; + root /var/www/public; + index index.php index.html; + + # Security headers + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-XSS-Protection "1; mode=block" always; + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + + # API routes - pass directly to Laravel with original REQUEST_URI + location /api/ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # Training SPA (built with base=/training/) + # Serve training frontend routes from /var/www/public/training + location ^~ /training/ { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri $uri/ /training/index.html; + } + + # Serve assets under /training/assets/ + location ~* ^/training/.*\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; + try_files $uri =404; + } + + # Handle PHP files - connect to localhost PHP-FPM + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + + # Additional FastCGI parameters + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # Deny access to hidden files + location ~ /\. { + deny all; + } + + # Health check endpoint for Docker + location = /health { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + } + + location ^~ /horizon { + add_header Content-Security-Policy "default-src 'self' http: https: data: blob 'unsafe-inline' 'unsafe-eval'" always; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + include fastcgi_params; + fastcgi_param HTTP_PROXY ""; + fastcgi_param HTTPS $https if_not_empty; + fastcgi_read_timeout 300; + fastcgi_send_timeout 300; + } + + # TRAINING: Root path disabled - redirect to /training/ + location = / { + return 302 /training/; + } + + # TRAINING: All other paths return 404 (production frontend disabled) + location / { + return 404; + } + } +} diff --git a/be/docker/training/redis/redis.conf b/be/docker/training/redis/redis.conf new file mode 100644 index 0000000..6008e97 --- /dev/null +++ b/be/docker/training/redis/redis.conf @@ -0,0 +1,3 @@ +port 6379 +bind 0.0.0.0 +requirepass sutera_redis@2025 \ No newline at end of file diff --git a/be/modules_statuses.json b/be/modules_statuses.json new file mode 100644 index 0000000..c645c10 --- /dev/null +++ b/be/modules_statuses.json @@ -0,0 +1,29 @@ +{ + "Auth": true, + "KJCVariant": true, + "Rank": true, + "Position": true, + "Unit": true, + "Formation": true, + "Camp": true, + "User": true, + "KJC": true, + "KJCAssetEntitlement": true, + "KJCAssetHolding": true, + "KJCSparePart": true, + "KJCRepair": true, + "KJCRepairDirective": true, + "PKJAssetEntitlement": true, + "PKJVariant": true, + "PKJAssetHolding": true, + "ActivityLog": true, + "Role": true, + "KJCReport": true, + "Dashboard": true, + "PKJReport": true, + "ExternalAPI": true, + "KJCTemporaryLoan": true, + "Notification": true, + "KJCRepairTool": true, + "Feedback": true +} \ No newline at end of file diff --git a/be/package.json b/be/package.json new file mode 100644 index 0000000..a5707d8 --- /dev/null +++ b/be/package.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "axios": "^1.11.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "tailwindcss": "^4.0.0", + "vite": "^7.0.4" + } +} diff --git a/be/phpunit.xml b/be/phpunit.xml new file mode 100644 index 0000000..6b25d0d --- /dev/null +++ b/be/phpunit.xml @@ -0,0 +1,33 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + diff --git a/be/public/.htaccess b/be/public/.htaccess new file mode 100644 index 0000000..b574a59 --- /dev/null +++ b/be/public/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/be/public/favicon.ico b/be/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/be/public/images/logo/Logo-RAJD.png b/be/public/images/logo/Logo-RAJD.png new file mode 100644 index 0000000000000000000000000000000000000000..37e434ca4176a33bb1c433b6ae778629b82c1e1b GIT binary patch literal 923290 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
f0B8aR2Pf&=0H=zR-Kt2(49>GI3O-$lrfp9_NX( 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%0A7uH*M$D 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

l!7>00 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%0AH0R?c@c;1 z;Ketp-tB~MsN}Kx^d(E4`{QI4&@erT>XGnoUDsRxTO_vIxl8NEBlWLeXwJu>3kzT7 zyWN%-Hyn&3E_~#_iRmG4=q9y22}?1gk}mkNJ#M}f4~4c=YOxD;I~ZzL*0Zo9$AttQ z1;Vq^>86u2YH*I)rLN{0 z7z?|t&F*x}YDi%DP{L9up;)#7Xv=D?)wdCHkKDkT4?&`aE;IS_5=vubH77;=l@t~J zteH+p;(I8LEt@Y2iD)!Ufg82tHyP<2ZIf9kT11+RnJ@nbhW)Ig+7?*!$V$2?raPaB zjg#tclCqsrBC<_H=e}96^gU@DoOH?}z++fwY3r7k)0UM<(_>@H|BQ+`8abBiWFjLC z7LpEAr4eSq?#EJ*xn&Mr6-G&z6tUJ0IJN3IZ#oy0U=7rN?@Y+~q#KO+$8geUO7U0G zaqAiTp98$S|#m{dug5#_ZTSYa#|-S={)@w5j2XD^1GDS&9_NmO?Iq|T5CcOw zgda#x<_2=lW(QQ5hNrE6_qe_9^{qZq=y z%d^502&?jTEZaM7Y*tzNrgULo3eh6lhY9VCUDycFn^3`}2iLbApz!g7fD9qT{~dX! zF}oP<;>eemAFJVm0m4bHXKPO_e!STL2wl?LoPN-wYd>~-(7ngY*d>AMx<3_wvVy)+ zp6|Y##c~tD?s0|Y<#Ba&eGP`CLKBHv4QI|QXx;CJ&R^*>Jefl<|HC}6(f0h8m3QZz zBQTodgK=k+)MwHi4?bU26;?~j=G@kld|^pMRMhjwp3-z;!M;Nft+BYbc!=R{Ut9>h zXlN*qO%BZ?7ItsR>sY^_2Nszr!S25F4x_(w?M)7Cv1A@}gZc4ugCOnId4uIeYe7bJ zHJ3=5D3qFr0hBQuh)K(Q!~_E%?iOOzT9ei!lojy{?_9O`d3|%= zsEgB}n`ZQN#Ovy^1kyX(^K&dbqnBFYJ9WcuH~WP8!)oeXF^IT0j++KrOhg#-Q8De_ zPyNSh#(OLx>RFSAw%%( z!=u`JzJQGbNuC|Ox)C?k1GiA*H){*&6r*251x6aR<>g0u`l~q;018MMn67WXwQ!ymn3!zqhbJ6TciuEnlN#L$qo;$Z! zwC=%Fz?$M_lvPjwT;UKuXkh#7UxYoHQ4Vy5>xg6q{v!7|;Biol%cDgq=Q>PCfTO?r z&WZqi*oYq#vB&tyubqnfRIG*eC}2^3nJAh>^X$d0mEBZ;G(oJ5;G20Kos^`{`e^mS1Z<3u~2l z_yOvfvk=O;QTOAy{Rc785C690}p_on15FOjR7HWTRJki+YuiBX-Hn~G^2Dr zMgmA6QR%1h$oc zyj@VS<-42VOX8^wi|G;ofA-ebR92YvewhIZzGQ&C7*ls)y6qTAS^sjn@HdkGCv
Rr~6S*&sFB(RTFSND^@e=QiI4oZF>V5SftU5!2F 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

Ze4kop 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%0AkNmy}t+j{%H;##?LZa1##b0yNmz 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 z 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

g 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

OQS|m0UYZJ2^^hRWY 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%0D( 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

U#zw61aj^cp%*@tI(X%~v+e=l5 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 zI}P={DhandleRequest(Request::capture()); diff --git a/be/public/robots.txt b/be/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/be/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/be/resources/css/app.css b/be/resources/css/app.css new file mode 100644 index 0000000..3e6abea --- /dev/null +++ b/be/resources/css/app.css @@ -0,0 +1,11 @@ +@import 'tailwindcss'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../storage/framework/views/*.php'; +@source '../**/*.blade.php'; +@source '../**/*.js'; + +@theme { + --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; +} diff --git a/be/resources/js/app.js b/be/resources/js/app.js new file mode 100644 index 0000000..e59d6a0 --- /dev/null +++ b/be/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; diff --git a/be/resources/js/bootstrap.js b/be/resources/js/bootstrap.js new file mode 100644 index 0000000..5f1390b --- /dev/null +++ b/be/resources/js/bootstrap.js @@ -0,0 +1,4 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/be/resources/views/errors/503.blade.php b/be/resources/views/errors/503.blade.php new file mode 100644 index 0000000..725cfb9 --- /dev/null +++ b/be/resources/views/errors/503.blade.php @@ -0,0 +1,186 @@ + + + + + + SERVIS TERGENDALA - MYKOPKB + + + +

+
+ +
+ +
+

Sistem Dalam Penyelenggaraan

+
+
+ +

+ Sistem MYKOPKB sedang menjalani penyelenggaraan berjadual untuk meningkatkan prestasi dan keselamatan. + Kami mohon maaf atas sebarang kesulitan yang dihadapi. +

+ +
+
+ + + + Status Penyelenggaraan +
+

+ Sistem dijangka aktif semula pada:
+ {{ now()->addHours(2)->format('d/m/Y \p\a\d\a H:i') }} +

+
+ +
+

🔧 Penambahbaikan sistem sedang dijalankan

+

📧 Untuk kecemasan, hubungi: mykopkb@gmail.com

+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/be/routes/api.php b/be/routes/api.php new file mode 100644 index 0000000..0c60ae2 --- /dev/null +++ b/be/routes/api.php @@ -0,0 +1,32 @@ +middleware(['auth:sanctum', 'single.session']); + +// Social Media - Admin endpoints +Route::middleware(['auth:sanctum', 'single.session'])->prefix('social-media')->group(function () { + Route::get('/settings', [SocialMediaController::class, 'getSocialMediaSettings']); + Route::post('/settings', [SocialMediaController::class, 'updateSocialMedia']); + Route::post('/', [SocialMediaController::class, 'addSocialMedia']); + Route::put('/{id}', [SocialMediaController::class, 'updateSocialMediaPlatform']); + Route::delete('/{id}', [SocialMediaController::class, 'deleteSocialMediaPlatform']); + Route::patch('/{id}/toggle', [SocialMediaController::class, 'toggleSocialMediaPlatform']); +}); + +// Contact Settings - Admin endpoints +Route::middleware(['auth:sanctum', 'single.session'])->prefix('contact')->group(function () { + Route::get('/settings', [ContactController::class, 'getContactSettings']); + Route::post('/settings', [ContactController::class, 'updateContacts']); + Route::post('/', [ContactController::class, 'addContact']); + Route::put('/{id}', [ContactController::class, 'updateContact']); + Route::delete('/{id}', [ContactController::class, 'deleteContact']); + Route::patch('/{id}/toggle', [ContactController::class, 'toggleContact']); +}); + diff --git a/be/routes/console.php b/be/routes/console.php new file mode 100644 index 0000000..aa56fe4 --- /dev/null +++ b/be/routes/console.php @@ -0,0 +1,29 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); + +// Schedule KJC Historical Data Capture to run monthly on the 1st day at 2:00 AM +Schedule::job(new CaptureKJCHistoricalDataJob()) + ->monthlyOn(1, '02:00') + ->withoutOverlapping() + ->name('kjc-historical-data-capture'); + +// Schedule PKJ Historical Data Capture to run monthly on the 1st day at 2:30 AM +Schedule::job(new CapturePKJHistoricalDataJob()) + ->monthlyOn(1, '02:30') + ->withoutOverlapping() + ->name('pkj-historical-data-capture'); + +// Auto-generate weekly KJC reports for Jabatan Arah RAJD every Monday at 3:00 AM +Schedule::command('kjc:auto-generate-weekly-report "Jabatan Arah RAJD"') + ->weeklyOn(1, '03:00') // Monday at 3:00 AM + ->withoutOverlapping() + ->name('kjc-auto-weekly-report'); \ No newline at end of file diff --git a/be/routes/web.php b/be/routes/web.php new file mode 100644 index 0000000..bfe8a20 --- /dev/null +++ b/be/routes/web.php @@ -0,0 +1,7 @@ + + + diff --git a/be/stubs/nwidart-stubs/composer.stub b/be/stubs/nwidart-stubs/composer.stub new file mode 100644 index 0000000..d2ae161 --- /dev/null +++ b/be/stubs/nwidart-stubs/composer.stub @@ -0,0 +1,30 @@ +{ + "name": "$VENDOR$/$LOWER_NAME$", + "description": "", + "authors": [ + { + "name": "$AUTHOR_NAME$", + "email": "$AUTHOR_EMAIL$" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\": "$APP_FOLDER_NAME$", + "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Database\\Factories\\": "database/factories/", + "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Tests\\": "tests/" + } + } +} diff --git a/be/stubs/nwidart-stubs/controller-api.stub b/be/stubs/nwidart-stubs/controller-api.stub new file mode 100644 index 0000000..025095d --- /dev/null +++ b/be/stubs/nwidart-stubs/controller-api.stub @@ -0,0 +1,59 @@ +json([]); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + + return response()->json([]); + } + + /** + * Show the specified resource. + */ + public function show($id) + { + // + + return response()->json([]); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id) + { + // + + return response()->json([]); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) + { + // + + return response()->json([]); + } +} diff --git a/be/stubs/nwidart-stubs/controller-basecrud.stub b/be/stubs/nwidart-stubs/controller-basecrud.stub new file mode 100644 index 0000000..a0faac7 --- /dev/null +++ b/be/stubs/nwidart-stubs/controller-basecrud.stub @@ -0,0 +1,49 @@ +json([]); + } +} diff --git a/be/stubs/nwidart-stubs/controller.stub b/be/stubs/nwidart-stubs/controller.stub new file mode 100644 index 0000000..79f1b77 --- /dev/null +++ b/be/stubs/nwidart-stubs/controller.stub @@ -0,0 +1,56 @@ +> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + */ + protected function configureEmailVerification(): void {} +} diff --git a/be/stubs/nwidart-stubs/event.stub b/be/stubs/nwidart-stubs/event.stub new file mode 100644 index 0000000..048d7f8 --- /dev/null +++ b/be/stubs/nwidart-stubs/event.stub @@ -0,0 +1,31 @@ +view('view.name'); + } +} diff --git a/be/stubs/nwidart-stubs/middleware.stub b/be/stubs/nwidart-stubs/middleware.stub new file mode 100644 index 0000000..bdd192d --- /dev/null +++ b/be/stubs/nwidart-stubs/middleware.stub @@ -0,0 +1,17 @@ +id(); + $FIELDS$ + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('$TABLE$'); + } +}; diff --git a/be/stubs/nwidart-stubs/migration/delete.stub b/be/stubs/nwidart-stubs/migration/delete.stub new file mode 100644 index 0000000..788cdee --- /dev/null +++ b/be/stubs/nwidart-stubs/migration/delete.stub @@ -0,0 +1,28 @@ +id(); + $FIELDS$ + $table->timestamps(); + }); + } +}; diff --git a/be/stubs/nwidart-stubs/migration/plain.stub b/be/stubs/nwidart-stubs/migration/plain.stub new file mode 100644 index 0000000..d94404c --- /dev/null +++ b/be/stubs/nwidart-stubs/migration/plain.stub @@ -0,0 +1,18 @@ +line('The introduction to the notification.') + ->action('Notification Action', 'https://laravel.com') + ->line('Thank you for using our application!'); + } + + /** + * Get the array representation of the notification. + */ + public function toArray($notifiable): array + { + return []; + } +} diff --git a/be/stubs/nwidart-stubs/observer.stub b/be/stubs/nwidart-stubs/observer.stub new file mode 100644 index 0000000..e74fe90 --- /dev/null +++ b/be/stubs/nwidart-stubs/observer.stub @@ -0,0 +1,33 @@ +where('name', 'LIKE', "%{$search}%"); + } + + return $query->paginate($perPage); + } + + /** + * Get all $LOWER_NAME$s with their relationships and pagination with search + */ + public function getAllWithRelationsPaginated(int $perPage = 10, string $search = '') + { + $query = $MODULE$::orderBy('name'); + + if (!empty($search)) { + $query->where('name', 'LIKE', "%{$search}%"); + } + + return $query->paginate($perPage); + } + + /** + * Get all $LOWER_NAME$s with their relationships and search + */ + public function getAllWithRelations(string $search = ''): Collection + { + $query = $MODULE$::orderBy('name'); + + if (!empty($search)) { + $query->where('name', 'LIKE', "%{$search}%"); + } + + return $query->get(); + } + + /** + * Create a new $LOWER_NAME$ + */ + public function create(array $data): $MODULE$ + { + return $MODULE$::create($data); + } + + /** + * Find $LOWER_NAME$ by ID + */ + public function findById(int $id): ?$MODULE$ + { + return $MODULE$::find($id); + } + + /** + * Delete $LOWER_NAME$ (soft delete) + */ + public function delete(int $id): bool + { + $$LOWER_NAME$ = $MODULE$::find($id); + if ($$LOWER_NAME$) { + return $$LOWER_NAME$->delete(); + } + return false; + } + + /** + * Get all $LOWER_NAME$s + */ + public function all(string $search = ''): Collection + { + $query = $MODULE$::orderBy('name'); + + if (!empty($search)) { + $query->where('name', 'LIKE', "%{$search}%"); + } + + return $query->get(); + } +} diff --git a/be/stubs/nwidart-stubs/repository-interface.stub b/be/stubs/nwidart-stubs/repository-interface.stub new file mode 100644 index 0000000..b9487ff --- /dev/null +++ b/be/stubs/nwidart-stubs/repository-interface.stub @@ -0,0 +1,44 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => 'required|string|max:255', + ]; + } + + /** + * Get custom messages for validator errors. + */ + public function messages(): array + { + return [ + 'name.required' => 'Nama diperlukan.', + 'name.max' => 'Nama tidak boleh melebihi 255 aksara.', + ]; + } + + /** + * Determine if the user is authorized to make this request. + */ + public function authorize(): bool + { + return true; + } +} diff --git a/be/stubs/nwidart-stubs/resource-collection.stub b/be/stubs/nwidart-stubs/resource-collection.stub new file mode 100644 index 0000000..26a4059 --- /dev/null +++ b/be/stubs/nwidart-stubs/resource-collection.stub @@ -0,0 +1,17 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at, + ]; + } +} diff --git a/be/stubs/nwidart-stubs/route-provider.stub b/be/stubs/nwidart-stubs/route-provider.stub new file mode 100644 index 0000000..173248a --- /dev/null +++ b/be/stubs/nwidart-stubs/route-provider.stub @@ -0,0 +1,50 @@ +mapApiRoutes(); + + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path($this->name, '$WEB_ROUTES_PATH$')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->name('api.')->group(module_path($this->name, '$API_ROUTES_PATH$')); + } +} diff --git a/be/stubs/nwidart-stubs/routes/api.stub b/be/stubs/nwidart-stubs/routes/api.stub new file mode 100644 index 0000000..b795051 --- /dev/null +++ b/be/stubs/nwidart-stubs/routes/api.stub @@ -0,0 +1,8 @@ +prefix('v1')->group(function () { + Route::apiResource('$PLURAL_LOWER_NAME$', $STUDLY_NAME$Controller::class)->names('$LOWER_NAME$'); +}); diff --git a/be/stubs/nwidart-stubs/routes/web.stub b/be/stubs/nwidart-stubs/routes/web.stub new file mode 100644 index 0000000..2da42a1 --- /dev/null +++ b/be/stubs/nwidart-stubs/routes/web.stub @@ -0,0 +1,8 @@ +group(function () { + Route::resource('$PLURAL_LOWER_NAME$', $STUDLY_NAME$Controller::class)->names('$LOWER_NAME$'); +}); diff --git a/be/stubs/nwidart-stubs/rule.implicit.stub b/be/stubs/nwidart-stubs/rule.implicit.stub new file mode 100644 index 0000000..635cbd2 --- /dev/null +++ b/be/stubs/nwidart-stubs/rule.implicit.stub @@ -0,0 +1,19 @@ + '$STUDLY_NAME$', +]; diff --git a/be/stubs/nwidart-stubs/scaffold/provider.stub b/be/stubs/nwidart-stubs/scaffold/provider.stub new file mode 100644 index 0000000..5312f67 --- /dev/null +++ b/be/stubs/nwidart-stubs/scaffold/provider.stub @@ -0,0 +1,160 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->name, '$MIGRATIONS_PATH$')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + + // Register repository binding + $this->app->bind( + \Modules\$MODULE$\Repositories\Contracts\$MODULE$RepositoryInterface::class, + \Modules\$MODULE$\Repositories\$MODULE$Repository::class + ); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->nameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->nameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->name, '$PATH_LANG$'), $this->nameLower); + $this->loadJsonTranslationsFrom(module_path($this->name, '$PATH_LANG$')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $configPath = module_path($this->name, config('modules.paths.generator.config.path')); + + if (is_dir($configPath)) { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($configPath)); + + foreach ($iterator as $file) { + if ($file->isFile() && $file->getExtension() === 'php') { + $config = str_replace($configPath.DIRECTORY_SEPARATOR, '', $file->getPathname()); + $config_key = str_replace([DIRECTORY_SEPARATOR, '.php'], ['.', ''], $config); + $segments = explode('.', $this->nameLower.'.'.$config_key); + + // Remove duplicated adjacent segments + $normalized = []; + foreach ($segments as $segment) { + if (end($normalized) !== $segment) { + $normalized[] = $segment; + } + } + + $key = ($config === 'config.php') ? $this->nameLower : implode('.', $normalized); + + $this->publishes([$file->getPathname() => config_path($config)], 'config'); + $this->merge_config_from($file->getPathname(), $key); + } + } + } + } + + /** + * Merge config from the given path recursively. + */ + protected function merge_config_from(string $path, string $key): void + { + $existing = config($key, []); + $module_config = require $path; + + config([$key => array_replace_recursive($existing, $module_config)]); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->nameLower); + $sourcePath = module_path($this->name, '$PATH_VIEWS$'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->nameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->nameLower); + + Blade::componentNamespace(config('modules.namespace').'\\' . $this->name . '\\View\\Components', $this->nameLower); + } + + /** + * Get the services provided by the provider. + */ + public function provides(): array + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->nameLower)) { + $paths[] = $path.'/modules/'.$this->nameLower; + } + } + + return $paths; + } +} diff --git a/be/stubs/nwidart-stubs/scope.stub b/be/stubs/nwidart-stubs/scope.stub new file mode 100644 index 0000000..2bbe73f --- /dev/null +++ b/be/stubs/nwidart-stubs/scope.stub @@ -0,0 +1,15 @@ +call([]); + } +} diff --git a/be/stubs/nwidart-stubs/service-invoke.stub b/be/stubs/nwidart-stubs/service-invoke.stub new file mode 100644 index 0000000..ae29efc --- /dev/null +++ b/be/stubs/nwidart-stubs/service-invoke.stub @@ -0,0 +1,8 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/be/stubs/nwidart-stubs/tests/unit.stub b/be/stubs/nwidart-stubs/tests/unit.stub new file mode 100644 index 0000000..938e5da --- /dev/null +++ b/be/stubs/nwidart-stubs/tests/unit.stub @@ -0,0 +1,16 @@ +assertTrue(true); + } +} diff --git a/be/stubs/nwidart-stubs/trait.stub b/be/stubs/nwidart-stubs/trait.stub new file mode 100644 index 0000000..86f1151 --- /dev/null +++ b/be/stubs/nwidart-stubs/trait.stub @@ -0,0 +1,5 @@ + + + diff --git a/be/stubs/nwidart-stubs/views/index.stub b/be/stubs/nwidart-stubs/views/index.stub new file mode 100644 index 0000000..4cc0542 --- /dev/null +++ b/be/stubs/nwidart-stubs/views/index.stub @@ -0,0 +1,5 @@ + +

Hello World

+ +

Module: {!! config('$LOWER_NAME$.name') !!}

+
diff --git a/be/stubs/nwidart-stubs/views/master.stub b/be/stubs/nwidart-stubs/views/master.stub new file mode 100644 index 0000000..b97cddf --- /dev/null +++ b/be/stubs/nwidart-stubs/views/master.stub @@ -0,0 +1,30 @@ + + + + + + + + + + $STUDLY_NAME$ Module - {{ config('app.name', 'Laravel') }} + + + + + + + + + + {{-- Vite CSS --}} + {{-- {{ module_vite('build-$LOWER_NAME$', 'resources/assets/sass/app.scss') }} --}} + + + + {{ $slot }} + + {{-- Vite JS --}} + {{-- {{ module_vite('build-$LOWER_NAME$', 'resources/assets/js/app.js') }} --}} + + diff --git a/be/stubs/nwidart-stubs/vite.stub b/be/stubs/nwidart-stubs/vite.stub new file mode 100644 index 0000000..f1b0312 --- /dev/null +++ b/be/stubs/nwidart-stubs/vite.stub @@ -0,0 +1,57 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import { readdirSync, statSync } from 'fs'; +import { join,relative,dirname } from 'path'; +import { fileURLToPath } from 'url'; + +export default defineConfig({ + build: { + outDir: '../../public/build-$LOWER_NAME$', + emptyOutDir: true, + manifest: true, + }, + plugins: [ + laravel({ + publicDirectory: '../../public', + buildDirectory: 'build-$LOWER_NAME$', + input: [ + __dirname + '/resources/assets/sass/app.scss', + __dirname + '/resources/assets/js/app.js' + ], + refresh: true, + }), + ], +}); +// Scen all resources for assets file. Return array +//function getFilePaths(dir) { +// const filePaths = []; +// +// function walkDirectory(currentPath) { +// const files = readdirSync(currentPath); +// for (const file of files) { +// const filePath = join(currentPath, file); +// const stats = statSync(filePath); +// if (stats.isFile() && !file.startsWith('.')) { +// const relativePath = 'Modules/$STUDLY_NAME$/'+relative(__dirname, filePath); +// filePaths.push(relativePath); +// } else if (stats.isDirectory()) { +// walkDirectory(filePath); +// } +// } +// } +// +// walkDirectory(dir); +// return filePaths; +//} + +//const __filename = fileURLToPath(import.meta.url); +//const __dirname = dirname(__filename); + +//const assetsDir = join(__dirname, 'resources/assets'); +//export const paths = getFilePaths(assetsDir); + + +//export const paths = [ +// 'Modules/$STUDLY_NAME$/resources/assets/sass/app.scss', +// 'Modules/$STUDLY_NAME$/resources/assets/js/app.js', +//]; diff --git a/be/tests/Feature/ExampleTest.php b/be/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..8364a84 --- /dev/null +++ b/be/tests/Feature/ExampleTest.php @@ -0,0 +1,19 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/be/tests/TestCase.php b/be/tests/TestCase.php new file mode 100644 index 0000000..fe1ffc2 --- /dev/null +++ b/be/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/be/vite-module-loader.js b/be/vite-module-loader.js new file mode 100644 index 0000000..56c35b9 --- /dev/null +++ b/be/vite-module-loader.js @@ -0,0 +1,51 @@ +import fs from 'fs/promises'; +import path from 'path'; +import { pathToFileURL } from 'url'; + +async function collectModuleAssetsPaths(paths, modulesPath) { + modulesPath = path.join(__dirname, modulesPath); + + const moduleStatusesPath = path.join(__dirname, 'modules_statuses.json'); + + try { + // Read module_statuses.json + const moduleStatusesContent = await fs.readFile(moduleStatusesPath, 'utf-8'); + const moduleStatuses = JSON.parse(moduleStatusesContent); + + // Read module directories + const moduleDirectories = await fs.readdir(modulesPath); + + for (const moduleDir of moduleDirectories) { + if (moduleDir === '.DS_Store') { + // Skip .DS_Store directory + continue; + } + + // Check if the module is enabled (status is true) + if (moduleStatuses[moduleDir] === true) { + const viteConfigPath = path.join(modulesPath, moduleDir, 'vite.config.js'); + + try { + await fs.access(viteConfigPath); + // Convert to a file URL for Windows compatibility + const moduleConfigURL = pathToFileURL(viteConfigPath); + + // Import the module-specific Vite configuration + const moduleConfig = await import(moduleConfigURL.href); + + if (moduleConfig.paths && Array.isArray(moduleConfig.paths)) { + paths.push(...moduleConfig.paths); + } + } catch (error) { + // vite.config.js does not exist, skip this module + } + } + } + } catch (error) { + console.error(`Error reading module statuses or module configurations: ${error}`); + } + + return paths; +} + +export default collectModuleAssetsPaths; diff --git a/be/vite.config.js b/be/vite.config.js new file mode 100644 index 0000000..29fbfe9 --- /dev/null +++ b/be/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + tailwindcss(), + ], +}); diff --git a/docs/BORANG-MENJADI-ANGGOTA-2024.pdf b/docs/BORANG-MENJADI-ANGGOTA-2024.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7fac5ff23e4f1934b0987bff168e3b06b7a73bc5 GIT binary patch literal 788397 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®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

0TVE0aitZD3T~E**d#l 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