From 3a70364eef683ed350d127933660a515a3741728 Mon Sep 17 00:00:00 2001 From: Umbrix Dev Date: Fri, 6 Feb 2026 21:17:18 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5:=20DB=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20ENV=20=D0=B4=D0=BB=D1=8F=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Проблема:** - Реферальные API падали в dev режиме из-за хардкода DB подключения - Невозможно было запустить на локальном сервере без доступа к production БД **Решение:** - Вынесены DB credentials в ENV переменные: - DB_HOST, DB_USER, DB_PASSWORD, DB_NAME - Добавлена проверка isDbConfigured в API endpoints - Mock ответы для dev режима (когда DB не настроена) **Изменения:** - .env.example: добавлены DB переменные - .env.local: пустые DB переменные (dev mode) - /api/referral/track: graceful fallback без DB - /api/referral/stats: mock данные без DB **Результат:** - ✅ Dev сервер работает без production DB - ✅ Production будет использовать DB из ENV - ✅ Логи предупреждают о dev режиме - ✅ Реферальная система опциональна для разработки --- .env.example | 7 +++++++ app/api/referral/stats/route.ts | 28 +++++++++++++++++++++++----- app/api/referral/track/route.ts | 23 ++++++++++++++++++----- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/.env.example b/.env.example index 7a0a790..bf0b7af 100644 --- a/.env.example +++ b/.env.example @@ -21,3 +21,10 @@ NEXT_PUBLIC_TRIAL_DAYS=7 # Pricing (in cents for precision) NEXT_PUBLIC_MIN_PRICE=9900 NEXT_PUBLIC_CURRENCY=₽ + +# Database Configuration (for referral system) +# Leave empty to disable referral DB tracking (dev mode) +DB_HOST=193.168.175.128 +DB_USER=marzban_user +DB_PASSWORD=2CuopqFd0Y5V5n/qBM+eygOQb6aC8B8pACcdHjeVJsE= +DB_NAME=marzban_prod diff --git a/app/api/referral/stats/route.ts b/app/api/referral/stats/route.ts index 69fa321..3435401 100644 --- a/app/api/referral/stats/route.ts +++ b/app/api/referral/stats/route.ts @@ -4,14 +4,17 @@ import { NextRequest, NextResponse } from 'next/server'; import mysql from 'mysql2/promise'; -// Database connection config +// Database connection config from ENV const dbConfig = { - host: '193.168.175.128', - user: 'marzban_user', - password: '2CuopqFd0Y5V5n/qBM+eygOQb6aC8B8pACcdHjeVJsE=', - database: 'marzban_prod', + host: process.env.DB_HOST || '', + user: process.env.DB_USER || '', + password: process.env.DB_PASSWORD || '', + database: process.env.DB_NAME || '', }; +// Check if DB is configured +const isDbConfigured = dbConfig.host && dbConfig.user && dbConfig.database; + export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); @@ -24,6 +27,21 @@ export async function GET(request: NextRequest) { ); } + // Return mock data if DB not configured (dev mode) + if (!isDbConfigured) { + console.log('⚠️ Referral stats skipped: DB not configured'); + return NextResponse.json({ + success: true, + hasReferrals: false, + dev_mode: true, + stats: { + referral_count: 0, + bonus_days_earned: 0, + total_referrals_used: 0, + }, + }); + } + // Connect to database const connection = await mysql.createConnection(dbConfig); diff --git a/app/api/referral/track/route.ts b/app/api/referral/track/route.ts index 02030af..229c721 100644 --- a/app/api/referral/track/route.ts +++ b/app/api/referral/track/route.ts @@ -4,14 +4,17 @@ import { NextRequest, NextResponse } from 'next/server'; import mysql from 'mysql2/promise'; -// Database connection config +// Database connection config from ENV const dbConfig = { - host: '193.168.175.128', - user: 'marzban_user', - password: '2CuopqFd0Y5V5n/qBM+eygOQb6aC8B8pACcdHjeVJsE=', - database: 'marzban_prod', + host: process.env.DB_HOST || '', + user: process.env.DB_USER || '', + password: process.env.DB_PASSWORD || '', + database: process.env.DB_NAME || '', }; +// Check if DB is configured +const isDbConfigured = dbConfig.host && dbConfig.user && dbConfig.database; + export async function POST(request: NextRequest) { try { const body = await request.json(); @@ -24,6 +27,16 @@ export async function POST(request: NextRequest) { ); } + // Return mock success if DB not configured (dev mode) + if (!isDbConfigured) { + console.log('⚠️ Referral tracking skipped: DB not configured'); + return NextResponse.json({ + success: true, + message: 'Referral tracking disabled (dev mode)', + dev_mode: true, + }); + } + // Connect to database const connection = await mysql.createConnection(dbConfig);