import { Request, Response } from 'express'; import mailer from '../../../services/mailer'; import { formatter } from '../../../utils'; import { ThemedCombo } from '../rate/controller'; type OrderBody = { combo?: ThemedCombo; date?: string; info: { date: string; memberQuantity: number; price: number; quest: string; rate?: string; time?: string; }; name: string; page?: 'birthday' | 'graduation' | 'master-classes' | 'outdoors' | 'show-programs'; phoneNumber: string; rate?: { price?: number; pricePerPerson?: number; title: string; }; text?: string; type: 'calculator' | 'callback' | 'maintenance' | 'newRate' | 'quest-calculator' | 'themed-combo'; }; export const getNewOrder = async (req: Request, res: Response) => { const { combo, date, info, name, page, phoneNumber, rate, text, type, } = req.body; const getSubject = () => { switch (type) { case 'callback': return 'Заявка на звонок'; case 'newRate': return 'Заявка на комбо'; case 'calculator': return 'Калькулятор праздника'; case 'quest-calculator': return 'Калькулятор квеста'; case 'themed-combo': return 'Заявка на тематическое комбо'; case 'maintenance': return 'Заявка на сопровождение детей'; default: return 'Нужно связаться'; } }; const getHtml = () => { const getPageTitle = () => { if (page === 'birthday') { return 'День рождения'; } if (page === 'graduation') { return 'Выпускной'; } if (page === 'master-classes') { return 'Мастер-классы'; } if (page === 'show-programs') { return 'Шоу-программы'; } return 'Выездной праздник'; }; switch (type) { case 'callback': return `

Имя: ${name}

Телефон: ${phoneNumber}

`; case 'newRate': return `

Имя: ${name}

Телефон: ${phoneNumber}

Страница: ${getPageTitle()}

Пакет: ${rate?.title}

Цена пакета: ${formatter.format(rate?.price || rate?.pricePerPerson || 0)}

`; case 'calculator': return `

Имя: ${name}

Телефон: ${phoneNumber}

Страница: ${getPageTitle()}

Комбо: ${info.rate}

Квест: ${info.quest}

Кол-во людей: ${info.memberQuantity}

Дата: ${info.date}

Стоимость: ${formatter.format(info.price)}

`; case 'quest-calculator': return `

Имя: ${name}

Телефон: ${phoneNumber}

Квест: ${info.quest}

Кол-во людей: ${info.memberQuantity}

Дата: ${info.date}

Время: ${info.time}

Стоимость: ${formatter.format(info.price)}

`; case 'themed-combo': return `

Имя: ${name}

Телефон: ${phoneNumber}

Комбо: ${combo?.title}

Стоимость: ${formatter.format(combo?.price || 0)}

`; case 'maintenance': return `

Имя: ${name}

Телефон: ${phoneNumber}

Формат мероприятия: ${text}

Дата: ${date}

`; default: return 'ошибка'; } }; async function main() { // eslint-disable-next-line @typescript-eslint/no-shadow const info = await mailer.sendMail({ from: '"Arkids Test" ', html: getHtml(), subject: getSubject(), to: 'ksv741-test@yandex.ru', }); switch (type) { case 'callback': // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо с просьбой перезвонить: %s \x1b[0m', info.messageId); break; case 'newRate': // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо с заявкой на комбо: %s\x1b[0m', info.messageId); break; case 'calculator': // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо с калькулятором праздника: %s\x1b[0m', info.messageId); break; case 'quest-calculator': // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо с калькулятором праздника: %s\x1b[0m', info.messageId); break; case 'themed-combo': // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо с заявкой на тематическое комбо: %s\x1b[0m', info.messageId); break; case 'maintenance': // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо с заявкой на сопровождение детей: %s\x1b[0m', info.messageId); break; default: // eslint-disable-next-line no-console console.log('\x1b[33m Отправлено письмо: %s\x1b[0m', info.messageId); } } main() .then(() => res.status(200).json({})) .catch((e) => { // eslint-disable-next-line no-console console.log('Mailer error', e); }); };