mirror of
https://gitlab.com/foxixus/neomovies.git
synced 2025-10-28 01:48:50 +05:00
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
|
|
import { NextResponse } from 'next/server';
|
|||
|
|
import { getServerSession } from 'next-auth';
|
|||
|
|
import { authOptions } from '@/lib/auth';
|
|||
|
|
import { User } from '@/models';
|
|||
|
|
import { connectDB } from '@/lib/db';
|
|||
|
|
|
|||
|
|
export async function POST(req: Request) {
|
|||
|
|
try {
|
|||
|
|
const session = await getServerSession(authOptions);
|
|||
|
|
|
|||
|
|
if (!session?.user?.isAdmin) {
|
|||
|
|
return NextResponse.json(
|
|||
|
|
{ error: 'Доступ запрещен' },
|
|||
|
|
{ status: 403 }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const { userId } = await req.json();
|
|||
|
|
|
|||
|
|
await connectDB();
|
|||
|
|
|
|||
|
|
const targetUser = await User.findById(userId);
|
|||
|
|
if (!targetUser) {
|
|||
|
|
return NextResponse.json(
|
|||
|
|
{ error: 'Пользователь не найден' },
|
|||
|
|
{ status: 404 }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Проверяем, что это не последний администратор
|
|||
|
|
if (targetUser.isAdmin) {
|
|||
|
|
const adminCount = await User.countDocuments({ isAdmin: true });
|
|||
|
|
if (adminCount <= 1) {
|
|||
|
|
return NextResponse.json(
|
|||
|
|
{ error: 'Нельзя отозвать права у последнего администратора' },
|
|||
|
|
{ status: 400 }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Переключаем статус администратора
|
|||
|
|
targetUser.isAdmin = !targetUser.isAdmin;
|
|||
|
|
await targetUser.save();
|
|||
|
|
|
|||
|
|
return NextResponse.json({
|
|||
|
|
success: true,
|
|||
|
|
isAdmin: targetUser.isAdmin,
|
|||
|
|
});
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Error toggling admin status:', error);
|
|||
|
|
return NextResponse.json(
|
|||
|
|
{ error: 'Произошла ошибка при изменении прав администратора' },
|
|||
|
|
{ status: 500 }
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|