Files
Ferme/AGENTS.md

3.3 KiB
Raw Permalink Blame History

AGENTS.md

Project overview

  • Symfony 8 + API Platform 4 backend, Nuxt 3 frontend in frontend/.
  • Apache vhost serves API under /api and frontend from frontend/dist.
  • API base URL on frontend uses NUXT_PUBLIC_API_BASE (see frontend/.env).

Backend conventions

  • Use English for code identifiers/messages; keep “pont-bascule” as domain term.
  • API Platform operations are defined on Doctrine entities.
  • Reception entity is in src/Entity/Reception.php, with custom weigh endpoint /receptions/weigh.
  • Reception fields: date_reception, license_plate, current_step (default 0), is_valid (default false).
  • date_reception is set by the UI, stored as DateTimeImmutable, serialized as Y-m-d.
  • Weight entity (src/Entity/Weight.php) is 1N with Reception, each row stores type (gross or tare), dsd, weight, weighed_at (all nullable except type).
  • Weigh endpoint /receptions/weigh returns PontBasculeReading with dsd, weight, weighedAt (formatted Y-m-d).
  • Custom exception: App\Exception\PontBasculeException with French messages, mapped to 500 in provider.
  • Parsing of pont-bascule payload is in src/Service/PontBasculePayloadDecoder.php.
  • config/reference.php is auto-generated; keep it.

Frontend conventions

  • Nuxt SSR disabled; Tailwind used.
  • Layout in frontend/layouts/default.vue: max width 1050px, header full width.
  • Tailwind custom color palette is primary (e.g. bg-primary-500).
  • API composable in frontend/composables/useApi.ts with get/post/put/patch/delete and default JSON/PATCH content types.
  • API errors/success toasts can be customized via toastErrorMessage/toastSuccessMessage or i18n keys toastErrorKey/toastSuccessKey. Global method fallbacks use errors.http.* keys.
  • useApi uses useNuxtApp().$i18n (not useI18n) to avoid setup-only constraint in service calls.
  • Pinia store: frontend/stores/reception.ts is the source of truth for the current reception.
  • Zod is used for form validation (e.g. frontend/components/reception/reception-form.vue); shared helpers live in frontend/utils/zod-errors.ts.
  • Weighing logic is shared via frontend/composables/useWeighing.ts.
  • Reception step UI uses store state (currentStep) in frontend/pages/reception/[[id]].vue.
  • Active nav styles in header use NuxtLink with custom slot.
  • Reusable UI components live under frontend/components/ui/ and are auto-imported with Ui prefix (e.g. UiLoadingDots).
  • Service layer lives in frontend/services/ with typed DTOs in frontend/services/dto/.
  • Reception service uses receptions, receptions/{id}, receptions/weigh and supports success/error toast keys.
  • Reception receipt endpoint is receptions/{id}/receipt (PDF) via frontend/composables/usePdfPrinter.ts.

Environment & routing

  • Frontend dev server: npm run dev in frontend/.
  • API base for local dev: http://localhost:8080/api (set in frontend/.env via NUXT_PUBLIC_API_BASE).
  • CORS handled by Nelmio; .env includes CORS_ALLOW_ORIGIN regex for localhost.
  • Nuxt i18n locales live in frontend/i18n/locales (configured via langDir: 'locales').
  • Default locale is fr; translations in frontend/i18n/locales/fr.json.

Notes

  • Do not add a GET that creates resources; use POST + PATCH.
  • Keep endpoints in plural (API Platform convention).