Архитектура модуля projects

Документ описывает слои модуля, сущности и ключевые классы.

1. Структура

modules/projects/
├── Module.php
├── application/
│   ├── assembler/       # ProjectDtoAssembler, BoardDtoAssembler, ProjectUserDtoAssembler
│   ├── command/         # Create/Update/Delete Project, Board, Member, Invitation
│   ├── dto/             # ProjectDto, BoardDto, ProjectUserDto
│   ├── handler/         # CreateProjectHandler, … (18 хендлеров)
│   ├── port/            # IProjectAccess
│   └── query/           # GetProjectQuery, ListUserProjectsQuery, …
├── config/
│   ├── di.php           # репозитории, access, слушатели, шина событий
│   └── routing.php      # маршруты проекта/доски/участника/приглашения
├── domain/
│   ├── entity/          # Project, Board, Invitation, ProjectUser
│   ├── event/           # ProjectCreatedEvent, InvitationAcceptedEvent, …
│   ├── repository/      # IProjectRepository, IBoardRepository, IProjectUserRepository, IInvitationRepository
│   └── valueObject/     # ProjectId, BoardId, ProjectType, InvitationStatus, UserRole, Settings
├── infrastructure/
│   ├── access/          # ProjectAccess (реализация IProjectAccess)
│   ├── event/           # ModuleEventDispatcher, DispatchingEventDecorator
│   ├── listener/        # AddOwnerAsMemberListener, SendInvitationEmailListener,
│   │                    # CreatePersonalProjectOnUserFirstLogin, ProjectLoggerListener
│   ├── migrations/      # project, board, project_user, project_invitation
│   ├── persistence/     # ProjectAR, BoardAR, ProjectUserAR, InvitationAR
│   └── repository/      # DbProjectRepository, DbBoardRepository, DbProjectUserRepository, DbInvitationRepository
└── presentation/
    ├── controller/      # ProjectController, BoardController, ProjectMemberController, InvitationController
    └── request/         # CreateProjectRequest, UpdateProjectRequest, CreateBoardRequest, …

2. Слои и правила

3. Сущности

3.1. Project

3.2. Board

3.3. ProjectUser

3.4. Invitation

4. Value objects

VOОписание
ProjectId, BoardIdID (наследуют AbstractIntId)
ProjectTypeТип проекта: personal, collaborative, corporate (+ др.)
InvitationStatusСтатус приглашения: pending / accepted / cancelled
UserRoleРоль участника в проекте: owner / admin / member
SettingsПроизвольные настройки (merge)

5. События (кратко)

События модуля (подробно — entities-events.md):

ProjectCreatedEvent, ProjectMemberAddedEvent, ProjectMemberRemovedEvent, BoardCreatedEvent, InvitationCreatedEvent, InvitationAcceptedEvent, InvitationCancelledEvent.

Распространение:

graph LR
    H[Handler] -->|dispatch| M[ModuleEventDispatcher]
    M -->|локальные слушатели| L[Listener'ы проекта]
    M -->|DispatchingEventDecorator| G[Global IEventDispatcher ядра]

6. DI: ключевые связи

См. configuration.md. Основное: