Skip to main content

Architecture

High-Level Architecture

Layering

LayersLocationResponsibilities
Routingroutes/*.php, routes/API/V1/api.phpendpoint map + middleware
Controllersapp/Http/Controllers/*orchestration request/response
Request Validationapp/Http/Requests/*payload validation
Model Domainsapp/Models/*, app/Modules/*/Models/*domain + relationship rules
Action (SPK/PO module)app/Modules/*/Actions/*segmented business operations
API Resourcesapp/Http/Resources/*transform response API
Persistencedatabase/migrations/*schema + data evolution
Asyncapp/Jobs/*export/pdf/push async

Route Grouping

GroupsPrefixMiddleware
Admin/admin/*web, auth, access:*
API V1/api/v1/*api, partial auth:sanctum + access:*
Membershipcustom route fileregister/login/otp/fcm

Auth & Access Control

  • Session auth for web admin.
  • Sanctum token for API.
  • Gate policy in AuthServiceProvider.
  • The EnsureUserHasRole middleware validates soft-deleted project roles + edge cases.

Key Module

  1. SPB Module: submission of project materials/goods.
  2. PO Module: purchase order per supplier, lifecycle approval until acceptance.
  3. Payment Module: payment terms, tax, verification, split payment.
  4. SPK Module: work contract + revision + payment + accounting + receipt.

Pattern Used

  • Fat-model scopes for filtering status (scopeCondition, notComplete, etc.).
  • PHP native enum (SPK/PO receipt/payment split status).
  • Action classes for complex operations of the SPK/PO receipt module.
  • Soft delete on several entities (users, suppliers, spbs, pre_orders, spks).

Detected Technical Debt

AreasObservationImpact
Query SPB notComplete/completecomplex raw SQL + refactor TODOlow maintainability
Mixed model/module stylessome domains are still controller-heavylow consistency
The admin route is huge>100 routes in one filedifficult onboarding

Verification Notes

  • Status: Partial
  • Scope: Raw SPB query performance on large data volumes has not been benchmarked.
  • Action: Run profiling query + baseline response time on staging/production-like dataset.