feat(growth): same-day 1-day baselines for new videos

Let 1-day view growth use a zero baseline for videos published today, and the first successful sample for older videos ingested today, without mixing those into 7/30-day rankings.
This commit is contained in:
kairee committed 2026-11-02 20:44:17 +08:00
1 parent 8e7ead1669
commit c5b7185675
21 files changed
+411 -59

No files matched your search

+30 -8
View File
@@ -690,12 +690,17 @@ class Repository:
src: str = "view",
) -> None:
values = metrics or {}
ok_flag = 1 if ok else 0
view_value = values.get("view")
open_view = view_value if ok else None
open_at = int(captured_at) if ok else None
def run(conn: sqlite3.Connection) -> None:
conn.execute(
"""
INSERT INTO snapshot(stat_date, aid, "view", "like", favorite, coin,
share, reply, danmaku, captured_at, ok, err, src)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
share, reply, danmaku, captured_at, ok, err, src,
view_open, open_captured_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON CONFLICT(stat_date, aid) DO UPDATE SET
"view" = excluded."view",
"like" = excluded."like",
@@ -707,12 +712,22 @@ class Repository:
captured_at = excluded.captured_at,
ok = excluded.ok,
err = excluded.err,
src = excluded.src
src = excluded.src,
view_open = CASE
WHEN excluded.ok = 1 AND snapshot.view_open IS NULL
THEN excluded."view"
ELSE snapshot.view_open
END,
open_captured_at = CASE
WHEN excluded.ok = 1 AND snapshot.open_captured_at IS NULL
THEN excluded.captured_at
ELSE snapshot.open_captured_at
END
""",
(
stat_date,
int(aid),
values.get("view"),
view_value,
values.get("like"),
values.get("favorite"),
values.get("coin"),
@@ -720,9 +735,11 @@ class Repository:
values.get("reply"),
values.get("danmaku"),
int(captured_at),
1 if ok else 0,
ok_flag,
err,
src,
open_view,
open_at,
),
)
self.db.write(run)
@@ -741,18 +758,23 @@ class Repository:
"""
INSERT INTO snapshot(
stat_date, aid, "view", "like", favorite, coin,
share, reply, danmaku, captured_at, ok, err, src
share, reply, danmaku, captured_at, ok, err, src,
view_open, open_captured_at
)
SELECT
?, aid, "view", "like", favorite, coin,
share, reply, danmaku, ?, 1, NULL, ?
share, reply, danmaku, ?, 1, NULL, ?,
"view", ?
FROM snapshot
WHERE stat_date = ? AND ok = 1
AND aid NOT IN (
SELECT aid FROM snapshot WHERE stat_date = ?
)
""",
(target_date, int(captured_at), src, source_date, target_date),
(
target_date, int(captured_at), src, int(captured_at),
source_date, target_date,
),
)
return int(cur.rowcount or 0)
return self.db.write(run)