feat: migrate Canvas and Groups API to Prisma ORM
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user