import { addOrganizationWords, consumeOrganizationWords, getOrganizationBalance } from 'services/words' import { authorize } from 'utils/authorization' import { lfunction } from 'utils/aws' import { HttpError } from 'utils/error' import { deserialize } from 'utils/http' import { z } from 'zod' export const balance = lfunction(async (event) => { const authorization = await authorize(event) if (!authorization.organizationIdentity) { throw new Error('Organization not found') } const balance = await getOrganizationBalance(authorization.organizationIdentity) return { balance } }) const zAddWord = z.object({ id: z.string(), words: z.number(), expiration: z.date().optional(), }) export const addWords = lfunction(async (event) => { const authorization = await authorize(event) if (authorization.role !== 'admin') { throw new HttpError(403, 'Forbidden') } if (!authorization.organizationIdentity) { throw new Error('Organization not found') } const addWordsPayload = deserialize(event, zAddWord) if (addWordsPayload.words > 0) { await addOrganizationWords({ id: addWordsPayload.id, organizationIdentity: authorization.organizationIdentity, words: addWordsPayload.words, expiration: addWordsPayload.expiration, }) } else { await consumeOrganizationWords(authorization.organizationIdentity, addWordsPayload.words) } })