saveinmed/backend-old/internal/notifications/service.go
2026-01-16 10:51:52 -03:00

37 lines
1.5 KiB
Go

package notifications
import (
"context"
"log"
"github.com/saveinmed/backend-go/internal/domain"
)
// NotificationService defines the contract for sending alerts.
type NotificationService interface {
NotifyOrderCreated(ctx context.Context, order *domain.Order, buyer, seller *domain.User) error
NotifyOrderStatusChanged(ctx context.Context, order *domain.Order, buyer *domain.User) error
}
// LoggerNotificationService prints notifications to stdout for dev/MVP.
type LoggerNotificationService struct{}
func NewLoggerNotificationService() *LoggerNotificationService {
return &LoggerNotificationService{}
}
func (s *LoggerNotificationService) NotifyOrderCreated(ctx context.Context, order *domain.Order, buyer, seller *domain.User) error {
log.Printf("📧 [EMAIL] To: Seller <%s>\n Subject: Novo Pedido #%s recebido!\n Body: Olá %s, você recebeu um novo pedido de %s. Total: R$ %.2f",
seller.Email, order.ID, seller.Name, buyer.Name, float64(order.TotalCents)/100)
log.Printf("📧 [EMAIL] To: Buyer <%s>\n Subject: Pedido #%s confirmado!\n Body: Olá %s, seu pedido foi recebido e está aguardando processamento.",
buyer.Email, order.ID, buyer.Name)
return nil
}
func (s *LoggerNotificationService) NotifyOrderStatusChanged(ctx context.Context, order *domain.Order, buyer *domain.User) error {
log.Printf("📧 [EMAIL] To: Buyer <%s>\n Subject: Atualização do Pedido #%s\n Body: Olá %s, seu pedido mudou para status: %s.",
buyer.Email, order.ID, buyer.Name, order.Status)
return nil
}