49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { NextApiRequest, NextApiResponse } from 'next';
|
|
import { connectDB } from '../utils/db';
|
|
import User from '../models/User';
|
|
import { verifyTelegramWebAppData } from '../utils/telegram';
|
|
|
|
export default async function handler(
|
|
req: NextApiRequest,
|
|
res: NextApiResponse
|
|
) {
|
|
if (req.method !== 'GET') {
|
|
return res.status(405).json({ message: 'Method not allowed' });
|
|
}
|
|
|
|
try {
|
|
// Проверяем данные Telegram WebApp
|
|
const initData = req.headers['x-telegram-init-data'] as string;
|
|
if (!initData) {
|
|
return res.status(401).json({ message: 'Unauthorized' });
|
|
}
|
|
|
|
const telegramData = await verifyTelegramWebAppData(initData);
|
|
if (!telegramData) {
|
|
return res.status(401).json({ message: 'Invalid Telegram data' });
|
|
}
|
|
|
|
// Подключаемся к базе данных
|
|
await connectDB();
|
|
|
|
// Получаем или создаем пользователя
|
|
let user = await User.findOne({ telegramId: telegramData.user.id });
|
|
|
|
if (!user) {
|
|
user = await User.create({
|
|
telegramId: telegramData.user.id,
|
|
username: telegramData.user.username || `user${telegramData.user.id}`,
|
|
level: 1,
|
|
experience: 0,
|
|
balance: 1000, // Начальный баланс для новых пользователей
|
|
achievements: [],
|
|
inventory: [],
|
|
});
|
|
}
|
|
|
|
res.status(200).json(user);
|
|
} catch (error) {
|
|
console.error('Error in user API:', error);
|
|
res.status(500).json({ message: 'Internal server error' });
|
|
}
|
|
}
|