diff --git a/server/src/lib/notifications/templates/email-templates.js b/server/src/lib/notifications/templates/email-templates.js new file mode 100644 index 0000000..65c5790 --- /dev/null +++ b/server/src/lib/notifications/templates/email-templates.js @@ -0,0 +1,96 @@ +function baseLayout(title, body) { + return ` + +
Craftshop — магазин handmade изделий
+Ваш заказ #${orderId.slice(0, 8)} успешно создан.
+Товаров: ${itemsCount} | Сумма: ${total} ₽
+Мы сообщим вам об изменениях статуса.
+ ` + return { subject: 'Заказ создан', html: baseLayout('Заказ создан', body) } +} + +export function renderOrderStatusChangedEmail({ orderId, oldStatus, newStatus }) { + const statusLabels = { + DRAFT: 'Черновик', + PENDING_PAYMENT: 'Ожидает оплаты', + IN_PROGRESS: 'В работе', + READY_FOR_PICKUP: 'Готов к выдаче', + SHIPPED: 'Отправлен', + DONE: 'Выполнен', + CANCELLED: 'Отменён', + } + const oldLabel = statusLabels[oldStatus] || oldStatus + const newLabel = statusLabels[newStatus] || newStatus + const body = ` +Статус заказа #${orderId.slice(0, 8)} изменён.
+${oldLabel} → ${newLabel}
+ ` + return { subject: `Статус заказа изменён — ${newLabel}`, html: baseLayout('Статус заказа изменён', body) } +} + +export function renderOrderMessageEmail({ orderId, preview }) { + const truncated = preview.length > 200 ? preview.slice(0, 197) + '...' : preview + const body = ` +Новое сообщение к заказу #${orderId.slice(0, 8)}:
+Ответьте в личном кабинете.
+ ` + return { subject: 'Новое сообщение к заказу', html: baseLayout('Новое сообщение', body) } +} + +export function renderPaymentStatusChangedEmail({ orderId, paymentStatus }) { + const statusLabels = { + pending: 'Ожидает', + confirmed: 'Подтверждён', + rejected: 'Отклонён', + } + const label = statusLabels[paymentStatus] || paymentStatus + const body = ` +Статус оплаты заказа #${orderId.slice(0, 8)}: ${label}.
+ ` + return { subject: `Оплата заказа — ${label}`, html: baseLayout('Оплата заказа', body) } +} + +export function renderAdminOrderCreatedEmail({ orderId, userEmail, totalCents, itemsCount }) { + const total = (totalCents / 100).toLocaleString('ru-RU') + const body = ` +Новый заказ #${orderId.slice(0, 8)} от ${userEmail}.
+Товаров: ${itemsCount} | Сумма: ${total} ₽
+ ` + return { subject: 'Новый заказ', html: baseLayout('Новый заказ', body) } +} + +export function renderAdminNewReviewEmail({ rating, text, productTitle, userName }) { + const stars = '★'.repeat(rating) + '☆'.repeat(5 - rating) + const body = ` +Новый отзыв ${stars} на товар ${productTitle} от ${userName}.
+ ${text ? `Проверьте отзыв в админ-панели.
+ ` + return { subject: 'Новый отзыв', html: baseLayout('Новый отзыв', body) } +} + +export function renderAuthCodeEmail({ code }) { + const body = ` +Ваш код входа: ${code}
+Если это были не вы — просто проигнорируйте письмо.
+ ` + return { subject: 'Код входа', html: baseLayout('Код входа', body) } +}