package store import ( "errors" "daili/internal/domain" ) // UrgentFlags 返回 [from,to] 区间内的加急标记,索引为 [subID][date]。 // 表里只存“加急=1”的行,未出现即未加急。 func (db *DB) UrgentFlags(from, to string) (map[int64]map[string]bool, error) { out := map[int64]map[string]bool{} rows, err := db.sql.Query(`SELECT sub_id, service_date FROM task_flags WHERE urgent=1 AND service_date BETWEEN ? AND ?`, from, to) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var subID int64 var date string if err := rows.Scan(&subID, &date); err != nil { return nil, err } if out[subID] == nil { out[subID] = map[string]bool{} } out[subID][date] = true } return out, rows.Err() } // SetUrgent 设置或取消某天某订阅的加急标记。 func (db *DB) SetUrgent(subID int64, date string, urgent bool) error { if _, err := domain.ParseDate(date); err != nil { return errors.New("日期格式不正确") } if _, err := db.Sub(subID); err != nil { return errors.New("订阅不存在") } now := nowStamp() if urgent { _, err := db.sql.Exec(`INSERT INTO task_flags(sub_id, service_date, urgent, created_at, updated_at) VALUES(?,?,1,?,?) ON CONFLICT(sub_id, service_date) DO UPDATE SET urgent=1, updated_at=excluded.updated_at`, subID, date, now, now) return err } _, err := db.sql.Exec(`DELETE FROM task_flags WHERE sub_id=? AND service_date=?`, subID, date) return err } // IsUrgent 查询单条加急状态。 func (db *DB) IsUrgent(subID int64, date string) (bool, error) { var n int err := db.sql.QueryRow(`SELECT COUNT(*) FROM task_flags WHERE sub_id=? AND service_date=? AND urgent=1`, subID, date).Scan(&n) return n > 0, err } // CountUrgent 统计区间内加急任务数。 func (db *DB) CountUrgent(from, to string) (int, error) { var n int err := db.sql.QueryRow(`SELECT COUNT(*) FROM task_flags WHERE urgent=1 AND service_date BETWEEN ? AND ?`, from, to).Scan(&n) return n, err }