Files
secunda_test/internal/email/sender.go
T
2026-06-22 14:31:01 +05:00

45 lines
844 B
Go

package email
import (
"context"
"errors"
"time"
"github.com/sony/gobreaker"
)
type Sender struct {
endpoint string
breaker *gobreaker.CircuitBreaker
}
func NewSender(endpoint string) *Sender {
return &Sender{
endpoint: endpoint,
breaker: gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "email-service",
MaxRequests: 3,
Interval: time.Minute,
Timeout: 10 * time.Second,
}),
}
}
func (s *Sender) SendInvite(ctx context.Context, email, teamName string) error {
_, err := s.breaker.Execute(func() (any, error) {
if s.endpoint == "" {
return nil, errors.New("email endpoint is empty")
}
if s.endpoint == "mock://email" {
return nil, nil
}
select {
case <-ctx.Done():
return nil, ctx.Err()
case <-time.After(20 * time.Millisecond):
return nil, nil
}
})
return err
}