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 } }, })