From fcdd98c9cac680d2a647116579393bf81ebb6e34 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Wed, 19 Mar 2025 12:56:34 +0100 Subject: [PATCH] add phone & company name --- api/src/app/app.controller.ts | 10 ++++- api/src/app/app.service.ts | 31 +++++++++++++-- api/src/assets/contact.hbs | 6 ++- src/app/components/contact.component.ts | 53 ++++++++++++++++++++----- 4 files changed, 83 insertions(+), 17 deletions(-) diff --git a/api/src/app/app.controller.ts b/api/src/app/app.controller.ts index 52bb49c..63933bc 100644 --- a/api/src/app/app.controller.ts +++ b/api/src/app/app.controller.ts @@ -10,7 +10,13 @@ export class AppController { return { message: 'API is alive' }; } @Post() - async sendEMail(@Body() mailInfo: {name:string,email:string,message:string}): Promise { + async sendEMail(@Body() mailInfo: { + name: string, + email: string, + phone?: string, + company?: string, + message: string + }): Promise { return await this.appService.sendMail(mailInfo); } -} +} \ No newline at end of file diff --git a/api/src/app/app.service.ts b/api/src/app/app.service.ts index e571939..2aa2597 100644 --- a/api/src/app/app.service.ts +++ b/api/src/app/app.service.ts @@ -1,18 +1,38 @@ - import { BadRequestException, Injectable } from '@nestjs/common'; import { MailerService } from '@nestjs-modules/mailer'; -import { z,ZodError } from 'zod'; +import { z, ZodError } from 'zod'; + export const SenderSchema = z.object({ name: z.string().min(6, { message: 'Name must be at least 6 characters long' }), email: z.string().email({ message: 'Invalid email address' }), + phone: z.string() + .optional() + .refine( + (val) => { + if (!val) return true; // If no phone number provided, validation passes + // Validate US phone number format (various formats supported) + const usPhoneRegex = /^(\+?1\s?)?(\(\d{3}\)|\d{3})[\s.-]?\d{3}[\s.-]?\d{4}$/; + return usPhoneRegex.test(val); + }, + { message: 'Please enter a valid US phone number' } + ), + company: z.string().optional(), // Company is optional message: z.string().min(10, { message: 'Comments must be at least 10 characters long' }), }); + @Injectable() export class AppService { constructor( private mailerService: MailerService, ) {} - async sendMail(mailInfo: {name:string,email:string,message:string}): Promise { + + async sendMail(mailInfo: { + name: string, + email: string, + phone?: string, // Mark as optional with ? + company?: string, // Mark as optional with ? + message: string + }): Promise { try { SenderSchema.parse(mailInfo); } catch (error) { @@ -25,6 +45,7 @@ export class AppService { } throw error; } + await this.mailerService.sendMail({ to: 'andreas.knuth@gmail.com', from: `"Bay Area Affiliates, Inc." `, @@ -33,8 +54,10 @@ export class AppService { context: { name: mailInfo.name, email: mailInfo.email, + phone: mailInfo.phone || 'Not provided', + company: mailInfo.company || 'Not provided', message: mailInfo.message }, }); } -} +} \ No newline at end of file diff --git a/api/src/assets/contact.hbs b/api/src/assets/contact.hbs index 9ad2ace..225995a 100644 --- a/api/src/assets/contact.hbs +++ b/api/src/assets/contact.hbs @@ -2,7 +2,7 @@ - Neue Nachricht von {{name}} + New message from {{name}}