Поток обратной связи (flow) модуля feedback

Документ описывает жизненный цикл оценки и идеи: от HTTP-запроса до уведомления.

1. Отправка оценки

sequenceDiagram
    autonumber
    participant U as Пользователь
    participant C as FeedbackController
    participant H as SubmitRatingHandler
    participant R as IFeedbackRatingRepository
    participant E as GlobalEventDispatcher (ядро)
    participant L as SendNonMaxRatingEmailListener
    participant N as NotificationHub

    U->>C: POST /feedback/rating {speed, functionality, design, usability}
    C->>H: SubmitRatingCommand
    H->>H: валидация Rating (0..5)
    H->>R: upsert по userId (find or create + updateRatings)
    H->>E: dispatch RatingSubmittedEvent (глобальная шина)
    E->>L: handle(RatingSubmittedEvent)
    L->>L: isMaxRating()? (все >= 4)
    alt оценка НЕ максимальная (есть < 4)
        L->>N: Notification(email, 'Помогите нам стать лучше', ...)
        N->>N: EmailChannel::send
    else оценка максимальная
        N-->>L: (письмо не отправляется)
    end
    H-->>C: FeedbackRatingDto
    C-->>U: {item: {...}}

2. Отправка идеи

sequenceDiagram
    autonumber
    participant U as Пользователь
    participant C as FeedbackController
    participant H as SubmitIdeaHandler
    participant R as IFeedbackIdeaRepository
    participant E as GlobalEventDispatcher

    U->>C: POST /feedback/idea {type, comment}
    C->>H: SubmitIdeaCommand
    H->>H: валидация IdeaType
    H->>R: save FeedbackIdea
    H->>E: dispatch IdeaSubmittedEvent (слушателей пока нет)
    H-->>C: FeedbackIdeaDto
    C-->>U: {item: {...}}

IdeaSubmittedEvent диспатчится, но не имеет слушателей (каркас для будущих уведомлений/модерации).

3. Чтение идей и статистики

ЗапросПутьРезультат
Список идейGET /feedback/ideaFeedbackIdeaDto[]
СтатистикаGET /feedback/statsFeedbackStatsDto

4. Ключевые правила

5. Таблицы

ТаблицаПоля (основные)
feedback_ratingid, user_id (UNIQUE, FK→users), speed, functionality, design, usability (CHECK 0–5), даты
feedback_ideaid, user_id, type, comment, is_implemented, даты