feat(speedtest): results table + repo
This commit is contained in:
9
lib/db/migrations/013_speedtest.sql
Normal file
9
lib/db/migrations/013_speedtest.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
-- 013_speedtest.sql
|
||||
CREATE TABLE speedtest_results (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
down_mbps numeric NOT NULL,
|
||||
up_mbps numeric NOT NULL,
|
||||
ping_ms numeric,
|
||||
ran_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX idx_speedtest_ran_at ON speedtest_results (ran_at DESC);
|
||||
12
lib/db/repos/speedtest.js
Normal file
12
lib/db/repos/speedtest.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import { pool } from '../pool.js';
|
||||
export async function record({ down_mbps, up_mbps, ping_ms = null }) {
|
||||
const { rows } = await pool.query(
|
||||
`INSERT INTO speedtest_results (down_mbps, up_mbps, ping_ms) VALUES ($1,$2,$3) RETURNING *`,
|
||||
[down_mbps, up_mbps, ping_ms]);
|
||||
return rows[0];
|
||||
}
|
||||
export async function history(limit = 30) {
|
||||
const { rows } = await pool.query(
|
||||
`SELECT * FROM speedtest_results ORDER BY ran_at DESC LIMIT $1`, [limit]);
|
||||
return rows;
|
||||
}
|
||||
15
tests/repos/speedtest.test.js
Normal file
15
tests/repos/speedtest.test.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import { describe, it, expect, beforeAll } from 'vitest';
|
||||
import { resetDb } from '../helpers/db.js';
|
||||
import { migrateUp } from '../../lib/db/migrate.js';
|
||||
import * as repo from '../../lib/db/repos/speedtest.js';
|
||||
|
||||
beforeAll(async () => { await resetDb(); await migrateUp(); });
|
||||
describe('speedtest repo', () => {
|
||||
it('records and lists newest-first', async () => {
|
||||
await repo.record({ down_mbps: 100, up_mbps: 20, ping_ms: 8 });
|
||||
await repo.record({ down_mbps: 110, up_mbps: 22, ping_ms: 7 });
|
||||
const hist = await repo.history(30);
|
||||
expect(hist.length).toBe(2);
|
||||
expect(Number(hist[0].down_mbps)).toBe(110); // newest first
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user