Skip to content

feat: автоматические сертификаты участников программы - #818

Merged
TThanos3000 merged 4 commits into
devfrom
feat/dev-program-certificates-20261024
Oct 23, 2026
Merged

TThanos3000 merged 4 commits into
devfrom
feat/dev-program-certificates-20261024

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Что изменено

В управление программой добавлен API автоматических сертификатов: приватные фон и подпись, редактируемое размещение, пробный PDF, два режима получателей, запуск и пауза, PDF и очередь писем, журнал с фильтрами, повтор ошибок и ZIP. Выданные PDF неизменяемы; уникальный ключ program/user исключает повторную выдачу.

Зачем

Реализация утвержденного макета сертификатов: https://www.figma.com/design/tvog0fpEgWgEtr7KUTjbyE?node-id=904-3219 . Контракт и приемка: docs/modules/program-certificates.md.

Реализация

Django/DRF, штатные management permissions, Celery beat как сохраняемая очередь, WeasyPrint с Mont. PNG/JPEG проверяются по содержимому; рендер не загружает внешние URL. Активы и PDF приватно хранятся в БД. Рассылка использует существующий email backend, тест только текущему организатору. Отправлено означает принятие провайдером.

API

Новые additive пути /programs/{id}/management/certificates/ и собственные /certificates/me/. Секретная ссылка скачивания UUID в письме. Revision 409 защищает параллельное редактирование. См. контракт в docs.

UI

Парный Angular PR: PROCOLLAB-github/procollab#499. Backend развернуть первым. Browser verification настоящего локального Angular + Django пройдена (1440px/390px, мышь/касание, загрузка/resize/сохранение, guard, фильтры и собственный сертификат).

Permissions

Только менеджер данной программы/staff управляет выдачей. Чужие assets/PDF и журнал недоступны. Участник видит только собственный документ; публичный download требует секретный токен.

Проверки

  • Django check; makemigrations --check --dry-run.
  • 36 успешных локальных тестов certificates + management API, Python 3.11/SQLite, без native_pdf.
  • Black, Flake8, git diff --check. Добавлены два отдельных PostgreSQL-теста параллельных worker и инициализации (на SQLite пропущены).
  • Linux/PostgreSQL CI: 1352 теста полного набора + 39 тестов locking/vacancy, включая native_pdf и оба теста параллельных сертификатов. Run 40028136370, head 48be948.

Acceptance criteria

  • Объектные permissions, scope активов и скачивания проверены тестами.

  • Два режима получателей по фактической команде, дедупликация.

  • Конфликты сохранения, изображения, фильтры/поиск/пагинация.

  • Пауза, идемпотентная выдача и повтор отправки с тем же PDF.

  • Native A4 PDF с кириллицей: Linux CI, pdftotext подтверждает все слова длинного ФИО и название программы; pdfinfo — 1 страница 841×595 pt.

  • CI/SQLite и Lint: run 40028131721, все jobs success.

Не проверено

Реальный email provider и настоящие участники не использовались; dev deployment не выполнялся. Windows native Fontconfig несовместим с локальным runtime, поэтому native PDF проверен в Linux CI. Browser verification Angular + Django пройдена на синтетических данных. Второй CI/SQLite прогон также успешно завершен: run 40028131721. Все проверки PR зеленые.

Риски / migration

Миграция 0029 создает четыре новые таблицы и unique constraint, не меняет существующие записи. Требуются перезапуск Celery worker/beat и новые native Pango/Fontconfig пакеты (добавлены в Dockerfile и CI). Хранение PDF увеличивает БД. Падение worker при отправке не вызывает автоматического повторного письма: запись требует ручного повтора. Merge/deploy еще не выполнены.

Порядок выкладки на dev

Сначала merge этого PR и успешный Deploy: существующий dev-ci.yml применяет миграции и пересоздает web/celerys из одного образа; celerys запускает worker вместе с beat. Затем merge frontend PROCOLLAB-github/procollab#499. Сертификаты не активируются миграцией и не отправляются без запуска организатором.

@TThanos3000
TThanos3000 marked this pull request as ready for review October 23, 2026 22:01
@TThanos3000
TThanos3000 merged commit f77b604 into dev Oct 23, 2026
3 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