fix: dirty type safe job definitions

This commit is contained in:
Mythie
2024-06-20 11:36:16 +10:00
parent 6f8d8b908d
commit 93ea3e2644
3 changed files with 32 additions and 18 deletions

View File

@ -7,6 +7,6 @@ import { SEND_SIGNING_EMAIL_JOB_DEFINITION } from './definitions/send-signing-em
* triggering jobs. * triggering jobs.
*/ */
export const jobsClient = new JobClient([ export const jobsClient = new JobClient([
SEND_CONFIRMATION_EMAIL_JOB_DEFINITION,
SEND_SIGNING_EMAIL_JOB_DEFINITION, SEND_SIGNING_EMAIL_JOB_DEFINITION,
SEND_CONFIRMATION_EMAIL_JOB_DEFINITION,
] as const); ] as const);

View File

@ -3,16 +3,20 @@ import { z } from 'zod';
import { sendConfirmationToken } from '../../server-only/user/send-confirmation-token'; import { sendConfirmationToken } from '../../server-only/user/send-confirmation-token';
import type { JobDefinition } from '../client/_internal/job'; import type { JobDefinition } from '../client/_internal/job';
const SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_ID = 'send.signup.confirmation.email';
const SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_SCHEMA = z.object({
email: z.string().email(),
force: z.boolean().optional(),
});
export const SEND_CONFIRMATION_EMAIL_JOB_DEFINITION = { export const SEND_CONFIRMATION_EMAIL_JOB_DEFINITION = {
id: 'send.signup.confirmation.email', id: SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_ID,
name: 'Send Confirmation Email', name: 'Send Confirmation Email',
version: '1.0.0', version: '1.0.0',
trigger: { trigger: {
name: 'send.signup.confirmation.email', name: SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_ID,
schema: z.object({ schema: SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_SCHEMA,
email: z.string().email(),
force: z.boolean().optional(),
}),
}, },
handler: async ({ payload }) => { handler: async ({ payload }) => {
await sendConfirmationToken({ await sendConfirmationToken({
@ -20,4 +24,7 @@ export const SEND_CONFIRMATION_EMAIL_JOB_DEFINITION = {
force: payload.force, force: payload.force,
}); });
}, },
} as const satisfies JobDefinition; } as const satisfies JobDefinition<
typeof SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_ID,
z.infer<typeof SEND_CONFIRMATION_EMAIL_JOB_DEFINITION_SCHEMA>
>;

View File

@ -23,20 +23,24 @@ import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs';
import { ZRequestMetadataSchema } from '../../universal/extract-request-metadata'; import { ZRequestMetadataSchema } from '../../universal/extract-request-metadata';
import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs';
import { renderCustomEmailTemplate } from '../../utils/render-custom-email-template'; import { renderCustomEmailTemplate } from '../../utils/render-custom-email-template';
import type { JobDefinition } from '../client/_internal/job'; import { type JobDefinition } from '../client/_internal/job';
const SEND_SIGNING_EMAIL_JOB_DEFINITION_ID = 'send.signing.requested.email';
const SEND_SIGNING_EMAIL_JOB_DEFINITION_SCHEMA = z.object({
userId: z.number(),
documentId: z.number(),
recipientId: z.number(),
requestMetadata: ZRequestMetadataSchema.optional(),
});
export const SEND_SIGNING_EMAIL_JOB_DEFINITION = { export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
id: 'send.signing.requested.email', id: SEND_SIGNING_EMAIL_JOB_DEFINITION_ID,
name: 'Send Signing Email', name: 'Send Signing Email',
version: '1.0.0', version: '1.0.0',
trigger: { trigger: {
name: 'send.signing.requested.email', name: SEND_SIGNING_EMAIL_JOB_DEFINITION_ID,
schema: z.object({ schema: SEND_SIGNING_EMAIL_JOB_DEFINITION_SCHEMA,
userId: z.number(),
documentId: z.number(),
recipientId: z.number(),
requestMetadata: ZRequestMetadataSchema.optional(),
}),
}, },
handler: async ({ payload, io }) => { handler: async ({ payload, io }) => {
const { userId, documentId, recipientId, requestMetadata } = payload; const { userId, documentId, recipientId, requestMetadata } = payload;
@ -161,4 +165,7 @@ export const SEND_SIGNING_EMAIL_JOB_DEFINITION = {
}); });
}); });
}, },
} as const satisfies JobDefinition; } as const satisfies JobDefinition<
typeof SEND_SIGNING_EMAIL_JOB_DEFINITION_ID,
z.infer<typeof SEND_SIGNING_EMAIL_JOB_DEFINITION_SCHEMA>
>;