El. pašto sąsaja, sujungta
Šeši failai kaip skirtukai: email.go → console.go → resend.go → config.go → handlers.go → main.go (sąsaja + dvi realizacijos, tada config/struktūra/sujungimas, kurie jas įdiegia). Paskutiniai trys — pakeitimai.
1. internal/email/email.go (naujas) — Message, Sender sąsaja ir New (parinkėjas: "resend" → Resend, bet kas kita → konsolė).
2. internal/email/console.go (naujas) — spausdina apibrėžtą laišką į os.Stdout. Atkreipk dėmesį į mu sync.Mutex (lygiagretūs siuntimai nepersipina) ir sąmoningą pasirinkimą rašyti su fmt.Fprintf, ne slog:
// It writes directly rather than through slog on purpose — slog would escape the
// newlines into \n literals and mangle the box.
3. internal/email/resend.go (naujas) — prod siuntėjas: JSON marshal, POST https://api.resend.com/emails su bearer žetonu. Vienas HTTP kvietimas.
4. internal/config/config.go (modify) — trys laukai: EmailSender (numatyta "console"), ResendAPIKey, EmailFrom. Grynas papildymas.
5. internal/handlers/handlers.go (modify) — Handlers struktūra gauna Mailer email.Sender; New jį ima.
6. cmd/signflow/main.go (modify) — sukurk siuntėją iš konfigūracijos ir paduok jį:
mailer := email.New(cfg.EmailSender, cfg.ResendAPIKey, cfg.EmailFrom, log)
h := handlers.New(cfg, queries, sessions, mailer, log)
Patikrink. go run ./cmd/signflow ir perskaityk pačias pirmas log eilutes:
level=INFO msg="email: using console sender (links print to stdout, no email is sent)"
Ta eilutė — visas pažadas: EMAIL_SENDER nenustatytas, tad gavai konsolės siuntėją — kiekvienas laiškas programoje atsidurs šiame terminale, jokio API rakto niekur. Kol kas niekas nesiunčia (atstatymo apdorotojas — kitas žingsnis), bet vamzdynas įdiegtas ir pats apie save praneša.