refactor(project-management) : introduce Project/Task/TaskTag/Client contracts

Tranche 1 of LST-65 (ProjectManagement module migration). Decouples the
TimeTracking module from the core-business entities before they move, with
no entity relocation yet — keeps the diff minimal and the risk isolated.

- New read contracts in Shared/Domain/Contract (minimal surface, aligned on
  the entities' real nullable signatures): ProjectInterface (id/code/name),
  TaskInterface (id/number/title), TaskTagInterface (id/label/color),
  ClientInterface (id/name).
- Project/Task/TaskTag/Client implement their contract (entities stay in
  src/Entity for now). Project.client typed as ClientInterface.
- TimeEntry (TimeTracking) now references ProjectInterface/TaskInterface/
  TaskTagInterface instead of the concrete entities; repository + DQL
  untouched in behaviour.
- resolve_target_entities maps the 4 contracts to the legacy entities (will
  be repointed to the module in tranche 2).
- Adds the migration plan doc.

159 tests green, mapping valid, cs-fixer clean.
This commit is contained in:
Matthieu
2026-06-20 16:34:15 +02:00
parent 1b652ef680
commit f119ec30ca
13 changed files with 189 additions and 32 deletions
+4
View File
@@ -22,6 +22,10 @@ doctrine:
auto_mapping: true
resolve_target_entities:
App\Shared\Domain\Contract\UserInterface: App\Module\Core\Domain\Entity\User
App\Shared\Domain\Contract\ProjectInterface: App\Entity\Project
App\Shared\Domain\Contract\TaskInterface: App\Entity\Task
App\Shared\Domain\Contract\TaskTagInterface: App\Entity\TaskTag
App\Shared\Domain\Contract\ClientInterface: App\Entity\Client
mappings:
App:
type: attribute