diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-11-24 20:00:08 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-27 14:47:51 +0100 |
| commit | f111685c5886f3e77edfd3621c98d8ac1b9bcce4 (patch) | |
| tree | 62a541fe3afeb64bf745443706fbfb02e96c5230 /src/services/graphql/mutators/send-email.ts | |
| parent | bee515641cb144be9a855ff2cac258d2fedab21d (diff) | |
refactor(services, types): reorganize GraphQL fetchers and data types
The Typescript mapped types was useful for autocompletion in fetchers
but their are harder to maintain. I think it's better to keep each
query close to its fetcher to have a better understanding of the
fetched data. So I:
* colocate queries with their own fetcher
* colocate mutations with their own mutator
* remove Typescript mapped types for queries and mutations
* move data convertors inside graphql services
* rename most of data types and fetchers
Diffstat (limited to 'src/services/graphql/mutators/send-email.ts')
| -rw-r--r-- | src/services/graphql/mutators/send-email.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/services/graphql/mutators/send-email.ts b/src/services/graphql/mutators/send-email.ts new file mode 100644 index 0000000..45b6fca --- /dev/null +++ b/src/services/graphql/mutators/send-email.ts @@ -0,0 +1,49 @@ +import { fetchGraphQL, getGraphQLUrl } from 'src/utils/helpers'; + +type SentEmail = { + clientMutationId: string; + message: string; + origin: string; + replyTo: string; + sent: boolean; +}; + +type SendEmailResponse = { + sendEmail: SentEmail; +}; + +const sendMailMutation = `mutation SendEmail($body: String, $clientMutationId: String, $replyTo: String, $subject: String) { + sendEmail( + input: {body: $body, clientMutationId: $clientMutationId, replyTo: $replyTo, subject: $subject} + ) { + clientMutationId + message + origin + replyTo + sent + to + } +}`; + +export type SendMailInput = { + body: string; + clientMutationId: string; + replyTo: string; + subject: string; +}; + +/** + * Send an email using GraphQL API. + * + * @param {SendMailInput} data - The mail data. + * @returns {Promise<SentEmail>} The mutation response. + */ +export const sendMail = async (data: SendMailInput): Promise<SentEmail> => { + const response = await fetchGraphQL<SendEmailResponse>({ + query: sendMailMutation, + url: getGraphQLUrl(), + variables: { ...data }, + }); + + return response.sendEmail; +}; |
