Repository navigation
feat: автоматические сертификаты участников программы - #818
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что изменено
В управление программой добавлен 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 требует секретный токен.
Проверки
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. Сертификаты не активируются миграцией и не отправляются без запуска организатором.