use async generator

This commit is contained in:
polv committed 2021-10-06 00:23:16 +07:00
1 parent bf127a2d89
commit c3d068a21c
6 files changed
+677 -54

No files matched your search

+54
View File
@@ -0,0 +1,54 @@
import { makeWanikani } from '@/.'
import sqlite3 from 'better-sqlite3'
async function main() {
const db = sqlite3('cache/wanikani.db')
const wkApi = makeWanikani()
db.exec(/* sql */ `
CREATE TABLE IF NOT EXISTS [subjects] (
id INT PRIMARY KEY NOT NULL,
updated_at TIMESTAMP NOT NULL,
[object] TEXT NOT NULL,
[url] TEXT NOT NULL,
[data] JSON NOT NULL
);
CREATE INDEX idx_subjects_object ON [subjects] ([object]);
`)
const stmt = db.prepare(/* sql */ `
INSERT OR REPLACE INTO [subjects] (id, updated_at, [object], [url], [data])
VALUES (@id, @updatedAt, @object, @url, @data)
`)
const batch: any[] = []
for await (const d of wkApi.subjects()) {
batch.push({
id: d.id,
updatedAt: d.data_updated_at,
object: d.object,
url: d.url,
data: JSON.stringify(d.data),
})
if (batch.length > 500) {
db.transaction(() => {
batch.splice(0, 500).map((d) => stmt.run(d))
})()
}
}
if (batch.length) {
db.transaction(() => {
batch.map((d) => stmt.run(d))
})()
}
db.close()
}
if (require.main === module) {
main()
}