✨ Реферальная система: БД, API, UI
**База данных:** - Создана таблица referrals в MariaDB (193.168.175.128) - Поля: username, referrer_username, referral_count, bonus_days_earned - Foreign keys к users таблице с CASCADE/SET NULL **API Endpoints:** - POST /api/referral/track - отслеживание новых рефералов - Автоматический расчёт бонусов: +7 дней за каждого - Milestone bonus: +30 дней за каждые 5 рефералов - Обновление expire даты реферера в users таблице - GET /api/referral/stats?username=xxx - статистика - Возвращает количество рефералов, бонусные дни - Список приглашённых пользователей со статусами **Интеграция:** - POST /api/create-user принимает referrerId параметр - Автоматический вызов /api/referral/track после создания юзера - Параметр ref из URL при активации trial **UI:** - /app/referral/page.tsx - страница статистики - 3 KPI карточки: рефералов, бонусных дней, milestone - Реферальная ссылка с кнопкой копирования - Список приглашённых юзеров с иконками статуса - Инфоблок о механике начисления бонусов **ReferralModal обновлён:** - Добавлена кнопка «Моя статистика» → /referral - Перенос Share/Copy кнопок на второй/третий план **Зависимости:** - mysql2@3.16.3 - для подключения к MariaDB **Логика бонусов:** - +7 дней за каждого успешного реферала - +30 дней бонус за каждые 5 рефералов (milestone) - Автоматическое обновление expire поля в users таблице - Сохранение всех бонусов в bonus_days_earned
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import { X, Copy, Share2, Gift, Users, Award } from 'lucide-react';
|
||||
import { X, Copy, Share2, Gift, Users, Award, BarChart3 } from 'lucide-react';
|
||||
import Link from 'next/link';
|
||||
|
||||
interface ReferralModalProps {
|
||||
isOpen: boolean;
|
||||
@@ -105,10 +106,20 @@ export default function ReferralModal({
|
||||
|
||||
{/* Action buttons */}
|
||||
<div className="space-y-3">
|
||||
<Link href="/referral">
|
||||
<button
|
||||
onClick={onClose}
|
||||
className="w-full flex items-center justify-center gap-3 px-6 py-4 rounded-xl font-semibold transition-all shadow-lg hover:opacity-90"
|
||||
style={{ background: 'var(--primary)', color: 'white' }}
|
||||
>
|
||||
<BarChart3 className="w-5 h-5" />
|
||||
Моя статистика
|
||||
</button>
|
||||
</Link>
|
||||
|
||||
<button
|
||||
onClick={onShare}
|
||||
className="w-full flex items-center justify-center gap-3 px-6 py-4 rounded-xl font-semibold transition-all shadow-lg hover:opacity-90"
|
||||
style={{ background: 'var(--primary)', color: 'white' }}
|
||||
className="w-full flex items-center justify-center gap-3 px-6 py-4 bg-slate-700 hover:bg-slate-600 rounded-xl font-semibold transition-all"
|
||||
>
|
||||
<Share2 className="w-5 h-5" />
|
||||
Поделиться с друзьями
|
||||
|
||||
Reference in New Issue
Block a user