You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.3 KiB
61 lines
1.3 KiB
// server/api/auth/me.get.ts
|
|
|
|
/**
|
|
* GET /api/auth/me
|
|
*
|
|
* Get current authenticated user
|
|
*
|
|
* Response:
|
|
* {
|
|
* "id": "uuid",
|
|
* "experimentaId": "cidaas-sub",
|
|
* "email": "user@example.com",
|
|
* "firstName": "Max",
|
|
* "lastName": "Mustermann",
|
|
* ...
|
|
* }
|
|
*
|
|
* Returns 401 if not authenticated
|
|
*/
|
|
|
|
import { eq } from 'drizzle-orm'
|
|
import { users } from '../../database/schema'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
// 1. Require authentication (throws 401 if not logged in)
|
|
const { user: sessionUser } = await requireUserSession(event)
|
|
|
|
// 2. Fetch fresh user data from database
|
|
const db = useDatabase()
|
|
const user = await db.query.users.findFirst({
|
|
where: eq(users.id, sessionUser.id),
|
|
})
|
|
|
|
if (!user) {
|
|
throw createError({
|
|
statusCode: 404,
|
|
statusMessage: 'User not found',
|
|
})
|
|
}
|
|
|
|
// 3. Return user profile (exclude sensitive fields if any)
|
|
return {
|
|
id: user.id,
|
|
experimentaId: user.experimentaId,
|
|
email: user.email,
|
|
firstName: user.firstName,
|
|
lastName: user.lastName,
|
|
phone: user.phone,
|
|
|
|
// Billing address
|
|
salutation: user.salutation,
|
|
dateOfBirth: user.dateOfBirth,
|
|
street: user.street,
|
|
postCode: user.postCode,
|
|
city: user.city,
|
|
countryCode: user.countryCode,
|
|
|
|
createdAt: user.createdAt,
|
|
updatedAt: user.updatedAt,
|
|
}
|
|
})
|
|
|