5b9c4ca09d
refactor(ui) : improve styling, layout and responsive across all components
...
Rework CSS theme (app.css), navbar layout, dashboard page, machine detail,
catalog pages, and various form/display components for better consistency
and mobile responsiveness.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 00:14:32 +01:00
dcb5f15769
docs : update CLAUDE.md with custom controllers, fields architecture and factories
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 18:43:19 +01:00
6b5eb7bcd6
fix(tests) : fix stale unit tests for useToast and useEntityTypes
...
useToast.clearAll() now clears the dedup map to prevent test pollution,
and useEntityTypes error test expectation matches actual French message.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 18:39:10 +01:00
d3cd3fc3ce
feat(machine) : add custom field management on machine detail page
...
- Fix: return customFieldValues in structure endpoint (was hardcoded null)
- Frontend: add editor to create/edit/delete custom field definitions
- Tests: add integration tests for structure values + definition CRUD
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 18:36:14 +01:00
98f5d983b3
feat(machine) : add custom field definition editor on machine detail page
...
Adds UI to create, edit, reorder and delete custom field definitions
directly from the machine detail page in edit mode.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 18:34:35 +01:00
cda872a057
fix(config) : disable pathPrefix for component auto-imports
2026-03-08 17:48:11 +01:00
84970a352d
refactor(frontend) : extract ProductDocumentsInline to reduce PieceItem under 500 lines
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:30:45 +01:00
c1d14124ff
refactor(frontend) : trim product edit page under 500 lines
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:30:41 +01:00
a83a4428c2
refactor(frontend) : extract piece edit page logic into composable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:28:04 +01:00
a1998d7966
refactor(frontend) : extract component create page logic into composable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:24:50 +01:00
6add558725
refactor(frontend) : extract component edit page logic into composable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:23:46 +01:00
e18ce984e7
refactor(frontend) : extract shared piece product selection utils
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:18:55 +01:00
d00e5c058b
refactor(frontend) : extract RelatedItemsModal from ManagementView
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:13:27 +01:00
3b24dc128a
refactor(frontend) : extract PieceModelStructureEditor logic into composable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 17:09:02 +01:00
c188bd7e8b
refactor(frontend) : extract home page modals into components
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 15:14:31 +01:00
e911f169ce
refactor(frontend) : extract assignment fetch logic into composable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 15:10:22 +01:00
9f9ad80c61
refactor(frontend) : extract StructureNodeEditor logic into composable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 15:04:48 +01:00
c831f65ef3
refactor(frontend) : split useMachineDetailData into focused composables
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 14:58:32 +01:00
81eb181000
refactor(frontend) : split componentStructure.ts into focused modules
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 14:43:15 +01:00
a3fde7a191
refactor(frontend) : extract CustomFieldDisplay shared component
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 14:39:54 +01:00
b696b5aa1f
refactor(frontend) : extract StructureSkeletonPreview shared component
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 14:35:05 +01:00
33fc80cbc2
fix(security) : disable session migration on API firewall
...
Symfony's default session_fixation_strategy (migrate) regenerated the
session ID on every authenticated request, breaking concurrent API calls
from the SPA — only the first request succeeded, all others got 401.
The login controller already calls $session->migrate(true) explicitly,
so disabling automatic migration is safe.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 14:30:38 +01:00
c6db96dc76
refactor(frontend) : extract DocumentListInline shared component
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 14:26:14 +01:00
33e3f25850
docs : update project documentation and frontend submodule pointer
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 13:47:46 +01:00
efc6ec5691
test(api) : add comprehensive API test suite (161 tests)
...
- Add AbstractApiTestCase with auth helpers and entity factories
- Add tests for all entities: Machine, Piece, Composant, Product, Site,
ModelType, Constructeur, CustomField, CustomFieldValue, Document,
MachineComponentLink, MachinePieceLink, MachineProductLink, Profile
- Add controller tests: CommentController, EntityHistory
- Add HealthCheck, Filter, Pagination, Validation, Session tests
- Test auth (401), authorization (403), CRUD, and edge cases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 13:42:56 +01:00
b342d0e50a
fix(security) : harden auth, session, document access and health endpoint
...
- Remove orphaned PUBLIC_ACCESS rule for deleted /api/test route
- Remove JWT login firewall (app is session-based only)
- Set APP_SECRET placeholder (real value must be in .env.local)
- Remove JWT env vars from .env
- Add session regeneration on login (prevent session fixation)
- Remove Document.path from API serialization groups (prevent path leak)
- Restrict health check details to ROLE_ADMIN (anonymes get status only)
- Add path traversal guard in DocumentStorageService
- Convert CreateProfileCommand password to interactive hidden prompt
- Restrict Profile Get endpoint to ROLE_ADMIN
- Change api firewall to stateless: false (matches session-based auth)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 13:42:09 +01:00
0709d01240
chore(config) : add DAMA test bundle, update API Platform config, improve makefile
...
- Register DAMADoctrineTestBundle for test env (transaction rollback)
- Update API Platform title/description, add pagination defaults
- Configure services for new controllers and commands
- Update makefile targets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 13:39:44 +01:00
74f77a3ba8
refactor(backend) : extract CuidEntityTrait, abstract audit subscriber, merge history controllers
...
- Extract shared ID generation + timestamps into CuidEntityTrait used by all entities
- Create AbstractAuditSubscriber to deduplicate audit logic across 7 subscribers
- Merge per-entity history controllers into single EntityHistoryController
- Delete redundant ComposantHistory/MachineHistory/PieceHistory/ProductHistoryController
- Add OpenApiDecorator for API documentation customization
- Disable failOnDeprecation in PHPUnit (vendor API Platform deprecation)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 13:39:03 +01:00
165e0a6341
fix(ui) : prevent dropdown overflow clipping in DataTable
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 13:34:52 +01:00
de7be1b9d0
refactor(frontend) : extract shared components and reduce file sizes
...
- Extract CustomFieldInputGrid.vue from 6 duplicated template blocks (~70 lines each)
- Extract EntityHistorySection.vue from 3 identical history sections in edit pages
- Extract useDragReorder composable from 4 identical drag-and-drop implementations in StructureNodeEditor (~330 lines → ~30)
- Extract catalogDisplayUtils.ts (resolvePrimaryDocument, resolveSupplierNames, buildSuppliersDisplay)
- Remove redundant computed wrappers (historyEntries, loadingTypes, selectedFiles)
- Remove unused imports (fieldKey, historyActionLabel, formatHistoryDate, *HistoryEntry types)
- Move Intl.DateTimeFormat to module-level in date.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 02:28:26 +01:00
bab13e5c57
chore : clean project config — untrack .idea/, gitignore Zone.Identifier and frontend/, blank JWT secret
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 02:01:54 +01:00
7b3eb1c5fc
refactor(catalog) : extract shared delete impact logic and cleanup dead code
...
Extract duplicated resolveDeleteImpact/buildDeleteMessage into shared utility,
remove redundant computed wrappers, fix indentation, and remove dead code.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-08 01:35:21 +01:00
Matthieu
378026ebce
chore(frontend) : update submodule — add buttons repositioned
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 11:32:56 +01:00
Matthieu
592beb0fa7
fix(ui) : move add buttons below last element in structure editors
...
Place "Ajouter" buttons after the items list instead of in the section
header, so they always appear below the last added element.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 11:28:07 +01:00
Matthieu
ea2b813728
chore(frontend) : update submodule — product delete confirmation
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 11:07:06 +01:00
Matthieu
e732585e63
fix(catalog) : add delete impact confirmation to product catalog
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 11:06:06 +01:00
Matthieu
20653b9046
docs(changelog) : add delete confirmation dialog entry
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 10:59:48 +01:00
Matthieu
f1cc21c31b
docs(changelog) : add delete confirmation dialog entry
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 10:59:43 +01:00
Matthieu
c6deef6028
chore(frontend) : update submodule — delete confirmation dialog
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 10:59:10 +01:00
Matthieu
6c2f84dd3a
fix(catalog) : replace blocking delete guard with confirmation dialog
...
Show cascade-delete impact (documents, machine links, custom fields)
in a confirmation modal instead of blocking deletion entirely.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 10:58:41 +01:00
Matthieu
e922b14419
feat(api) : add /api/health endpoint for monitoring
...
- Returns status, version, timestamp, PHP version, DB latency and memory usage
- Accessible without authentication (PUBLIC_ACCESS)
- Returns 200 when healthy, 503 when degraded (DB down)
2026-03-06 09:51:09 +01:00
Matthieu
d16b042739
chore(frontend) : update submodule — changelog v1.8.1
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 17:39:07 +01:00
Matthieu
032b3b33c9
docs(changelog) : add v1.8.1 release notes
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 17:39:01 +01:00
Matthieu
2b3c1fe08e
docs(changelog) : complete v1.8.1 changelog with all frontend changes
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 17:36:37 +01:00
Matthieu
51248b7854
chore(release) : v1.8.1
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
v1.8.1
2026-03-05 17:27:29 +01:00
Matthieu
0e11f4ad2d
refactor(api) : remove TypeMachine skeleton system, fix ModelType serialization
...
- Remove TypeMachine, TypeMachineComponentRequirement, TypeMachinePieceRequirement,
TypeMachineProductRequirement entities and related repositories/state processor
- Replace MachineSkeletonController with MachineStructureController
- Link CustomField directly to Machine instead of TypeMachine
- Add migration to drop TypeMachine tables and migrate custom fields to machines
- Fix ModelType serialization: Annotation\Groups → Attribute\Groups (Symfony 8 compat)
and add product:read, composant:read, piece:read groups for embedded category display
- Fix Profile: same Annotation → Attribute import
- Fix SearchFilter: partial → ipartial on Comment and Document
- Update frontend submodule (remove skeleton pages/components, simplify machine creation)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 17:26:16 +01:00
Matthieu
32d03b480d
refactor(machines) : remove TypeMachine skeleton system, simplify machine creation
...
- Remove TypeEdit*, TypeInfoDisplay, MachineSkeletonSummary, MachineCreatePreview components
- Remove machine-skeleton pages and type pages
- Remove useMachineTypesApi, useMachineSkeletonEditor, useMachineCreateSelections composables
- Add AddEntityToMachineModal for direct entity linking
- Update machine detail/create pages for direct custom fields
- Fix SearchSelect, category display, and ipartial search filters
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 17:25:23 +01:00
Matthieu
f2539099bc
chore(frontend) : update submodule — DataTable global + filtres server-side
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-04 16:07:03 +01:00
Matthieu
e5dc60467e
feat(api) : ajout filtres SearchFilter ipartial sur noms de types et commentaires
...
- Piece : typePiece.name ipartial
- Composant : typeComposant.name ipartial
- Product : typeProduct.name ipartial + OrderFilter supplierPrice
- Comment : entityName partial + OrderFilter authorName, status
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-04 16:05:24 +01:00
Matthieu
6f1bac381d
refacto(tables) : composant DataTable global + migration de toutes les tables
...
- Nouveau composant DataTable réutilisable avec tri par en-têtes, pagination, filtres colonnes
- Nouveau composable useDataTable (sort/page/search/perPage/columnFilters + persistance URL)
- Migration des 9 tables : constructeurs, comments, admin, pieces-catalog, component-catalog, product-catalog, documents, activity-log, ManagementView (catégories)
- Filtres "Type de" server-side (ipartial) pour pièces, composants, produits
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-04 16:05:00 +01:00