shop
Version:
47 lines (39 loc) • 1.49 kB
text/typescript
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)
}
})