2026-02-04 17:32:54 +01:00
|
|
|
-- eliminar los drop para prod
|
|
|
|
|
drop domain if exists imei_type cascade;
|
|
|
|
|
CREATE DOMAIN imei_type as varchar(15);
|
|
|
|
|
drop domain if exists iccid_type cascade;
|
|
|
|
|
CREATE DOMAIN iccid_type as varchar(22);
|
|
|
|
|
drop domain if exists imsi_type cascade;
|
|
|
|
|
CREATE DOMAIN imsi_type as varchar(15);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE table if not exists sim_cards (
|
|
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
imei imei_type,
|
|
|
|
|
iccid iccid_type,
|
|
|
|
|
imsi imsi_type,
|
|
|
|
|
user_id BIGINT,
|
|
|
|
|
subscription_id BIGINT,
|
|
|
|
|
created_at TIMESTAMP,
|
|
|
|
|
last_update TIMESTAMP,
|
|
|
|
|
deleted_at TIMESTAMP
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE if not exists sim_envio (
|
|
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
codigo_origen TEXT,
|
|
|
|
|
codigo_distrito TEXT,
|
|
|
|
|
pedido_id BIGINT,
|
|
|
|
|
sim_id BIGINT,
|
|
|
|
|
|
|
|
|
|
fecha_envio TIMESTAMP,
|
|
|
|
|
fecha_email TIMESTAMP,
|
|
|
|
|
is_preactivado BOOLEAN,
|
|
|
|
|
fecha_devolucion TIMESTAMP,
|
|
|
|
|
created_at TIMESTAMP,
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_sim_id
|
|
|
|
|
FOREIGN KEY(sim_id) REFERENCES sim_cards(id)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- Mock, No es parte de SIMs
|
|
|
|
|
CREATE TABLE if not exists sf_subscription (
|
|
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- No habria que meterle las propiedades del tipo de subscripcion
|
|
|
|
|
CREATE TABLE if not exists sim_subscription_types (
|
|
|
|
|
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
subscription TEXT NOT NULL,
|
|
|
|
|
created_at TIMESTAMP,
|
|
|
|
|
updated_at TIMESTAMP,
|
|
|
|
|
deleted_at TIMESTAMP
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE if not exists sim_company (
|
|
|
|
|
id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
name TEXT,
|
|
|
|
|
created_at TIMESTAMP,
|
|
|
|
|
updated_at TIMESTAMP,
|
|
|
|
|
deleted_at TIMESTAMP
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE sim_subscription (
|
|
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
company_id INT,
|
|
|
|
|
subscription_type_id INT,
|
|
|
|
|
sim_id BIGINT,
|
|
|
|
|
order_id BIGINT,
|
|
|
|
|
|
|
|
|
|
created_at TIMESTAMP,
|
|
|
|
|
updated_at TIMESTAMP,
|
|
|
|
|
deleted_at TIMESTAMP,
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_sim_id
|
|
|
|
|
FOREIGN KEY(sim_id) REFERENCES sim_cards(id),
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_company_id
|
|
|
|
|
FOREIGN KEY(company_id) REFERENCES sim_company(id),
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_subscription_type_id
|
|
|
|
|
FOREIGN KEY(subscription_type_id) REFERENCES sim_subscription_types(id)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE if not exists sim_subscription_operations (
|
|
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
sim_id BIGINT,
|
|
|
|
|
operation_type TEXT NOT NULL,
|
|
|
|
|
happened_at TIMESTAMP,
|
|
|
|
|
|
|
|
|
|
CONSTRAINT valid_operations CHECK (
|
|
|
|
|
operation_type in ('free','preactivate','activate','pause','cancel')
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_subscription_id
|
|
|
|
|
FOREIGN KEY(sim_id)
|
|
|
|
|
REFERENCES sim_subscription(id)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- Se supone que indica un cambio
|
|
|
|
|
CREATE TABLE sim_subscription_historic (
|
|
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
subscription_id BIGINT,
|
|
|
|
|
iccid iccid_type,
|
|
|
|
|
company_id INT
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE TYPE status_enum AS ENUM ('noRequestID','noMassID','running','finished','error','other');
|
|
|
|
|
|
|
|
|
|
-- Tabla para gestionar las peticiones de cambio de objenious.
|
|
|
|
|
-- Para una o mas lineas se pueden lanzar operacione que no sabemos
|
|
|
|
|
-- con certeza cuando van a terminar.
|
|
|
|
|
CREATE TABLE if not exists objenious_operation (
|
2026-02-06 12:14:46 +01:00
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
retry_count INT DEFAULT 0,
|
|
|
|
|
max_retry INT DEFAULT 5,
|
|
|
|
|
max_date_retry TIMESTAMP DEFAULT NULL,
|
|
|
|
|
iccids TEXT,
|
|
|
|
|
request_id TEXT,
|
|
|
|
|
mass_action_id TEXT,
|
|
|
|
|
operation TEXT NOT NULL,
|
|
|
|
|
start_date TIMESTAMP NOT NULL DEFAULT now(),
|
|
|
|
|
last_change_date TIMESTAMP NOT NULL DEFAULT now(),
|
|
|
|
|
end_date TIMESTAMP,
|
|
|
|
|
error TEXT,
|
|
|
|
|
status status_enum,
|
|
|
|
|
objenious_status TEXT
|
2026-02-04 17:32:54 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- operaciones pendientes para revisar
|
|
|
|
|
CREATE INDEX IF NOT EXISTS pending_operations
|
|
|
|
|
ON objenious_operation(start_date)
|
|
|
|
|
WHERE end_date IS NULL;
|
|
|
|
|
|
|
|
|
|
CREATE TABLE if not exists objenious_operation_change (
|
2026-02-06 12:14:46 +01:00
|
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
|
|
|
operation_id BIGINT,
|
|
|
|
|
creation_date TIMESTAMP NOT NULL DEFAULT now(),
|
|
|
|
|
error TEXT,
|
|
|
|
|
new_status status_enum,
|
|
|
|
|
previous_status status_enum,
|
|
|
|
|
new_objenious_status TEXT,
|
|
|
|
|
previous_objenious_status TEXT,
|
|
|
|
|
new_request_id TEXT,
|
|
|
|
|
new_mass_action_id TEXT,
|
|
|
|
|
|
2026-02-04 17:32:54 +01:00
|
|
|
CONSTRAINT fk_operation_id
|
|
|
|
|
FOREIGN KEY(operation_id) REFERENCES objenious_operation(id)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
CREATE INDEX operation_change
|
|
|
|
|
ON objenious_operation_change(operation_id);
|