diff --git a/src/pages/api/newsletter/subscribe.ts b/src/pages/api/newsletter/subscribe.ts index c5a7290..485784c 100644 --- a/src/pages/api/newsletter/subscribe.ts +++ b/src/pages/api/newsletter/subscribe.ts @@ -4,7 +4,8 @@ import * as yup from 'yup' import { settle } from '../../../utils/promise.utils' const formSchema = yup.object().shape({ - name: yup.string().optional(), + firstName: yup.string().optional(), + lastName: yup.string().optional(), email: yup.string().email().required(), }) @@ -40,13 +41,29 @@ const isSubscribed = async ( return [!!subscription, subscription] } -const createContact = async (client: Odoo, name: string, email: string) => { - let [contact] = await client.search('mailing.contact', ['email', '=', email]) +const createContact = async ( + client: Odoo, + payload: { + firstName?: string + lastName?: string + email: string + }, +) => { + const name = + [payload.firstName, payload.lastName].join(' ').trim() || payload.email + + let [contact] = await client.search('mailing.contact', [ + 'email', + '=', + payload.email, + ]) if (!contact) { contact = await client.create('mailing.contact', { name: name, - email: email, + email: payload.email, + x_first_name: payload.firstName, + x_last_name: payload.lastName, }) } @@ -96,11 +113,7 @@ export default async function handler( }) } - const contact = await createContact( - client, - payload.name || payload.email, - payload.email, - ) + const contact = await createContact(client, payload) await subscribe(client, contact, ODOO_MAILING_LIST_ID) res.status(200).json({ diff --git a/src/services/api.service.ts b/src/services/api.service.ts index 70b2985..372f1e8 100644 --- a/src/services/api.service.ts +++ b/src/services/api.service.ts @@ -80,13 +80,17 @@ export class ApiService { return { data: { posts: [], blocks: [] }, errors: JSON.stringify(e) } }) - subscribeToMailingList = async (email: string, name?: string) => { + subscribeToMailingList = async (payload: { + email: string + firstName?: string + lastName?: string + }) => { const res = await fetch('/api/newsletter/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ email, name }), + body: JSON.stringify(payload), }) return res.json()