91 lines
2.6 KiB
TypeScript
91 lines
2.6 KiB
TypeScript
|
|
// API endpoint для получения статистики реферальной программы
|
||
|
|
// GET /api/referral/stats?username=xxx - возвращает статистику пользователя
|
||
|
|
|
||
|
|
import { NextRequest, NextResponse } from 'next/server';
|
||
|
|
import mysql from 'mysql2/promise';
|
||
|
|
|
||
|
|
// Database connection config
|
||
|
|
const dbConfig = {
|
||
|
|
host: '193.168.175.128',
|
||
|
|
user: 'marzban_user',
|
||
|
|
password: '2CuopqFd0Y5V5n/qBM+eygOQb6aC8B8pACcdHjeVJsE=',
|
||
|
|
database: 'marzban_prod',
|
||
|
|
};
|
||
|
|
|
||
|
|
export async function GET(request: NextRequest) {
|
||
|
|
try {
|
||
|
|
const { searchParams } = new URL(request.url);
|
||
|
|
const username = searchParams.get('username');
|
||
|
|
|
||
|
|
if (!username) {
|
||
|
|
return NextResponse.json(
|
||
|
|
{ success: false, error: 'Username is required' },
|
||
|
|
{ status: 400 }
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Connect to database
|
||
|
|
const connection = await mysql.createConnection(dbConfig);
|
||
|
|
|
||
|
|
try {
|
||
|
|
// Get user's referral stats
|
||
|
|
const [statsRows] = await connection.query(
|
||
|
|
'SELECT * FROM referrals WHERE username = ?',
|
||
|
|
[username]
|
||
|
|
);
|
||
|
|
|
||
|
|
if ((statsRows as any[]).length === 0) {
|
||
|
|
return NextResponse.json({
|
||
|
|
success: true,
|
||
|
|
hasReferrals: false,
|
||
|
|
stats: {
|
||
|
|
referral_count: 0,
|
||
|
|
bonus_days_earned: 0,
|
||
|
|
total_referrals_used: 0,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const stats = (statsRows as any[])[0];
|
||
|
|
|
||
|
|
// Get list of referred users
|
||
|
|
const [referredRows] = await connection.query(
|
||
|
|
`SELECT u.username, u.created_at, u.status
|
||
|
|
FROM referrals r
|
||
|
|
JOIN users u ON r.username = u.username
|
||
|
|
WHERE r.referrer_username = ?
|
||
|
|
ORDER BY r.created_at DESC`,
|
||
|
|
[username]
|
||
|
|
);
|
||
|
|
|
||
|
|
return NextResponse.json({
|
||
|
|
success: true,
|
||
|
|
hasReferrals: true,
|
||
|
|
stats: {
|
||
|
|
referral_count: stats.referral_count || 0,
|
||
|
|
bonus_days_earned: stats.bonus_days_earned || 0,
|
||
|
|
total_referrals_used: stats.total_referrals_used || 0,
|
||
|
|
created_at: stats.created_at,
|
||
|
|
updated_at: stats.updated_at,
|
||
|
|
},
|
||
|
|
referred_users: (referredRows as any[]).map((user: any) => ({
|
||
|
|
username: user.username,
|
||
|
|
created_at: user.created_at,
|
||
|
|
status: user.status,
|
||
|
|
})),
|
||
|
|
});
|
||
|
|
} finally {
|
||
|
|
await connection.end();
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Referral stats error:', error);
|
||
|
|
return NextResponse.json(
|
||
|
|
{
|
||
|
|
success: false,
|
||
|
|
error: error instanceof Error ? error.message : 'Unknown error',
|
||
|
|
},
|
||
|
|
{ status: 500 }
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|