Skip to content

Prod: add Angular program notifications - #741

Merged
TThanos3000 merged 1 commit into
masterfrom
feature/prod-angular-program-notifications
Sep 11, 2026
Merged

TThanos3000 merged 1 commit into
masterfrom
feature/prod-angular-program-notifications

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

Что сделано

Добавлены production in-app уведомления для текущего Angular-интерфейса:

  • program_news_published при создании новости программы через legacy create_program_news(...);
  • program_material_published при создании материала через inline PartnerProgramAdmin или отдельный PartnerProgramMaterialAdmin;
  • course_access_opened при создании опубликованного курса или переходе draft/completed -> published через CourseAdmin.

Контракт событий

Получатели всех трёх событий определяются только по legacy membership PartnerProgramUserProfile текущей программы. ID пользователей выбираются одним SELECT DISTINCT, после чего существующий create_notifications(...) выполняет один bulk insert. Автор события исключается существующим bulk-сервисом; посторонние пользователи уведомлений не получают.

Action URL:

  • новость: /office/program/<program_id>;
  • материал: /office/program/<program_id>;
  • курс: /office/courses/<course_id>.

Стабильные ключи:

  • program-news:<news_id>:published;
  • program-material:<material_id>:published;
  • course-access:<course_id>:<datetime_updated>.

Повтор одного события идемпотентен благодаря существующему ограничению (recipient, event_key). Повторный реальный переход курса в published получает новый ключ. Запись source-объекта и уведомлений находится в одной транзакции; rollback не оставляет уведомлений.

Карантин старых next-gen строк

При NEXTGEN_SURFACE_ENABLED=False единый visible-queryset оставляет в Angular API только legacy project invite, vacancy response и новые program types. Старые TEAM_INVITE_*, APPLICATION_*, SUBMISSION_*, EXPERT_ASSIGNMENT_*, EVALUATION_*, NEWS_COMMENT_CREATED:

  • не попадают в list и unread count;
  • не изменяются через read-all;
  • возвращают 404 при read по ID;
  • физически сохраняются в БД.

При NEXTGEN_SURFACE_ENABLED=True прежний полный React-dev contract сохранён.

Migration

Добавлена notifications.0002_add_program_notification_types: только изменение Django field state/choices. sqlmigrate для PostgreSQL показывает no-op; data/destructive операций нет.

Проверки

Exact base: b47be5ba4ec23033ee1fa2582e0a127c79f6552d
Exact head: e1d445d83c591df35ab60e60034d5dea4cadc509

Локальный PostgreSQL:

  • новые program events + visibility regressions: 16/16;
  • production/OFF notifications + legacy project invites/vacancies: 87/87;
  • React-dev/ON notification and workspace regressions: 24/24;
  • legacy news + program admin regressions: 46/46.

Дополнительно:

  • python manage.py check — OK;
  • python manage.py check --tag models — OK;
  • python manage.py makemigrations --check --dry-run — No changes detected;
  • Black по изменённым файлам — OK;
  • Flake8 по всему репозиторию — OK;
  • git diff --check — OK.

Email/mailing, Angular, React, Docker, dependencies и deploy не изменялись.

CI

Проверки на exact head e1d445d83c591df35ab60e60034d5dea4cadc509:

  • TestsPASS (22m32s);
  • Backend PostgreSQL CIPASS (12m06s);
  • LintPASS (9s);
  • все sync-проверки — PASS.

Все обязательные Linux CI checks зелёные.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 11, 2026 19:28
@TThanos3000
TThanos3000 merged commit 4c49f59 into master Sep 11, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants