Files
seminarhof-e2e-mrfgopoa/packages/functions/src/functions/auth.function.ts
2026-07-10 23:42:33 +02:00

37 lines
1012 B
TypeScript

import { z } from 'zod'
import { pikkuFunc } from '#pikku'
export const MeOutput = z.object({
userId: z.string(),
email: z.string(),
name: z.string(),
role: z.string(),
clients: z.array(z.object({
clientId: z.string(),
name: z.string().nullable(),
role: z.string(),
})),
})
export const me = pikkuFunc({
expose: true,
description: 'Returns the current session user with their org memberships.',
output: MeOutput,
func: async ({ kysely }, _input, { session }) => {
const user = await kysely
.selectFrom('user')
.where('id', '=', session.userId)
.select(['id as userId', 'email', 'name', 'role'])
.executeTakeFirstOrThrow()
const orgs = await kysely
.selectFrom('clientMember')
.innerJoin('client', 'client.clientId', 'clientMember.clientId')
.where('clientMember.userId', '=', session.userId)
.select(['client.clientId', 'client.name', 'clientMember.role'])
.execute()
return { ...user, clients: orgs }
},
})