mirror of
https://github.com/documenso/documenso.git
synced 2025-11-14 08:42:12 +10:00
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { getHighestOrganisationRoleInGroup } from '@documenso/lib/utils/organisations';
|
|
import { prisma } from '@documenso/prisma';
|
|
|
|
import { authenticatedProcedure } from '../trpc';
|
|
import {
|
|
ZGetOrganisationsRequestSchema,
|
|
ZGetOrganisationsResponseSchema,
|
|
} from './get-organisations.types';
|
|
|
|
export const getOrganisationsRoute = authenticatedProcedure
|
|
// .meta(getOrganisationsMeta)
|
|
.input(ZGetOrganisationsRequestSchema)
|
|
.output(ZGetOrganisationsResponseSchema)
|
|
.query(async ({ ctx }) => {
|
|
const { user } = ctx;
|
|
|
|
return getOrganisations({ userId: user.id });
|
|
});
|
|
|
|
export const getOrganisations = async ({ userId }: { userId: number }) => {
|
|
const organisations = await prisma.organisation.findMany({
|
|
where: {
|
|
members: {
|
|
some: {
|
|
userId,
|
|
},
|
|
},
|
|
},
|
|
include: {
|
|
members: {
|
|
where: {
|
|
userId,
|
|
},
|
|
},
|
|
groups: {
|
|
where: {
|
|
organisationGroupMembers: {
|
|
some: {
|
|
organisationMember: {
|
|
userId,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
return organisations.map(({ groups, ...organisation }) => {
|
|
const currentOrganisationRole = getHighestOrganisationRoleInGroup(groups);
|
|
|
|
return {
|
|
...organisation,
|
|
currentOrganisationRole: currentOrganisationRole,
|
|
currentMemberId: organisation.members[0].id,
|
|
};
|
|
});
|
|
};
|