import z from 'zod'; import { serviceRequest, serviceResponse, } from '../interfaces/common'; import { source } from './SourceService'; import { organization } from './OrganizationService'; export interface EmailService { /* Source */ sendSourceCreated(request: SendSourceCreatedEmailRequest):Promise; sendSourceImported(request: SendSourceImportedEmailRequest): Promise; /* Organization */ sendInviteToOrganization(request: SendInviteToOrganizationEmailRequest): Promise; } /** ****************************************************************************** * Send Source Created Email ******************************************************************************* */ export const sendSourceCreatedEmailParams = z.object({ toAddress: z.string(), source, }); export const sendSourceCreatedEmailRequest = serviceRequest.merge( z.object({ params: sendSourceCreatedEmailParams, }), ); export const sendSourceCreatedEmailResponse = serviceResponse.merge( z.object({ success: z.boolean().optional(), }), ); export type SendSourceCreatedEmailParams = z.infer; export type SendSourceCreatedEmailRequest = z.infer; export type SendSourceCreatedEmailResponse = z.infer; /** ****************************************************************************** * Send Source Imported Email ******************************************************************************* */ export const sendSourceImportedEmailParams = z.object({ toAddress: z.string(), source, }); export const sendSourceImportedEmailRequest = serviceRequest.merge( z.object({ params: sendSourceImportedEmailParams, }), ); export const sendSourceImportedEmailResponse = serviceResponse.merge( z.object({ success: z.boolean().optional(), }), ); export type SendSourceImportedEmailParams = z.infer; export type SendSourceImportedEmailRequest = z.infer; export type SendSourceImportedEmailResponse = z.infer; /** ****************************************************************************** * Send Invite to Organization ******************************************************************************* */ export const sendInviteToOrganizationEmailParams = z.object({ toAddress: z.string(), inviteeExists: z.boolean(), inviterFirstName: z.string(), inviterLastName: z.string(), organization, }); export const sendInviteToOrganizationEmailRequest = serviceRequest.merge( z.object({ params: sendInviteToOrganizationEmailParams, }), ); export const sendInviteToOrganizationEmailResponse = serviceResponse.merge( z.object({ success: z.boolean().optional(), }), ); export type SendInviteToOrganizationEmailParams = z.infer; export type SendInviteToOrganizationEmailRequest = z.infer; export type SendInviteToOrganizationEmailResponse = z.infer;