Вынесите формирование письма в buildOrderEmailBody: функция получает товары и готовую сумму, возвращает строку и не отправляет email. Ошибку отправки обрабатывайте отдельно.
функция buildOrderEmailBody(items []Item, totalPrice float64) строка {
Вынесите формирование письма в buildOrderEmailBody: функция получает товары и готовую сумму, возвращает строку и не отправляет email. Ошибку отправки обрабатывайте отдельно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
функция buildOrderEmailBody(items []Item, totalPrice float64) строка { body := "Спасибо за ваш заказ!\n\n" body += "Вот товары в вашем заказе:\n"
for _,
}
func CreateOrder(customerEmail string) { totalPrice := ListAndCalculateVAT()
orderDetails := "Спасибо за ваш заказ!\n\n"
orderDetails += "Вот товары в вашем заказе:\n"
for _, item := range items {
orderDetails += fmt.Sprintf("- %s: $%.2f\n", item.NameOfProduct, item.PriceOfProduct)
}
orderDetails += fmt.Sprintf("\nОбщая сумма (с учетом НДС): $%.2f\n", totalPrice)
order = Order{Items: items, EmailSent: false}
subject := "Подтверждение вашего заказа"
if err := SendOrderConfirmationEmail(customerEmail, subject, orderDetails);
err != nil {
}
Ответ
Вынесите формирование письма в buildOrderEmailBody: функция получает товары и готовую сумму, возвращает строку и не отправляет email. Ошибку отправки обрабатывайте отдельно.
Для показанных полей Item функция может выглядеть так:
func buildOrderEmailBody(items []Item, totalPrice float64) string {
var body strings.Builder
body.WriteString("Спасибо за ваш заказ!\n\nВот товары в вашем заказе:\n")
for _, item := range items {
fmt.Fprintf(&body, "- %s: $%.2f\n", item.NameOfProduct, item.PriceOfProduct)
}
fmt.Fprintf(&body, "\nОбщая сумма (с учетом НДС): $%.2f\n", totalPrice)
return body.String()
}
Нужны импорты fmt и strings. В CreateOrder следует явно получить items и проверить SendOrderConfirmationEmail: EmailSent нельзя устанавливать при ошибке. Код исходного CreateOrder неполон, поэтому контракт заказа здесь не додумывается. Для реальных денежных расчётов предпочтительны целые минимальные единицы или decimal, а не float64.