📄 Техническое задание
Проект: Бэкенд для сайта продажи билетов на концерт
Фронтенд: Лендинг почти готов (html,css,js)
🔧 Общие требования:
1. Реализовать оплату через:
• 💳 Visa/Mastercard (через CloudPayments / PayBox / Stripe)
• 🟧 Kaspi Pay
2. После успешной оплаты:
• Генерация уникального билета (PDF/PNG)
• QR-код и штрихкод на билете
• Скачивание билета
• Отправка билета на email пользователя
3. Система сканирования QR-кодов на входе:
• Проверка билета (первый вход / повторный / не найден)
• Уведомление об успешном первом входе
4. Отдельный интерфейс для проверяющего:
• Авторизация
• Доступ к сканеру QR через камеру телефона
5. Админ-панель для просмотра и управления продажами
⸻
🔒 Авторизация и роли:
• admin — доступ к панели управления
• scanner — доступ к сканеру QR
• client — только покупка билета
⸻
💳 Оплата
Visa / Mastercard:
• Интеграция через CloudPayments / PayBox (выбор зависит от бюджета и страны)
• Генерация заказа → редирект на платёж → callback подтверждения → генерация билета
Kaspi Pay:
• Интеграция через Kaspi
⸻
🎟️ Генерация билета:
После оплаты:
• Сгенерировать PDF-файл с данными:
• Название концерта
• Имя покупателя (если указано)
• Уникальный QR-код (hash/id билета)
• Штрих-код (EAN13 или Code128)
• Дата и время концерта
• ID билета
• Сохранить PDF-файл
• Добавить ссылку на скачивание на фронте
• Отправить на email
⸻
📧 Отправка email:
• Использовать SMTP или SendGrid
• Письмо с благодарностью и вложенным билетом (или ссылкой)
• Поддержка HTML-шаблона письма
⸻
📲 Сканер QR-кодов (для входа):
Интерфейс сканера:
• Веб-интерфейс, доступный по логину/паролю (роль: scanner)
• Поддержка камеры телефона
• При сканировании:
• ✅ Если билет не использован: «Успешно», зелёная подсветка, запись времени входа
• ❌ Если уже использован: «Уже использован», красная подсветка
• ❌ Не найден: «Билет не найден»
⸻
📊 Админ-панель:
Функционал:
• Список всех заказов
• Email, дата, сумма, статус оплаты
• Список всех билетов
• Статус: использован / не использован
• Поиск по email, дате, номеру заказа
• Статистика:
• Сколько билетов продано
• Общая сумма
• Таймлайн покупок
• Возможность экспорта в Excel/CSV
⸻
🗃️ База данных (минимум):
users (
id, email, password, role
)
orders (
id, user_id, amount, status, created_at
)
tickets (
id, order_id, qr_hash, barcode, used, used_at
)
⸻
🧑💻 Технологии (по согласованию):
• Backend: Node.js (Express) / Django / FastAPI
• БД: PostgreSQL / MongoDB
• QR: qrcode, pyqrcode, bwip-js, python-barcode
• Email: Nodemailer / Django SMTP / SendGrid
• PDF: pdfkit / reportlab
⸻
⚙️ Дополнительно:
• Все данные должны храниться в безопасной базе
• Все QR-коды должны быть уникальны и зашифрованы
• Логи входа через QR обязателен
• Безопасность и защита от повторного входа (дубликатов)