70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bssapp-backend/routes"
|
|
"database/sql"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func startTranslationSyncScheduler(pgDB *sql.DB, mssqlDB *sql.DB) {
|
|
enabled := strings.TrimSpace(strings.ToLower(os.Getenv("TRANSLATION_SYNC_ENABLED")))
|
|
if enabled == "0" || enabled == "false" || enabled == "off" {
|
|
log.Println("🛑 Translation sync scheduler disabled")
|
|
return
|
|
}
|
|
|
|
hour := 4
|
|
if raw := strings.TrimSpace(os.Getenv("TRANSLATION_SYNC_HOUR")); raw != "" {
|
|
if parsed, err := strconv.Atoi(raw); err == nil && parsed >= 0 && parsed <= 23 {
|
|
hour = parsed
|
|
}
|
|
}
|
|
|
|
limit := 30000
|
|
if raw := strings.TrimSpace(os.Getenv("TRANSLATION_SYNC_LIMIT")); raw != "" {
|
|
if parsed, err := strconv.Atoi(raw); err == nil && parsed > 0 {
|
|
limit = parsed
|
|
}
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
next := nextRunAt(time.Now(), hour)
|
|
wait := time.Until(next)
|
|
log.Printf("🕓 Translation sync next run at %s (in %s)", next.Format(time.RFC3339), wait.Round(time.Second))
|
|
time.Sleep(wait)
|
|
|
|
result, err := routes.PerformTranslationSync(pgDB, mssqlDB, routes.TranslationSyncOptions{
|
|
AutoTranslate: true,
|
|
Languages: []string{"en", "de", "it", "es", "ru", "ar"},
|
|
Limit: limit,
|
|
OnlyNew: true,
|
|
})
|
|
if err != nil {
|
|
log.Printf("❌ Translation sync failed: %v", err)
|
|
continue
|
|
}
|
|
|
|
log.Printf(
|
|
"✅ Translation sync done: seeds=%d affected=%d auto_translated=%d langs=%v",
|
|
result.SeedCount,
|
|
result.AffectedCount,
|
|
result.AutoTranslated,
|
|
result.TargetLangs,
|
|
)
|
|
}
|
|
}()
|
|
}
|
|
|
|
func nextRunAt(now time.Time, hour int) time.Time {
|
|
next := time.Date(now.Year(), now.Month(), now.Day(), hour, 0, 0, 0, now.Location())
|
|
if !next.After(now) {
|
|
next = next.Add(24 * time.Hour)
|
|
}
|
|
return next
|
|
}
|