37 lines
1012 B
TypeScript
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 }
|
|
},
|
|
})
|