34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
|
import { DB } from "https://deno.land/x/sqlite/mod.ts";
|
||
|
import { parse } from "https://deno.land/std@0.211.0/csv/mod.ts";
|
||
|
|
||
|
async function readCSV(filepath: string) {
|
||
|
const fileContents = await Deno.readTextFile(filepath);
|
||
|
const result = await parse(fileContents, {
|
||
|
skipFirstRow: true,
|
||
|
columns: ["pubkey", "balance", "updated_at"],
|
||
|
});
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
function convertToUnixTimestamp(dateStr: string): number {
|
||
|
const date = new Date(dateStr);
|
||
|
return Math.floor(date.getTime() / 1000);
|
||
|
}
|
||
|
const db = new DB("pubkeys.db");
|
||
|
db.query(`
|
||
|
CREATE TABLE IF NOT EXISTS subscribers (
|
||
|
pubkey TEXT PRIMARY KEY,
|
||
|
created_at INTEGER,
|
||
|
balance INTEGER,
|
||
|
has_no_foaf INTEGER DEFAULT 0
|
||
|
)
|
||
|
`);
|
||
|
readCSV("subscribers.csv").then((subscribers) => {
|
||
|
for (const subscriber of subscribers) {
|
||
|
const createdAt = convertToUnixTimestamp(subscriber["updated_at"]);
|
||
|
db.query("INSERT OR IGNORE INTO subscribers (pubkey, balance, created_at) VALUES (?, ?, ?)", [subscriber["pubkey"], subscriber["balance"], createdAt]);
|
||
|
}
|
||
|
db.close();
|
||
|
});
|