33 lines
669 B
Go
33 lines
669 B
Go
package usecase
|
|
|
|
import (
|
|
"time"
|
|
|
|
notifconfig "gateway/internal/model/notification/config"
|
|
)
|
|
|
|
const defaultMaxRetry = 5
|
|
|
|
func effectiveMaxRetry(cfg notifconfig.AsyncConfig) int {
|
|
if cfg.MaxRetry > 0 {
|
|
return cfg.MaxRetry
|
|
}
|
|
return defaultMaxRetry
|
|
}
|
|
|
|
// retryDelay returns wait duration before attempt number `nextAttempt` (1-based).
|
|
func retryDelay(cfg notifconfig.AsyncConfig, nextAttempt int) time.Duration {
|
|
if nextAttempt < 1 {
|
|
nextAttempt = 1
|
|
}
|
|
secs := cfg.BackoffSeconds
|
|
if len(secs) == 0 {
|
|
secs = []int{1, 5, 30, 300, 1800}
|
|
}
|
|
idx := nextAttempt - 1
|
|
if idx >= len(secs) {
|
|
idx = len(secs) - 1
|
|
}
|
|
return time.Duration(secs[idx]) * time.Second
|
|
}
|