Compare commits

..

No commits in common. "eb2b68fab0a9bda212c455220f885183a705e7ad" and "1439c3dd1da6cf4731556b84abf100b7b3ebc64f" have entirely different histories.

3 changed files with 15 additions and 30 deletions

View file

@ -2,10 +2,6 @@
scrapeo "masivo" de precios y datos en supermercados argentinos scrapeo "masivo" de precios y datos en supermercados argentinos
## proyectos similares
- [ratoneando](https://ratoneando.ar/)
## componentes ## componentes
### scraper-rs ### scraper-rs
@ -23,7 +19,6 @@ el [sitio](./sitio/) renderiza páginas a partir de la base de datos y hace grá
para el schema de la base de datos y el sitio, es necesario [Node.js](https://nodejs.org/) y [pnpm](https://pnpm.io/). para el scraper, es necesario [Rust](https://www.rust-lang.org/) estable. para el schema de la base de datos y el sitio, es necesario [Node.js](https://nodejs.org/) y [pnpm](https://pnpm.io/). para el scraper, es necesario [Rust](https://www.rust-lang.org/) estable.
crea la base de datos: crea la base de datos:
``` ```
cd db-datos/ cd db-datos/
pnpm install pnpm install

View file

@ -1,4 +1,2 @@
export { db } from "db-datos/db.js"; export { db } from "db-datos/db.js";
export * as schema from "db-datos/schema.js"; export * as schema from "db-datos/schema.js";
import { migrateDb } from "db-datos/migrate.js";
migrateDb();

View file

@ -3,9 +3,20 @@ import { db, schema } from "$lib/server/db";
const { precios } = schema; const { precios } = schema;
import { sql } from "drizzle-orm"; import { sql } from "drizzle-orm";
let cache: Promise<{ key: Date; data: { precios: Precios } }> = doQuery(); let cache: null | { key: Date; data: { precios: Precios } } = null;
async function doQuery() { type Precios = {
ean: string;
name: string | null;
imageUrl: string | null;
}[];
export const load: PageServerLoad = async ({
params,
}): Promise<{ precios: Precios }> => {
if (cache && +new Date() < +cache.key + 1000 * 60 * 10) {
return cache.data;
}
const q = db const q = db
.select({ .select({
ean: precios.ean, ean: precios.ean,
@ -19,25 +30,6 @@ async function doQuery() {
.limit(150); .limit(150);
const res = await q; const res = await q;
const data = { precios: res }; const data = { precios: res };
return { key: new Date(), data }; cache = { key: new Date(), data };
} return data;
setInterval(
async () => {
const c = await doQuery();
cache = Promise.resolve(c);
},
4 * 60 * 60 * 1000,
);
type Precios = {
ean: string;
name: string | null;
imageUrl: string | null;
}[];
export const load: PageServerLoad = async ({
params,
}): Promise<{ precios: Precios }> => {
return (await cache).data;
}; };