mirror of
https://github.com/catdevnull/preciazo.git
synced 2024-11-22 14:16:19 +00:00
Compare commits
No commits in common. "e96bf8dc749b6eb69397a95d12898a094d8b8a1c" and "a368f2e62559b8e54e9f7279692d03713aeb69cc" have entirely different histories.
e96bf8dc74
...
a368f2e625
19 changed files with 68 additions and 2514 deletions
BIN
sepa/bun.lockb
BIN
sepa/bun.lockb
Binary file not shown.
|
@ -91,9 +91,6 @@ export const precios = pgTable(
|
||||||
idx_precios_id_producto_id_dataset: index(
|
idx_precios_id_producto_id_dataset: index(
|
||||||
"idx_precios_id_producto_id_dataset"
|
"idx_precios_id_producto_id_dataset"
|
||||||
).using("btree", table.id_producto, table.id_dataset),
|
).using("btree", table.id_producto, table.id_dataset),
|
||||||
idx_precios_id_producto_id_comercio_id_sucursal: index(
|
|
||||||
"idx_precios_id_producto_id_comercio_id_sucursal"
|
|
||||||
).on(table.id_producto, table.id_comercio, table.id_sucursal),
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -152,26 +149,6 @@ 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"),
|
|
||||||
},
|
|
||||||
(table) => {
|
|
||||||
return {
|
|
||||||
banderas_id_dataset: unique("banderas_id_dataset").on(table.id_dataset),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
export const preciosRelations = relations(precios, ({ one }) => ({
|
export const preciosRelations = relations(precios, ({ one }) => ({
|
||||||
dataset: one(datasets, {
|
dataset: one(datasets, {
|
||||||
fields: [precios.id_dataset],
|
fields: [precios.id_dataset],
|
||||||
|
@ -189,10 +166,6 @@ export const sucursalesRelations = relations(sucursales, ({ one }) => ({
|
||||||
fields: [sucursales.id_dataset],
|
fields: [sucursales.id_dataset],
|
||||||
references: [datasets.id],
|
references: [datasets.id],
|
||||||
}),
|
}),
|
||||||
bandera: one(banderas, {
|
|
||||||
fields: [sucursales.id_comercio, sucursales.id_bandera],
|
|
||||||
references: [banderas.id_comercio, banderas.id_bandera],
|
|
||||||
}),
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// para actualizar la tabla:
|
// para actualizar la tabla:
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
CREATE TABLE IF NOT EXISTS "banderas" (
|
|
||||||
"id_dataset" integer,
|
|
||||||
"id_comercio" integer NOT NULL,
|
|
||||||
"id_bandera" integer NOT NULL,
|
|
||||||
"comercio_cuit" text NOT NULL,
|
|
||||||
"comercio_razon_social" text,
|
|
||||||
"comercio_bandera_nombre" text,
|
|
||||||
"comercio_bandera_url" text,
|
|
||||||
"comercio_ultima_actualizacion" date,
|
|
||||||
"comercio_version_sepa" text
|
|
||||||
);
|
|
||||||
--> statement-breakpoint
|
|
||||||
DO $$ BEGIN
|
|
||||||
ALTER TABLE "banderas" ADD CONSTRAINT "banderas_id_dataset_datasets_id_fk" FOREIGN KEY ("id_dataset") REFERENCES "public"."datasets"("id") ON DELETE no action ON UPDATE no action;
|
|
||||||
EXCEPTION
|
|
||||||
WHEN duplicate_object THEN null;
|
|
||||||
END $$;
|
|
|
@ -1 +0,0 @@
|
||||||
ALTER TABLE "banderas" ADD CONSTRAINT "banderas_id_dataset" UNIQUE("id_dataset");
|
|
|
@ -1 +0,0 @@
|
||||||
CREATE INDEX IF NOT EXISTS "idx_precios_id_dataset_id_comercio_id_sucursal" ON "precios" USING btree ("id_dataset","id_comercio","id_sucursal");
|
|
|
@ -1,2 +0,0 @@
|
||||||
DROP INDEX IF EXISTS "idx_precios_id_dataset_id_comercio_id_sucursal";--> statement-breakpoint
|
|
||||||
CREATE INDEX IF NOT EXISTS "idx_precios_id_producto_id_comercio_id_sucursal" ON "precios" USING btree ("id_producto","id_comercio","id_sucursal");
|
|
|
@ -1,524 +0,0 @@
|
||||||
{
|
|
||||||
"id": "ddbdcb95-e97b-4983-b9bc-bce70d6b813a",
|
|
||||||
"prevId": "36a04e5e-b070-4b89-96ce-e9431c2f199b",
|
|
||||||
"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": {}
|
|
||||||
},
|
|
||||||
"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": {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,532 +0,0 @@
|
||||||
{
|
|
||||||
"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": {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,559 +0,0 @@
|
||||||
{
|
|
||||||
"id": "c63ebee0-9e80-431e-9caf-195ee5b4d222",
|
|
||||||
"prevId": "069e6444-9867-4037-adfa-9ae798c70b7c",
|
|
||||||
"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": {}
|
|
||||||
},
|
|
||||||
"idx_precios_id_dataset_id_comercio_id_sucursal": {
|
|
||||||
"name": "idx_precios_id_dataset_id_comercio_id_sucursal",
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"expression": "id_dataset",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expression": "id_comercio",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expression": "id_sucursal",
|
|
||||||
"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": {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,559 +0,0 @@
|
||||||
{
|
|
||||||
"id": "fc65894f-ded2-444d-b634-2c66780ec6c5",
|
|
||||||
"prevId": "c63ebee0-9e80-431e-9caf-195ee5b4d222",
|
|
||||||
"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": {}
|
|
||||||
},
|
|
||||||
"idx_precios_id_producto_id_comercio_id_sucursal": {
|
|
||||||
"name": "idx_precios_id_producto_id_comercio_id_sucursal",
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"expression": "id_producto",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expression": "id_comercio",
|
|
||||||
"isExpression": false,
|
|
||||||
"asc": true,
|
|
||||||
"nulls": "last"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expression": "id_sucursal",
|
|
||||||
"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": {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -36,34 +36,6 @@
|
||||||
"when": 1726534597731,
|
"when": 1726534597731,
|
||||||
"tag": "0004_mushy_ultragirl",
|
"tag": "0004_mushy_ultragirl",
|
||||||
"breakpoints": true
|
"breakpoints": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"idx": 5,
|
|
||||||
"version": "7",
|
|
||||||
"when": 1727015727177,
|
|
||||||
"tag": "0005_loud_warbound",
|
|
||||||
"breakpoints": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idx": 6,
|
|
||||||
"version": "7",
|
|
||||||
"when": 1727016580605,
|
|
||||||
"tag": "0006_short_ravenous",
|
|
||||||
"breakpoints": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idx": 7,
|
|
||||||
"version": "7",
|
|
||||||
"when": 1727018495637,
|
|
||||||
"tag": "0007_wandering_marvel_boy",
|
|
||||||
"breakpoints": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"idx": 8,
|
|
||||||
"version": "7",
|
|
||||||
"when": 1727019109117,
|
|
||||||
"tag": "0008_mixed_sentinels",
|
|
||||||
"breakpoints": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -58,57 +58,18 @@ async function importSucursales(
|
||||||
await pipeline(lines, writable);
|
await pipeline(lines, writable);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function importBanderas(
|
|
||||||
sql: postgres.Sql,
|
|
||||||
datasetId: number,
|
|
||||||
dir: string
|
|
||||||
) {
|
|
||||||
const banderas: Papa.ParseResult<any> = Papa.parse(
|
|
||||||
await readFile(join(dir, "comercio.csv")),
|
|
||||||
{ header: true }
|
|
||||||
);
|
|
||||||
const objs = banderas.data.map((data) => ({
|
|
||||||
id_dataset: datasetId,
|
|
||||||
...data,
|
|
||||||
}));
|
|
||||||
const keys = [
|
|
||||||
"id_dataset",
|
|
||||||
"id_comercio",
|
|
||||||
"id_bandera",
|
|
||||||
"comercio_cuit",
|
|
||||||
"comercio_razon_social",
|
|
||||||
"comercio_bandera_nombre",
|
|
||||||
"comercio_bandera_url",
|
|
||||||
"comercio_ultima_actualizacion",
|
|
||||||
"comercio_version_sepa",
|
|
||||||
];
|
|
||||||
const lines = Readable.from(
|
|
||||||
objs
|
|
||||||
.filter((data) => data.id_comercio && data.id_bandera)
|
|
||||||
.map(
|
|
||||||
(data) =>
|
|
||||||
keys
|
|
||||||
.map((key) => {
|
|
||||||
const value = (data as any)[key];
|
|
||||||
if (typeof value !== "string") {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
return value.replaceAll("\t", " ").trim();
|
|
||||||
})
|
|
||||||
.join("\t") + "\n"
|
|
||||||
)
|
|
||||||
);
|
|
||||||
const writable =
|
|
||||||
await sql`copy banderas (${sql.unsafe(keys.join(", "))}) from stdin with CSV DELIMITER E'\t' QUOTE E'\b'`.writable();
|
|
||||||
await pipeline(lines, writable);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function importDataset(dir: string) {
|
async function importDataset(dir: string) {
|
||||||
console.log(dir);
|
console.log(dir);
|
||||||
const date = basename(dir).match(/(\d{4}-\d{2}-\d{2})/)![1];
|
const date = basename(dir).match(/(\d{4}-\d{2}-\d{2})/)![1];
|
||||||
const id_comercio = basename(dir).match(/comercio-sepa-(\d+)/)![1];
|
const id_comercio = basename(dir).match(/comercio-sepa-(\d+)/)![1];
|
||||||
// TODO: parsear "Ultima actualizacion" al final del CSV y insertarlo en la tabla datasets
|
// TODO: parsear "Ultima actualizacion" al final del CSV y insertarlo en la tabla datasets
|
||||||
|
|
||||||
|
// {
|
||||||
|
// const res =
|
||||||
|
// await sql`select id from datasets where name = ${basename(dir)}`;
|
||||||
|
// await importSucursales(sql, res[0].id, dir);
|
||||||
|
// }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await sql.begin(async (sql) => {
|
await sql.begin(async (sql) => {
|
||||||
let datasetId: number;
|
let datasetId: number;
|
||||||
|
@ -123,7 +84,6 @@ async function importDataset(dir: string) {
|
||||||
const comercioCuit = comercios.data[0].comercio_cuit;
|
const comercioCuit = comercios.data[0].comercio_cuit;
|
||||||
console.log(`dataset ${datasetId}, comercio ${comercioCuit}`);
|
console.log(`dataset ${datasetId}, comercio ${comercioCuit}`);
|
||||||
|
|
||||||
await importBanderas(sql, datasetId, dir);
|
|
||||||
await importSucursales(sql, datasetId, dir);
|
await importSucursales(sql, datasetId, dir);
|
||||||
|
|
||||||
let file = await readFile(join(dir, "productos.csv"));
|
let file = await readFile(join(dir, "productos.csv"));
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
"@sveltejs/kit": "^2.0.0",
|
"@sveltejs/kit": "^2.0.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^4.0.0-next.6",
|
"@sveltejs/vite-plugin-svelte": "^4.0.0-next.6",
|
||||||
"@tailwindcss/typography": "^0.5.15",
|
"@tailwindcss/typography": "^0.5.15",
|
||||||
"@types/d3-scale": "^4.0.8",
|
|
||||||
"@types/eslint": "^9.6.0",
|
"@types/eslint": "^9.6.0",
|
||||||
"@types/leaflet": "^1.9.12",
|
"@types/leaflet": "^1.9.12",
|
||||||
"@types/leaflet.markercluster": "^1.5.4",
|
"@types/leaflet.markercluster": "^1.5.4",
|
||||||
|
@ -47,11 +46,8 @@
|
||||||
"@types/node": "^22.5.0",
|
"@types/node": "^22.5.0",
|
||||||
"bits-ui": "^0.21.13",
|
"bits-ui": "^0.21.13",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"d3-array": "^3.2.4",
|
|
||||||
"d3-scale": "^4.0.2",
|
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"drizzle-orm": "^0.33.0",
|
"drizzle-orm": "^0.33.0",
|
||||||
"layerchart": "^0.44.0",
|
|
||||||
"leaflet": "^1.9.4",
|
"leaflet": "^1.9.4",
|
||||||
"leaflet.markercluster": "^1.5.3",
|
"leaflet.markercluster": "^1.5.3",
|
||||||
"lucide-svelte": "^0.441.0",
|
"lucide-svelte": "^0.441.0",
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
export function processBanderaNombre(comercio: {
|
|
||||||
comercio_cuit?: string | null;
|
|
||||||
comercio_bandera_nombre?: string | null;
|
|
||||||
}) {
|
|
||||||
if (
|
|
||||||
comercio.comercio_cuit === '30687310434' &&
|
|
||||||
!comercio.comercio_bandera_nombre?.includes('Carrefour')
|
|
||||||
) {
|
|
||||||
return `Carrefour ${comercio.comercio_bandera_nombre}`;
|
|
||||||
}
|
|
||||||
if (comercio.comercio_cuit === '30678774495') {
|
|
||||||
return `YPF ${comercio.comercio_bandera_nombre}`;
|
|
||||||
}
|
|
||||||
return comercio.comercio_bandera_nombre;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function generateGoogleMapsLink(sucursal: {
|
|
||||||
sucursales_calle: string;
|
|
||||||
sucursales_numero?: string | null;
|
|
||||||
}) {
|
|
||||||
const params = new URLSearchParams({
|
|
||||||
query: `${sucursal.sucursales_calle} ${sucursal.sucursales_numero}`
|
|
||||||
});
|
|
||||||
return `https://www.google.com/maps/search/?api=1&${params.toString()}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const pesosFormatter = new Intl.NumberFormat('es-AR', {
|
|
||||||
style: 'currency',
|
|
||||||
currency: 'ARS'
|
|
||||||
});
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { db } from '$lib/server/db';
|
import { db } from '$lib/server/db';
|
||||||
import type { PageServerLoad } from './$types';
|
import type { PageServerLoad } from './$types';
|
||||||
import { banderas, datasets, precios, sucursales } from '$lib/server/db/schema';
|
import { datasets, precios, sucursales } from '$lib/server/db/schema';
|
||||||
import { and, eq, sql } from 'drizzle-orm';
|
import { and, eq, sql } from 'drizzle-orm';
|
||||||
import { error } from '@sveltejs/kit';
|
import { error } from '@sveltejs/kit';
|
||||||
import * as Sentry from '@sentry/sveltekit';
|
import * as Sentry from '@sentry/sveltekit';
|
||||||
|
@ -21,11 +21,7 @@ export const load: PageServerLoad = async ({ params, setHeaders }) => {
|
||||||
sucursales_nombre: sucursales.sucursales_nombre,
|
sucursales_nombre: sucursales.sucursales_nombre,
|
||||||
sucursales_calle: sucursales.sucursales_calle,
|
sucursales_calle: sucursales.sucursales_calle,
|
||||||
sucursales_numero: sucursales.sucursales_numero,
|
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)
|
.from(precios)
|
||||||
.where(
|
.where(
|
||||||
|
@ -54,14 +50,7 @@ ORDER BY d1.id_comercio)
|
||||||
eq(sucursales.id_comercio, precios.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(
|
const preciosRes = await Sentry.startSpan(
|
||||||
{
|
{
|
||||||
op: 'db.query',
|
op: 'db.query',
|
||||||
|
@ -80,6 +69,54 @@ ORDER BY d1.id_comercio)
|
||||||
return error(404, `Producto ${params.id} no encontrado`);
|
return error(404, `Producto ${params.id} no encontrado`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// const precios = await sql<
|
||||||
|
// {
|
||||||
|
// productos_precio_lista: number;
|
||||||
|
// productos_descripcion: string;
|
||||||
|
// id_dataset: string;
|
||||||
|
// sucursales_latitud: number;
|
||||||
|
// sucursales_longitud: number;
|
||||||
|
// sucursales_nombre: string;
|
||||||
|
// }[]
|
||||||
|
// >`
|
||||||
|
// WITH latest_prices AS (
|
||||||
|
// SELECT
|
||||||
|
// p.id_comercio,
|
||||||
|
// p.id_bandera,
|
||||||
|
// p.id_sucursal,
|
||||||
|
// p.id_dataset,
|
||||||
|
// p.productos_precio_lista,
|
||||||
|
// p.productos_descripcion
|
||||||
|
// FROM precios p
|
||||||
|
// INNER JOIN (
|
||||||
|
// SELECT
|
||||||
|
// id_comercio,
|
||||||
|
// id_bandera,
|
||||||
|
// id_sucursal,
|
||||||
|
// MAX(id_dataset) AS max_dataset
|
||||||
|
// FROM precios
|
||||||
|
// WHERE id_producto = ${id}
|
||||||
|
// GROUP BY id_comercio, id_bandera, id_sucursal
|
||||||
|
// ) latest ON p.id_comercio = latest.id_comercio
|
||||||
|
// AND p.id_bandera = latest.id_bandera
|
||||||
|
// AND p.id_sucursal = latest.id_sucursal
|
||||||
|
// AND p.id_dataset = latest.max_dataset
|
||||||
|
// WHERE p.id_producto = ${id}
|
||||||
|
// )
|
||||||
|
// SELECT
|
||||||
|
// lp.productos_precio_lista,
|
||||||
|
// lp.productos_descripcion,
|
||||||
|
// lp.id_dataset,
|
||||||
|
// s.sucursales_latitud,
|
||||||
|
// s.sucursales_longitud,
|
||||||
|
// s.sucursales_nombre
|
||||||
|
// FROM latest_prices lp
|
||||||
|
// LEFT JOIN sucursales s ON lp.id_dataset = s.id_dataset
|
||||||
|
// AND lp.id_sucursal = s.id_sucursal
|
||||||
|
// AND lp.id_comercio = s.id_comercio
|
||||||
|
|
||||||
|
// `;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
precios: preciosRes.map((p) => ({
|
precios: preciosRes.map((p) => ({
|
||||||
...p,
|
...p,
|
||||||
|
|
|
@ -4,9 +4,13 @@
|
||||||
import Map from '$lib/components/Map.svelte';
|
import Map from '$lib/components/Map.svelte';
|
||||||
import Badge from '$lib/components/ui/badge/badge.svelte';
|
import Badge from '$lib/components/ui/badge/badge.svelte';
|
||||||
import {} from '$app/navigation';
|
import {} from '$app/navigation';
|
||||||
import { generateGoogleMapsLink, pesosFormatter, processBanderaNombre } from '$lib/sepa-utils';
|
|
||||||
|
|
||||||
export let data: PageData;
|
export let data: PageData;
|
||||||
|
|
||||||
|
const pesosFormatter = new Intl.NumberFormat('es-AR', {
|
||||||
|
style: 'currency',
|
||||||
|
currency: 'ARS'
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
|
@ -56,28 +60,19 @@
|
||||||
[
|
[
|
||||||
`fecha del precio: ${precio.dataset_date}`,
|
`fecha del precio: ${precio.dataset_date}`,
|
||||||
`precio: ${pesosFormatter.format(precio.productos_precio_lista)}`,
|
`precio: ${pesosFormatter.format(precio.productos_precio_lista)}`,
|
||||||
`comercio: ${processBanderaNombre(precio)} (${precio.comercio_razon_social} CUIT ${precio.comercio_cuit})`,
|
|
||||||
`sucursal: ${precio.sucursales_nombre}`,
|
`sucursal: ${precio.sucursales_nombre}`,
|
||||||
`dirección: ${precio.sucursales_calle} ${precio.sucursales_numero}`,
|
`dirección: ${precio.sucursales_calle} ${precio.sucursales_numero}`,
|
||||||
() => {
|
() => {
|
||||||
const a = document.createElement('a');
|
const a = document.createElement('a');
|
||||||
if (precio.sucursales_calle) {
|
const params = new URLSearchParams({
|
||||||
a.href = generateGoogleMapsLink({
|
query: `${precio.sucursales_calle} ${precio.sucursales_numero}`
|
||||||
sucursales_calle: precio.sucursales_calle,
|
});
|
||||||
sucursales_numero: precio.sucursales_numero
|
a.href = `https://www.google.com/maps/search/?api=1&${params.toString()}`;
|
||||||
});
|
|
||||||
}
|
|
||||||
a.target = '_blank';
|
a.target = '_blank';
|
||||||
a.append('ver en Google Maps');
|
a.append('ver en Google Maps');
|
||||||
return a;
|
return a;
|
||||||
},
|
},
|
||||||
`descripcion del producto segun el comercio: ${precio.productos_descripcion}`,
|
`descripcion del producto segun el comercio: ${precio.productos_descripcion}`
|
||||||
() => {
|
|
||||||
const a = document.createElement('a');
|
|
||||||
a.href = `/id_producto/${data.id_producto}/sucursal/${precio.id_comercio}/${precio.id_sucursal}`;
|
|
||||||
a.append('ver precios historicos');
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
].forEach((el) => {
|
].forEach((el) => {
|
||||||
div.append(typeof el === 'function' ? el() : el);
|
div.append(typeof el === 'function' ? el() : el);
|
||||||
div.append(document.createElement('br'));
|
div.append(document.createElement('br'));
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
import { precios, sucursales } from '$lib/server/db/schema';
|
|
||||||
import { and, eq } from 'drizzle-orm';
|
|
||||||
import type { PageServerLoad } from './$types';
|
|
||||||
import * as Sentry from '@sentry/sveltekit';
|
|
||||||
import { db } from '$lib/server/db';
|
|
||||||
|
|
||||||
export const load: PageServerLoad = async ({ params, setHeaders }) => {
|
|
||||||
const id = BigInt(params.id);
|
|
||||||
const id_comercio = parseInt(params.id_comercio);
|
|
||||||
const id_sucursal = parseInt(params.id_sucursal);
|
|
||||||
|
|
||||||
const sucursalQuery = db.query.sucursales.findFirst({
|
|
||||||
where: and(eq(sucursales.id_comercio, id_comercio), eq(sucursales.id_sucursal, id_sucursal)),
|
|
||||||
with: {
|
|
||||||
bandera: true
|
|
||||||
},
|
|
||||||
orderBy: (sucursales, { desc }) => [desc(sucursales.id_dataset)]
|
|
||||||
});
|
|
||||||
const sucursal = await Sentry.startSpan(
|
|
||||||
{
|
|
||||||
op: 'db.query',
|
|
||||||
name: sucursalQuery.toSQL().sql,
|
|
||||||
data: { 'db.system': 'postgresql' }
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
} as any,
|
|
||||||
() => sucursalQuery
|
|
||||||
);
|
|
||||||
|
|
||||||
const preciosHistoricosQuery = db.query.precios.findMany({
|
|
||||||
where: and(
|
|
||||||
eq(precios.id_producto, id),
|
|
||||||
eq(precios.id_comercio, id_comercio),
|
|
||||||
eq(precios.id_sucursal, id_sucursal)
|
|
||||||
),
|
|
||||||
with: {
|
|
||||||
dataset: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const preciosHistoricosUncasted = await Sentry.startSpan(
|
|
||||||
{
|
|
||||||
op: 'db.query',
|
|
||||||
name: preciosHistoricosQuery.toSQL().sql,
|
|
||||||
data: { 'db.system': 'postgresql' }
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
} as any,
|
|
||||||
() => preciosHistoricosQuery
|
|
||||||
);
|
|
||||||
const preciosHistoricos = preciosHistoricosUncasted.map((precio) => ({
|
|
||||||
...precio,
|
|
||||||
productos_precio_lista:
|
|
||||||
precio.productos_precio_lista && parseFloat(precio.productos_precio_lista)
|
|
||||||
}));
|
|
||||||
|
|
||||||
setHeaders({
|
|
||||||
'Cache-Control': 'public, max-age=600'
|
|
||||||
});
|
|
||||||
|
|
||||||
return { preciosHistoricos, sucursal };
|
|
||||||
};
|
|
|
@ -1,88 +0,0 @@
|
||||||
<script lang="ts">
|
|
||||||
import { format } from 'date-fns';
|
|
||||||
import type { PageData } from './$types';
|
|
||||||
import { Chart, Svg, Axis, Spline, Highlight, Tooltip, TooltipItem } from 'layerchart';
|
|
||||||
import { scaleTime } from 'd3-scale';
|
|
||||||
import { ArrowLeft } from 'lucide-svelte';
|
|
||||||
import { generateGoogleMapsLink, pesosFormatter, processBanderaNombre } from '$lib/sepa-utils';
|
|
||||||
import { MapPin } from 'lucide-svelte';
|
|
||||||
import Button from '$lib/components/ui/button/button.svelte';
|
|
||||||
import { es } from 'date-fns/locale';
|
|
||||||
|
|
||||||
export let data: PageData;
|
|
||||||
|
|
||||||
$: dateSeriesData = data.preciosHistoricos
|
|
||||||
.map((precio) => ({
|
|
||||||
date: precio.dataset?.date ? new Date(precio.dataset?.date) : null,
|
|
||||||
value: precio.productos_precio_lista
|
|
||||||
}))
|
|
||||||
.filter((precio): precio is { date: Date; value: number } => !!precio.date)
|
|
||||||
.sort((a, b) => a.date.getTime() - b.date.getTime());
|
|
||||||
$: latestPrice = dateSeriesData[dateSeriesData.length - 1].value;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="max-w-screen flex items-stretch gap-3 overflow-hidden px-2">
|
|
||||||
<button on:click={() => window.history.back()}>
|
|
||||||
<ArrowLeft class="size-8 flex-shrink-0" />
|
|
||||||
</button>
|
|
||||||
<div class="flex flex-wrap items-center gap-x-2 overflow-hidden p-1">
|
|
||||||
<h1 class="overflow-hidden text-ellipsis whitespace-nowrap pb-1 text-2xl font-bold">
|
|
||||||
{data.preciosHistoricos[0].productos_descripcion}
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p class="px-4 py-2">
|
|
||||||
Viendo precios del <strong
|
|
||||||
>{data.sucursal?.bandera && processBanderaNombre(data.sucursal?.bandera)}</strong
|
|
||||||
>
|
|
||||||
en la sucursal <strong>"{data.sucursal?.sucursales_nombre}"</strong>
|
|
||||||
{#if data.sucursal?.sucursales_calle}
|
|
||||||
en {data.sucursal?.sucursales_calle}
|
|
||||||
{data.sucursal?.sucursales_numero}
|
|
||||||
{/if}
|
|
||||||
</p>
|
|
||||||
<div class="flex flex-col px-4 py-2">
|
|
||||||
<span class="text-sm">Precio actual:</span>
|
|
||||||
<span class="text-2xl font-bold">{pesosFormatter.format(latestPrice)}</span>
|
|
||||||
</div>
|
|
||||||
<div class="flex gap-2 px-4 py-2">
|
|
||||||
{#if data.sucursal?.sucursales_calle}
|
|
||||||
<Button
|
|
||||||
href={generateGoogleMapsLink({
|
|
||||||
sucursales_calle: data.sucursal?.sucursales_calle,
|
|
||||||
sucursales_numero: data.sucursal?.sucursales_numero
|
|
||||||
})}
|
|
||||||
target="_blank"
|
|
||||||
variant="outline"
|
|
||||||
size="sm"
|
|
||||||
class="inline-flex items-center gap-1"
|
|
||||||
>
|
|
||||||
<MapPin class="size-4" />
|
|
||||||
Google Maps
|
|
||||||
</Button>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
<div class="h-[300px] border-y p-4">
|
|
||||||
<Chart
|
|
||||||
data={dateSeriesData}
|
|
||||||
x="date"
|
|
||||||
xScale={scaleTime()}
|
|
||||||
y="value"
|
|
||||||
yDomain={[0, null]}
|
|
||||||
yNice
|
|
||||||
padding={{ left: 16, bottom: 24 }}
|
|
||||||
tooltip={{ mode: 'bisect-x' }}
|
|
||||||
>
|
|
||||||
<Svg>
|
|
||||||
<Axis placement="left" grid rule />
|
|
||||||
<Axis placement="bottom" format={(d) => format(d, 'dd/MM', { locale: es })} rule />
|
|
||||||
<Spline class="stroke-primary stroke-2" />
|
|
||||||
<Highlight points lines />
|
|
||||||
</Svg>
|
|
||||||
<Tooltip header={(data) => format(data.date, 'eee, MMMM do', { locale: es })} let:data>
|
|
||||||
<TooltipItem label="value" value={data.value} />
|
|
||||||
</Tooltip>
|
|
||||||
</Chart>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -4,7 +4,7 @@ import typography from '@tailwindcss/typography';
|
||||||
|
|
||||||
const config: Config = {
|
const config: Config = {
|
||||||
darkMode: ['class'],
|
darkMode: ['class'],
|
||||||
content: ['./src/**/*.{html,js,svelte,ts}', '../node_modules/layerchart/**/*.{svelte,js}'],
|
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||||
safelist: ['dark'],
|
safelist: ['dark'],
|
||||||
theme: {
|
theme: {
|
||||||
container: {
|
container: {
|
||||||
|
@ -48,13 +48,6 @@ const config: Config = {
|
||||||
card: {
|
card: {
|
||||||
DEFAULT: 'hsl(var(--card) / <alpha-value>)',
|
DEFAULT: 'hsl(var(--card) / <alpha-value>)',
|
||||||
foreground: 'hsl(var(--card-foreground) / <alpha-value>)'
|
foreground: 'hsl(var(--card-foreground) / <alpha-value>)'
|
||||||
},
|
|
||||||
surface: {
|
|
||||||
content: 'hsl(var(--card-foreground) / <alpha-value>)',
|
|
||||||
100: 'hsl(var(--background) / <alpha-value>)',
|
|
||||||
200: 'hsl(var(---muted) / <alpha-value>)',
|
|
||||||
// not sure what color maps here (should be darker than 200). Could add a new color to `app.css`
|
|
||||||
300: 'hsl(var(--background) / <alpha-value>)'
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
borderRadius: {
|
borderRadius: {
|
||||||
|
|
Loading…
Reference in a new issue