Matthieu
d95f14dadc
feat(directory) : carry over contacts/addresses/reports on prospect conversion
2026-06-22 12:13:14 +02:00
Matthieu
354d7c34ba
feat(directory) : add contact/address/report tables, migrate inline addresses, drop inline columns
2026-06-22 12:11:11 +02:00
Matthieu
33ba90a00d
refactor(directory) : harden report document upload (iri guard, orphan cleanup)
2026-06-22 11:56:21 +02:00
Matthieu
b9538454a9
feat(directory) : add ReportDocument storage (entity, upload processor, download, cleanup)
2026-06-22 11:51:53 +02:00
Matthieu
5af529d1b2
feat(directory) : add CommercialReport entity with dual ownership and author
2026-06-22 11:51:19 +02:00
Matthieu
8d63735bd8
feat(directory) : add Address entity with client/prospect dual ownership
2026-06-22 11:45:05 +02:00
Matthieu
e5a64a60c4
feat(directory) : add Contact entity with client/prospect dual ownership
2026-06-22 11:42:09 +02:00
Matthieu
da3d190216
refactor(core) : final legacy cleanup — app is 100% modular
...
LST-60 (3.3). Closes the modular-monolith migration. src/Entity was already
empty; this removes the last legacy residue.
- Doctrine: drop the legacy "App" mapping (empty src/Entity). resolve_target_
entities already targets modules only.
- MCP User tools (Reference/) -> Core/Infrastructure/Mcp/Tool; MCP Serializer
-> Shared/Infrastructure/Mcp (33 usages repointed).
- Controllers (mark-all-read, notification unread-count, regenerate-api-token,
user-avatar) -> Core/Infrastructure/Controller. TokenEncryptor -> Shared/
Infrastructure/Service (11 usages). AppVersion resource+provider -> Shared.
ContractType enum -> Core/Domain/Enum.
- src/{Entity,State,Controller,Service,Enum,ApiResource} now empty; routes,
MCP tool names and public API unchanged.
180 tests green, mapping valid, no route regression, cs-fixer clean.
Note: final Malio visual harmonisation (subjective) left to the PO.
2026-06-21 01:25:19 +02:00
Matthieu
d42b288434
feat(directory) : add Prospect entity with conversion to Client (back)
...
LST-58 (2.4), part 2 — Prospect (new entity). Completes the Directory backend.
- ProspectStatus enum (new/contacted/qualified/won/lost) + Prospect entity
(name, company, email, phone, address, status, source, notes,
convertedClient -> ClientInterface) with Timestampable/Blamable + #[Auditable].
- API: GetCollection/Get (ROLE_USER), Post/Patch/Delete (ROLE_ADMIN),
custom POST /prospects/{id}/convert (ConvertProspectProcessor: creates a
Client from the prospect, links convertedClient, sets status=Won; idempotent).
SearchFilter on status.
- Repository interface + Doctrine impl (bound); 6 MCP tools (list/get/create/
update/delete/convert-prospect); Serializer::prospect(). Module perms
directory.prospects.view/manage. Demo fixtures (3 prospects, one converted).
- Additive migration: CREATE TABLE prospect + FKs ON DELETE SET NULL + COMMENT.
163 tests green (incl. conversion test), mapping valid, cs-fixer clean.
2026-06-20 19:09:12 +02:00
Matthieu
c5738d269b
feat(directory) : migrate Client into Directory module (back)
...
LST-58 (2.4), part 1/2 — Client move. Prospect + repertoire front are pending
the product spec and will be added on this branch afterward.
- Client entity moved to src/Module/Directory/Domain/Entity; repository split
into Domain/Repository/ClientRepositoryInterface + Doctrine impl (bound in
services.yaml). 5 client MCP tools moved to Infrastructure/Mcp/Tool, now
injecting the interface.
- resolve_target_entities ClientInterface repointed to Directory\Client;
Directory mapping added; DirectoryModule registered (id directory, 2 RBAC
perms). Client.projects relation now uses ProjectInterface -> Directory no
longer depends on ProjectManagement.
- ProjectManagement Create/UpdateProjectTool inject Directory's
ClientRepositoryInterface; Serializer and fixtures repointed.
- Garde-fous: #[Auditable] + Timestampable/Blamable on Client (additive
migration: created_at/updated_at + created_by/updated_by FK ON DELETE SET
NULL + COMMENT).
161 tests green, mapping valid, no API route regression, cs-fixer clean.
2026-06-20 18:51:49 +02:00