mirror of
https://github.com/catdevnull/preciazo.git
synced 2024-11-21 22:16:18 +00:00
parent
b43c2aae6e
commit
5bc2fe51a3
6 changed files with 579 additions and 14 deletions
|
@ -149,17 +149,25 @@ export const sucursales = pgTable(
|
|||
}
|
||||
);
|
||||
|
||||
export const banderas = pgTable("banderas", {
|
||||
id_dataset: integer("id_dataset").references(() => datasets.id),
|
||||
id_comercio: integer("id_comercio").notNull(),
|
||||
id_bandera: integer("id_bandera").notNull(),
|
||||
comercio_cuit: text("comercio_cuit").notNull(),
|
||||
comercio_razon_social: text("comercio_razon_social"),
|
||||
comercio_bandera_nombre: text("comercio_bandera_nombre"),
|
||||
comercio_bandera_url: text("comercio_bandera_url"),
|
||||
comercio_ultima_actualizacion: date("comercio_ultima_actualizacion"),
|
||||
comercio_version_sepa: text("comercio_version_sepa"),
|
||||
});
|
||||
export const banderas = pgTable(
|
||||
"banderas",
|
||||
{
|
||||
id_dataset: integer("id_dataset").references(() => datasets.id),
|
||||
id_comercio: integer("id_comercio").notNull(),
|
||||
id_bandera: integer("id_bandera").notNull(),
|
||||
comercio_cuit: text("comercio_cuit").notNull(),
|
||||
comercio_razon_social: text("comercio_razon_social"),
|
||||
comercio_bandera_nombre: text("comercio_bandera_nombre"),
|
||||
comercio_bandera_url: text("comercio_bandera_url"),
|
||||
comercio_ultima_actualizacion: date("comercio_ultima_actualizacion"),
|
||||
comercio_version_sepa: text("comercio_version_sepa"),
|
||||
},
|
||||
(table) => {
|
||||
return {
|
||||
banderas_id_dataset: unique("banderas_id_dataset").on(table.id_dataset),
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
export const preciosRelations = relations(precios, ({ one }) => ({
|
||||
dataset: one(datasets, {
|
||||
|
|
1
sepa/drizzle/0006_short_ravenous.sql
Normal file
1
sepa/drizzle/0006_short_ravenous.sql
Normal file
|
@ -0,0 +1 @@
|
|||
ALTER TABLE "banderas" ADD CONSTRAINT "banderas_id_dataset" UNIQUE("id_dataset");
|
532
sepa/drizzle/meta/0006_snapshot.json
Normal file
532
sepa/drizzle/meta/0006_snapshot.json
Normal file
|
@ -0,0 +1,532 @@
|
|||
{
|
||||
"id": "069e6444-9867-4037-adfa-9ae798c70b7c",
|
||||
"prevId": "ddbdcb95-e97b-4983-b9bc-bce70d6b813a",
|
||||
"version": "7",
|
||||
"dialect": "postgresql",
|
||||
"tables": {
|
||||
"public.banderas": {
|
||||
"name": "banderas",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id_dataset": {
|
||||
"name": "id_dataset",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_comercio": {
|
||||
"name": "id_comercio",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"id_bandera": {
|
||||
"name": "id_bandera",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"comercio_cuit": {
|
||||
"name": "comercio_cuit",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true
|
||||
},
|
||||
"comercio_razon_social": {
|
||||
"name": "comercio_razon_social",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"comercio_bandera_nombre": {
|
||||
"name": "comercio_bandera_nombre",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"comercio_bandera_url": {
|
||||
"name": "comercio_bandera_url",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"comercio_ultima_actualizacion": {
|
||||
"name": "comercio_ultima_actualizacion",
|
||||
"type": "date",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"comercio_version_sepa": {
|
||||
"name": "comercio_version_sepa",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"banderas_id_dataset_datasets_id_fk": {
|
||||
"name": "banderas_id_dataset_datasets_id_fk",
|
||||
"tableFrom": "banderas",
|
||||
"tableTo": "datasets",
|
||||
"columnsFrom": [
|
||||
"id_dataset"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {
|
||||
"banderas_id_dataset": {
|
||||
"name": "banderas_id_dataset",
|
||||
"nullsNotDistinct": false,
|
||||
"columns": [
|
||||
"id_dataset"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"public.datasets": {
|
||||
"name": "datasets",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "serial",
|
||||
"primaryKey": true,
|
||||
"notNull": true
|
||||
},
|
||||
"name": {
|
||||
"name": "name",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"date": {
|
||||
"name": "date",
|
||||
"type": "date",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_comercio": {
|
||||
"name": "id_comercio",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {
|
||||
"datasets_name_key": {
|
||||
"name": "datasets_name_key",
|
||||
"nullsNotDistinct": false,
|
||||
"columns": [
|
||||
"name"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"public.precios": {
|
||||
"name": "precios",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id_dataset": {
|
||||
"name": "id_dataset",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_comercio": {
|
||||
"name": "id_comercio",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_bandera": {
|
||||
"name": "id_bandera",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_sucursal": {
|
||||
"name": "id_sucursal",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_producto": {
|
||||
"name": "id_producto",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_ean": {
|
||||
"name": "productos_ean",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_descripcion": {
|
||||
"name": "productos_descripcion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_cantidad_presentacion": {
|
||||
"name": "productos_cantidad_presentacion",
|
||||
"type": "numeric(10, 2)",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_unidad_medida_presentacion": {
|
||||
"name": "productos_unidad_medida_presentacion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_marca": {
|
||||
"name": "productos_marca",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_precio_lista": {
|
||||
"name": "productos_precio_lista",
|
||||
"type": "numeric(10, 2)",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_precio_referencia": {
|
||||
"name": "productos_precio_referencia",
|
||||
"type": "numeric(10, 2)",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_cantidad_referencia": {
|
||||
"name": "productos_cantidad_referencia",
|
||||
"type": "numeric(10, 2)",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_unidad_medida_referencia": {
|
||||
"name": "productos_unidad_medida_referencia",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_precio_unitario_promo1": {
|
||||
"name": "productos_precio_unitario_promo1",
|
||||
"type": "numeric(10, 2)",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_leyenda_promo1": {
|
||||
"name": "productos_leyenda_promo1",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_precio_unitario_promo2": {
|
||||
"name": "productos_precio_unitario_promo2",
|
||||
"type": "numeric(10, 2)",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_leyenda_promo2": {
|
||||
"name": "productos_leyenda_promo2",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"idx_precios_id_producto": {
|
||||
"name": "idx_precios_id_producto",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "id_producto",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
}
|
||||
],
|
||||
"isUnique": false,
|
||||
"concurrently": false,
|
||||
"method": "btree",
|
||||
"with": {}
|
||||
},
|
||||
"idx_precios_id_producto_id_dataset": {
|
||||
"name": "idx_precios_id_producto_id_dataset",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "id_producto",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
},
|
||||
{
|
||||
"expression": "id_dataset",
|
||||
"isExpression": false,
|
||||
"asc": true,
|
||||
"nulls": "last"
|
||||
}
|
||||
],
|
||||
"isUnique": false,
|
||||
"concurrently": false,
|
||||
"method": "btree",
|
||||
"with": {}
|
||||
}
|
||||
},
|
||||
"foreignKeys": {
|
||||
"precios_id_dataset_datasets_id_fk": {
|
||||
"name": "precios_id_dataset_datasets_id_fk",
|
||||
"tableFrom": "precios",
|
||||
"tableTo": "datasets",
|
||||
"columnsFrom": [
|
||||
"id_dataset"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"public.productos_descripcion_index": {
|
||||
"name": "productos_descripcion_index",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id_producto": {
|
||||
"name": "id_producto",
|
||||
"type": "bigint",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_descripcion": {
|
||||
"name": "productos_descripcion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"productos_marca": {
|
||||
"name": "productos_marca",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"productos_descripcion_index_search_descripcion": {
|
||||
"name": "productos_descripcion_index_search_descripcion",
|
||||
"columns": [
|
||||
{
|
||||
"expression": "to_tsvector('spanish', \"productos_descripcion\")",
|
||||
"asc": true,
|
||||
"isExpression": true,
|
||||
"nulls": "last"
|
||||
}
|
||||
],
|
||||
"isUnique": false,
|
||||
"concurrently": false,
|
||||
"method": "gin",
|
||||
"with": {}
|
||||
}
|
||||
},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {
|
||||
"productos_descripcion_index_productos_descripcion_unique": {
|
||||
"name": "productos_descripcion_index_productos_descripcion_unique",
|
||||
"nullsNotDistinct": false,
|
||||
"columns": [
|
||||
"productos_descripcion"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"public.sucursales": {
|
||||
"name": "sucursales",
|
||||
"schema": "",
|
||||
"columns": {
|
||||
"id_dataset": {
|
||||
"name": "id_dataset",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_comercio": {
|
||||
"name": "id_comercio",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_bandera": {
|
||||
"name": "id_bandera",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"id_sucursal": {
|
||||
"name": "id_sucursal",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_nombre": {
|
||||
"name": "sucursales_nombre",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_tipo": {
|
||||
"name": "sucursales_tipo",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_calle": {
|
||||
"name": "sucursales_calle",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_numero": {
|
||||
"name": "sucursales_numero",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_latitud": {
|
||||
"name": "sucursales_latitud",
|
||||
"type": "numeric",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_longitud": {
|
||||
"name": "sucursales_longitud",
|
||||
"type": "numeric",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_observaciones": {
|
||||
"name": "sucursales_observaciones",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_barrio": {
|
||||
"name": "sucursales_barrio",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_codigo_postal": {
|
||||
"name": "sucursales_codigo_postal",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_localidad": {
|
||||
"name": "sucursales_localidad",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_provincia": {
|
||||
"name": "sucursales_provincia",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_lunes_horario_atencion": {
|
||||
"name": "sucursales_lunes_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_martes_horario_atencion": {
|
||||
"name": "sucursales_martes_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_miercoles_horario_atencion": {
|
||||
"name": "sucursales_miercoles_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_jueves_horario_atencion": {
|
||||
"name": "sucursales_jueves_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_viernes_horario_atencion": {
|
||||
"name": "sucursales_viernes_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_sabado_horario_atencion": {
|
||||
"name": "sucursales_sabado_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
},
|
||||
"sucursales_domingo_horario_atencion": {
|
||||
"name": "sucursales_domingo_horario_atencion",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"sucursales_id_dataset_datasets_id_fk": {
|
||||
"name": "sucursales_id_dataset_datasets_id_fk",
|
||||
"tableFrom": "sucursales",
|
||||
"tableTo": "datasets",
|
||||
"columnsFrom": [
|
||||
"id_dataset"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "no action",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {
|
||||
"sucursales_id_dataset_id_comercio_id_bandera_id_sucursal_key": {
|
||||
"name": "sucursales_id_dataset_id_comercio_id_bandera_id_sucursal_key",
|
||||
"nullsNotDistinct": false,
|
||||
"columns": [
|
||||
"id_dataset",
|
||||
"id_comercio",
|
||||
"id_bandera",
|
||||
"id_sucursal"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"enums": {},
|
||||
"schemas": {},
|
||||
"sequences": {},
|
||||
"_meta": {
|
||||
"columns": {},
|
||||
"schemas": {},
|
||||
"tables": {}
|
||||
}
|
||||
}
|
|
@ -43,6 +43,13 @@
|
|||
"when": 1727015727177,
|
||||
"tag": "0005_loud_warbound",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"version": "7",
|
||||
"when": 1727016580605,
|
||||
"tag": "0006_short_ravenous",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
import { db } from '$lib/server/db';
|
||||
import type { PageServerLoad } from './$types';
|
||||
import { datasets, precios, sucursales } from '$lib/server/db/schema';
|
||||
import { banderas, datasets, precios, sucursales } from '$lib/server/db/schema';
|
||||
import { and, eq, sql } from 'drizzle-orm';
|
||||
import { error } from '@sveltejs/kit';
|
||||
import * as Sentry from '@sentry/sveltekit';
|
||||
|
@ -21,7 +21,11 @@ export const load: PageServerLoad = async ({ params, setHeaders }) => {
|
|||
sucursales_nombre: sucursales.sucursales_nombre,
|
||||
sucursales_calle: sucursales.sucursales_calle,
|
||||
sucursales_numero: sucursales.sucursales_numero,
|
||||
dataset_date: datasets.date
|
||||
dataset_date: datasets.date,
|
||||
comercio_cuit: banderas.comercio_cuit,
|
||||
comercio_razon_social: banderas.comercio_razon_social,
|
||||
comercio_bandera_nombre: banderas.comercio_bandera_nombre,
|
||||
comercio_bandera_url: banderas.comercio_bandera_url
|
||||
})
|
||||
.from(precios)
|
||||
.where(
|
||||
|
@ -50,7 +54,14 @@ ORDER BY d1.id_comercio)
|
|||
eq(sucursales.id_comercio, precios.id_comercio)
|
||||
)
|
||||
)
|
||||
.leftJoin(datasets, eq(datasets.id, precios.id_dataset));
|
||||
.leftJoin(datasets, eq(datasets.id, precios.id_dataset))
|
||||
.leftJoin(
|
||||
banderas,
|
||||
and(
|
||||
eq(banderas.id_comercio, precios.id_comercio),
|
||||
eq(banderas.id_bandera, precios.id_bandera)
|
||||
)
|
||||
);
|
||||
const preciosRes = await Sentry.startSpan(
|
||||
{
|
||||
op: 'db.query',
|
||||
|
|
|
@ -57,9 +57,15 @@
|
|||
const createElement = () => {
|
||||
const div = document.createElement('div');
|
||||
|
||||
let banderaNombre = precio.comercio_bandera_nombre;
|
||||
if (precio.comercio_cuit === '30687310434' && !banderaNombre?.includes('Carrefour')) {
|
||||
banderaNombre = `Carrefour ${banderaNombre}`;
|
||||
}
|
||||
|
||||
[
|
||||
`fecha del precio: ${precio.dataset_date}`,
|
||||
`precio: ${pesosFormatter.format(precio.productos_precio_lista)}`,
|
||||
`comercio: ${banderaNombre} (${precio.comercio_razon_social} CUIT ${precio.comercio_cuit})`,
|
||||
`sucursal: ${precio.sucursales_nombre}`,
|
||||
`dirección: ${precio.sucursales_calle} ${precio.sucursales_numero}`,
|
||||
() => {
|
||||
|
|
Loading…
Reference in a new issue