60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
import prisma from '@/lib/prisma';
|
|
import { NextResponse } from 'next/server';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const users = await prisma.user.findMany({
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
username: true,
|
|
mobile: true,
|
|
roles: true,
|
|
createdAt: true,
|
|
_count: {
|
|
select: { countings: true }
|
|
}
|
|
},
|
|
orderBy: { createdAt: 'desc' }
|
|
});
|
|
|
|
// Parse roles
|
|
const parsedUsers = users.map(user => {
|
|
let parsedRoles = user.roles;
|
|
if (typeof parsedRoles === 'string') {
|
|
try { parsedRoles = JSON.parse(parsedRoles); } catch (e) { parsedRoles = null; }
|
|
}
|
|
return {
|
|
...user,
|
|
roles: Array.isArray(parsedRoles) ? parsedRoles : ['COUNTER']
|
|
};
|
|
});
|
|
|
|
return NextResponse.json(parsedUsers);
|
|
} catch (error) {
|
|
console.error('Fetch users error:', error);
|
|
return NextResponse.json({ error: 'خطا در دریافت کاربران' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
export async function PUT(req) {
|
|
try {
|
|
const { id, roles } = await req.json();
|
|
|
|
if (!id || !roles) {
|
|
return NextResponse.json({ error: 'اطلاعات ناقص است' }, { status: 400 });
|
|
}
|
|
|
|
const updated = await prisma.user.update({
|
|
where: { id: parseInt(id) },
|
|
data: { roles: JSON.stringify(roles) },
|
|
select: { id: true, roles: true }
|
|
});
|
|
|
|
return NextResponse.json({ message: 'نقشهای کاربر بروزرسانی شد', user: updated });
|
|
} catch (error) {
|
|
console.error('Update user error:', error);
|
|
return NextResponse.json({ error: 'خطا در بروزرسانی کاربر' }, { status: 500 });
|
|
}
|
|
}
|