Standardize all timestamps to UTC ISO-8601 format

- Update schema.sql defaults from datetime('now') to strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
- Update schema-admin.sql with same UTC format
- Update AdminService.js inline table creation and query comparisons
- Update system.js time-based query comparisons
- Add documentation to time.js explaining UTC format convention
This commit is contained in:
Michaël
2025-12-21 19:10:07 -03:00
parent 0db5dec5ec
commit c2a7267459
8 changed files with 133 additions and 75 deletions

View File

@@ -19,8 +19,8 @@ CREATE TABLE IF NOT EXISTS mints (
last_success_at TEXT,
last_failure_at TEXT,
consecutive_failures INTEGER DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE INDEX IF NOT EXISTS idx_mints_status ON mints(status);
@@ -34,8 +34,8 @@ CREATE TABLE IF NOT EXISTS mint_urls (
url_normalized TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'clearnet' CHECK (type IN ('clearnet', 'tor', 'mirror')),
active INTEGER NOT NULL DEFAULT 1,
discovered_at TEXT NOT NULL DEFAULT (datetime('now')),
last_seen_at TEXT NOT NULL DEFAULT (datetime('now'))
discovered_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
last_seen_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE INDEX IF NOT EXISTS idx_mint_urls_mint_id ON mint_urls(mint_id);
@@ -51,7 +51,7 @@ CREATE TABLE IF NOT EXISTS probes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
mint_id TEXT NOT NULL REFERENCES mints(mint_id) ON DELETE CASCADE,
url TEXT NOT NULL,
probed_at TEXT NOT NULL DEFAULT (datetime('now')),
probed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
success INTEGER NOT NULL,
status_code INTEGER,
rtt_ms INTEGER,
@@ -77,7 +77,7 @@ CREATE TABLE IF NOT EXISTS uptime_rollups (
total_checks INTEGER NOT NULL DEFAULT 0,
ok_checks INTEGER NOT NULL DEFAULT 0,
incident_count INTEGER NOT NULL DEFAULT 0,
computed_at TEXT NOT NULL DEFAULT (datetime('now')),
computed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
UNIQUE(mint_id, window, period_start)
);
@@ -117,14 +117,14 @@ CREATE TABLE IF NOT EXISTS metadata_snapshots (
server_time TEXT,
raw_json TEXT, -- Full raw response
content_hash TEXT,
last_fetched_at TEXT NOT NULL DEFAULT (datetime('now'))
last_fetched_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
-- Metadata History: All changes (append-only)
CREATE TABLE IF NOT EXISTS metadata_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
mint_id TEXT NOT NULL REFERENCES mints(mint_id) ON DELETE CASCADE,
fetched_at TEXT NOT NULL DEFAULT (datetime('now')),
fetched_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
change_type TEXT NOT NULL CHECK (change_type IN ('initial', 'update', 'error')),
diff TEXT, -- JSON diff of changes
content_hash TEXT,
@@ -150,7 +150,7 @@ CREATE TABLE IF NOT EXISTS nostr_events (
tags TEXT, -- JSON array
sig TEXT NOT NULL,
raw_json TEXT NOT NULL,
ingested_at TEXT NOT NULL DEFAULT (datetime('now'))
ingested_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE INDEX IF NOT EXISTS idx_nostr_events_event_id ON nostr_events(event_id);
@@ -168,7 +168,7 @@ CREATE TABLE IF NOT EXISTS reviews (
created_at INTEGER NOT NULL,
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
content TEXT,
parsed_at TEXT NOT NULL DEFAULT (datetime('now'))
parsed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE INDEX IF NOT EXISTS idx_reviews_mint_id ON reviews(mint_id);
@@ -185,7 +185,7 @@ CREATE TABLE IF NOT EXISTS trust_scores (
score_total INTEGER NOT NULL CHECK (score_total >= 0 AND score_total <= 100),
score_level TEXT NOT NULL CHECK (score_level IN ('unknown', 'low', 'medium', 'high', 'excellent')),
breakdown TEXT NOT NULL, -- JSON breakdown of score components
computed_at TEXT NOT NULL DEFAULT (datetime('now')),
computed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
UNIQUE(mint_id, computed_at)
);
@@ -210,7 +210,7 @@ CREATE TABLE IF NOT EXISTS pageviews (
id INTEGER PRIMARY KEY AUTOINCREMENT,
mint_id TEXT NOT NULL REFERENCES mints(mint_id) ON DELETE CASCADE,
session_id TEXT NOT NULL,
viewed_at TEXT NOT NULL DEFAULT (datetime('now')),
viewed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
user_agent TEXT,
referer TEXT
);
@@ -228,7 +228,7 @@ CREATE TABLE IF NOT EXISTS pageview_rollups (
period_end TEXT NOT NULL,
view_count INTEGER NOT NULL DEFAULT 0,
unique_sessions INTEGER NOT NULL DEFAULT 0,
computed_at TEXT NOT NULL DEFAULT (datetime('now')),
computed_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
UNIQUE(mint_id, window, period_start)
);
@@ -244,13 +244,13 @@ CREATE TABLE IF NOT EXISTS jobs (
payload TEXT, -- JSON
status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'running', 'completed', 'failed')),
priority INTEGER NOT NULL DEFAULT 0,
run_at TEXT NOT NULL DEFAULT (datetime('now')),
run_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
started_at TEXT,
completed_at TEXT,
retries INTEGER NOT NULL DEFAULT 0,
max_retries INTEGER NOT NULL DEFAULT 3,
error_message TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE INDEX IF NOT EXISTS idx_jobs_status_run_at ON jobs(status, run_at);
@@ -264,7 +264,7 @@ CREATE TABLE IF NOT EXISTS system_stats (
id INTEGER PRIMARY KEY AUTOINCREMENT,
stat_name TEXT NOT NULL,
stat_value TEXT NOT NULL,
recorded_at TEXT NOT NULL DEFAULT (datetime('now'))
recorded_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
);
CREATE INDEX IF NOT EXISTS idx_system_stats_name ON system_stats(stat_name);