feat: migrate Canvas and Groups API to Prisma ORM

This commit is contained in:
2026-04-26 14:37:12 +05:00
parent f9e35cb9e7
commit e040d8cacd
14 changed files with 183 additions and 223 deletions
+26 -35
View File
@@ -1,5 +1,5 @@
import { generateToken } from '~/server/utils/auth'
import { users } from '~/server/utils/db'
import { prisma } from '~/server/utils/prisma'
interface FirebaseUser {
localId: string
@@ -23,13 +23,9 @@ export default defineEventHandler(async (event) => {
throw createError({ statusCode: 500, message: 'Firebase API key not configured' })
}
// Verify token via Firebase Auth REST API
const verifyRes = await $fetch<any>(
`https://identitytoolkit.googleapis.com/v1/accounts:lookup?key=${apiKey}`,
{
method: 'POST',
body: { idToken }
}
{ method: 'POST', body: { idToken } }
).catch(() => null)
if (!verifyRes?.users?.[0]) {
@@ -37,48 +33,43 @@ export default defineEventHandler(async (event) => {
}
const fbUser: FirebaseUser = verifyRes.users[0]
const email = fbUser.email
const existing = users.get(email)
const username = fbUser.displayName || email.split('@')[0]
const userId = fbUser.localId
let role = 'user'
let userId = fbUser.localId
if (existing) {
// Update existing
users.set(email, {
...existing,
const user = await prisma.user.upsert({
where: { email },
update: { username },
create: {
id: userId,
email,
username: fbUser.displayName || email.split('@')[0]
})
role = existing.role || 'user'
} else {
// Create new user
users.set(email, {
id: userId,
email,
username: fbUser.displayName || email.split('@')[0],
username,
password: 'firebase-managed',
role: 'user'
})
}
role: 'user',
profile: {
create: {
displayName: username,
avatar: fbUser.photoUrl || `https://api.dicebear.com/7.x/avataaars/svg?seed=${userId}`
}
}
}
})
const token = generateToken({
id: userId,
email,
username: fbUser.displayName || email.split('@')[0],
role
id: user.id,
email: user.email,
username: user.username,
role: user.role
})
return {
message: 'Google sign-in successful',
token,
user: {
id: userId,
email,
username: fbUser.displayName || email.split('@')[0],
role,
id: user.id,
email: user.email,
username: user.username,
role: user.role,
photoUrl: fbUser.photoUrl
}
}