@hadoku/jobplatform-worker 2.32.38 → 2.32.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +40 -23
- package/dist/routes/ingest.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -2725,20 +2725,34 @@ app$4.openapi(ingestRoute, async (c) => {
|
|
|
2725
2725
|
const accepted = inserted.filter(Boolean).length;
|
|
2726
2726
|
const skipped = jobs.length - accepted;
|
|
2727
2727
|
const seen = jobs.filter((_, i) => !inserted[i]);
|
|
2728
|
-
const
|
|
2729
|
-
const
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
const chunk = seenUrls.slice(i, i + 90);
|
|
2728
|
+
const SEEN_CHUNK = 45;
|
|
2729
|
+
const storedReads = [];
|
|
2730
|
+
for (let i = 0; i < seen.length; i += SEEN_CHUNK) {
|
|
2731
|
+
const chunk = seen.slice(i, i + SEEN_CHUNK);
|
|
2733
2732
|
const inList = chunk.map(() => "?").join(",");
|
|
2734
|
-
|
|
2735
|
-
db.prepare(
|
|
2733
|
+
storedReads.push(
|
|
2734
|
+
db.prepare(
|
|
2735
|
+
`SELECT id, url, description = '' AS blank FROM jobs
|
|
2736
|
+
WHERE url IN (${inList}) OR id IN (${inList})`
|
|
2737
|
+
).bind(...chunk.map((j) => j.url), ...chunk.map((j) => j.id))
|
|
2736
2738
|
);
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
+
}
|
|
2740
|
+
startTime(c, "seen");
|
|
2741
|
+
const stored = storedReads.length ? (await db.batch(storedReads)).flatMap(
|
|
2742
|
+
(r) => r.results
|
|
2743
|
+
) : [];
|
|
2744
|
+
const byUrl = new Map(stored.map((r) => [r.url, r]));
|
|
2745
|
+
const byId = new Map(stored.map((r) => [r.id, r]));
|
|
2746
|
+
const writes = [];
|
|
2747
|
+
const sameUrl = seen.filter((j) => byUrl.has(j.url)).map((j) => j.url);
|
|
2748
|
+
for (let i = 0; i < sameUrl.length; i += 90) {
|
|
2749
|
+
const chunk = sameUrl.slice(i, i + 90);
|
|
2750
|
+
const inList = chunk.map(() => "?").join(",");
|
|
2751
|
+
writes.push(
|
|
2752
|
+
db.prepare(`UPDATE jobs SET last_seen_at = ? WHERE url IN (${inList})`).bind(now, ...chunk)
|
|
2739
2753
|
);
|
|
2740
2754
|
if (board_slug) {
|
|
2741
|
-
|
|
2755
|
+
writes.push(
|
|
2742
2756
|
db.prepare(
|
|
2743
2757
|
`UPDATE jobs SET slug = ?, slug_source = 'scraped'
|
|
2744
2758
|
WHERE url IN (${inList})
|
|
@@ -2747,21 +2761,24 @@ app$4.openapi(ingestRoute, async (c) => {
|
|
|
2747
2761
|
);
|
|
2748
2762
|
}
|
|
2749
2763
|
}
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
const
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2764
|
+
for (const j of seen) {
|
|
2765
|
+
const row = byId.get(j.id);
|
|
2766
|
+
if (!row || row.url === j.url) continue;
|
|
2767
|
+
writes.push(db.prepare("UPDATE jobs SET last_seen_at = ? WHERE id = ?").bind(now, row.id));
|
|
2768
|
+
writes.push(db.prepare("UPDATE OR IGNORE jobs SET url = ? WHERE id = ?").bind(j.url, row.id));
|
|
2769
|
+
}
|
|
2770
|
+
for (const j of seen) {
|
|
2771
|
+
const row = byUrl.get(j.url) ?? byId.get(j.id);
|
|
2772
|
+
if (row?.blank && j.description !== "") {
|
|
2773
|
+
writes.push(
|
|
2774
|
+
db.prepare(`UPDATE jobs SET description = ? WHERE id = ? AND description = ''`).bind(j.description, row.id)
|
|
2775
|
+
);
|
|
2762
2776
|
}
|
|
2763
2777
|
}
|
|
2764
|
-
|
|
2778
|
+
for (let i = 0; i < writes.length; i += INGEST_BATCH_CHUNK) {
|
|
2779
|
+
await db.batch(writes.slice(i, i + INGEST_BATCH_CHUNK));
|
|
2780
|
+
}
|
|
2781
|
+
endTime(c, "seen");
|
|
2765
2782
|
if (accepted > 0) {
|
|
2766
2783
|
startTime(c, "rank");
|
|
2767
2784
|
await rankNewJobs(db);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/routes/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAiB9E,UAAU,YAAY;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE;QAAE,WAAW,EAAE,iBAAiB,CAAA;KAAE,CAAC;CAC9C;
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/routes/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAiB9E,UAAU,YAAY;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE;QAAE,WAAW,EAAE,iBAAiB,CAAA;KAAE,CAAC;CAC9C;AAq9BD,eAAO,MAAM,YAAY,oCAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hadoku/jobplatform-worker",
|
|
3
|
-
"version": "2.32.
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "2.32.39",
|
|
4
|
+
"gitHead": "84b5623c402aac9159148daa3d454529dfea4407",
|
|
5
5
|
"description": "Job listings aggregation and tracking dashboard - Worker package",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|