package store import ( "time" "daili/internal/domain" ) // Badges 顶栏常驻徽标。 func (db *DB) Badges(today time.Time) (dueToday, due3, due7 int, err error) { t := domain.Date(today) const notArchived = ` AND IFNULL((SELECT archived FROM customers c WHERE c.id=customer_id),0)=0` if err = db.sql.QueryRow(`SELECT COUNT(*) FROM subscriptions WHERE status<>'closed' AND end_date=?`+notArchived, t).Scan(&dueToday); err != nil { return } if err = db.sql.QueryRow(`SELECT COUNT(*) FROM subscriptions WHERE status<>'closed' AND end_date BETWEEN ? AND ?`+notArchived, t, domain.Date(domain.AddDays(today, 2))).Scan(&due3); err != nil { return } err = db.sql.QueryRow(`SELECT COUNT(*) FROM subscriptions WHERE status<>'closed' AND end_date BETWEEN ? AND ?`+notArchived, t, domain.Date(domain.AddDays(today, 6))).Scan(&due7) return } // RecentDue 返回未来 n 天内到期的订阅(按到期日排序)。 func (db *DB) RecentDue(from string, days int) ([]Subscription, error) { to := domain.Date(domain.AddDays(domain.ParseDateOr(from, domain.Today()), days-1)) return db.querySubs(subSelect+` WHERE s.status<>'closed' AND IFNULL(c.archived,0)=0 AND s.end_date BETWEEN ? AND ? ORDER BY s.end_date, s.id`, from, to) }