Files
documenso/packages/trpc/server/organisation-router/get-organisation-quota-flags.ts
T
2026-06-08 14:14:22 +10:00

56 lines
1.7 KiB
TypeScript

import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { computeQuotaFlags } from '@documenso/lib/server-only/rate-limit/compute-quota-flags';
import { currentMonthlyPeriod } from '@documenso/lib/universal/monthly-period';
import { buildOrganisationWhereQuery } from '@documenso/lib/utils/organisations';
import { prisma } from '@documenso/prisma';
import { authenticatedProcedure } from '../trpc';
import {
ZGetOrganisationQuotaFlagsRequestSchema,
ZGetOrganisationQuotaFlagsResponseSchema,
} from './get-organisation-quota-flags.types';
export const getOrganisationQuotaFlagsRoute = authenticatedProcedure
.input(ZGetOrganisationQuotaFlagsRequestSchema)
.output(ZGetOrganisationQuotaFlagsResponseSchema)
.query(async ({ input, ctx }) => {
const { organisationId } = input;
const userId = ctx.user.id;
ctx.logger.info({
input: {
organisationId,
},
});
// Any member of the organisation may view quota usage flags.
const organisation = await prisma.organisation.findFirst({
where: buildOrganisationWhereQuery({
organisationId,
userId,
}),
include: {
organisationClaim: true,
monthlyStats: {
where: {
period: currentMonthlyPeriod(),
},
},
},
});
if (!organisation) {
throw new AppError(AppErrorCode.NOT_FOUND, {
message: 'Organisation not found',
});
}
return computeQuotaFlags({
quotas: {
documentQuota: organisation.organisationClaim.documentQuota,
emailQuota: organisation.organisationClaim.emailQuota,
apiQuota: organisation.organisationClaim.apiQuota,
},
usage: organisation.monthlyStats[0] ?? undefined,
});
});