feat(checker): checker

This commit is contained in:
mei
2026-04-06 10:10:31 +08:00
parent 80e427d7c3
commit 189eab8a0a
13 changed files with 181 additions and 12 deletions
+51
View File
@@ -0,0 +1,51 @@
package checker
import (
"log"
"time"
"github.com/ssdomei232/goodBaby/handler/db"
"github.com/ssdomei232/goodBaby/handler/reminder"
"github.com/ssdomei232/goodBaby/handler/runner"
"github.com/ssdomei232/goodBaby/model"
)
// 定时检查所有 timers 是否需要被触发
//
// 同时向即将被触发的 timers 发送通知
func CheckTimers() {
gormDB, err := db.GetGormDB()
if err != nil {
log.Printf("failed to get gorm db: %v", err)
return
}
// 1. 获取所有 timers
var timers []model.Timer
if err := gormDB.Find(&timers).Error; err != nil {
log.Printf("failed to get timers: %v", err)
return
}
// 2. 检查每个 timer 是否需要被触发
for _, timer := range timers {
// 计算下次触发时间
nextSignTime := timer.LastSign + timer.SignDerationSeconds
// 计算提醒时间
remindTime := nextSignTime - timer.RemindTimeSeconds
// 获取当前时间
currentTime := time.Now().Unix()
if currentTime >= remindTime && currentTime < nextSignTime {
// 发送通知
reminder.Reminder(&timer)
}
if currentTime >= nextSignTime {
// 触发 timer
runner.Runner(&timer)
}
}
}