3.2 KiB
3.2 KiB
Copilot Instructions for AI Agents
Project Overview
- This is a Laravel-based web application for managing perizinan (permits), with a normalized database structure and dashboard analytics.
- Key entities:
Kategori,DashboardPerizinan,TerakhirTerbit,IzinTercepat, with relations enforced via foreign keys and PascalCase field names. - Data flows from database to dashboard/API endpoints, with helpers mapping string names to KategoriID and providing DB fallback.
Architecture & Data Flow
- Controllers (e.g.,
app/Http/Controllers/DashboardController.php): Handle API/dashboard requests, use helpers for data formatting, always query DB (no static arrays). - Helpers (e.g.,
app/Helpers/DashboardHelper.php): Accept string kategori, map to KategoriID, query DB for fallback, output in PascalCase. - Models (e.g.,
app/Models/Kategori.php): Eloquent models with explicit relations; always use PascalCase for DB fields. - Migrations (e.g.,
database/migrations/): Define normalized schema, foreign keys, and PascalCase columns. - Seeders (e.g.,
database/seeders/DatabaseSeeder.php): Populate Kategori and other reference tables.
Developer Workflows
- Build/Serve: Use
php artisan servefor local dev; assets via Vite (npm run dev). - Sync Data: Run
php artisan perizinan:sync --allto sync all permit data (used in cronjobs). - Testing: Use
php artisan testfor PHPUnit tests intests/Featureandtests/Unit. - Cronjob: On server, set up cron to run sync command regularly (see shell script in docs).
Conventions & Patterns
- PascalCase: All DB fields, model properties, and API outputs use PascalCase.
- String-to-ID Mapping: Helpers accept string kategori, map to KategoriID, fallback to DB if not found.
- No Static Arrays: All dashboard/API data must come from DB, not hardcoded arrays.
- Frontend Data Import: Use window variables for initial chart data, AJAX for dynamic updates (see
resources/js/homeOneChart.js).
Integration Points
- External: Uses Laravel packages (see
composer.json), e.g.,barryvdh/laravel-dompdffor PDF generation. - Frontend: Blade templates in
resources/views/, JS inresources/js/. - Database: SQLite for local dev (
database/database.sqlite).
Key Files & Directories
app/Helpers/DashboardHelper.php: Helper logic for dashboard dataapp/Http/Controllers/DashboardController.php: Main dashboard/API controllerapp/Models/Kategori.php: Kategori model (ensure correct namespace)database/migrations/: All migration filesdatabase/seeders/DatabaseSeeder.php: Seeder logicresources/js/homeOneChart.js: Frontend chart integrationroutes/web.php: Route definitions
Example Patterns
- Helper usage:
DashboardHelper::getSummaryByKategori('Pertek')(maps to KategoriID, queries DB) - Controller usage:
$data = DashboardHelper::getSummaryByKategori($kategoriString); - Cronjob:
* * * * * cd /path/to/project && php artisan perizinan:sync --all >> /dev/null 2>&1
If any conventions or workflows are unclear, please ask for clarification or examples from the codebase.