diff --git a/deployment/database/base/01-ordenes-sim.sql b/deployment/database/base/01-ordenes-sim.sql index 31c0984..43d5098 100644 --- a/deployment/database/base/01-ordenes-sim.sql +++ b/deployment/database/base/01-ordenes-sim.sql @@ -29,7 +29,7 @@ CREATE TABLE IF NOT EXISTS order_tracking ( start_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'), update_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'), finish_date TIMESTAMP -) +); -- Busqueda según id de rabbit CREATE INDEX IF NOT EXISTS idx_order_correlation @@ -40,7 +40,7 @@ CREATE INDEX IF NOT EXISTS pending_orders WHERE order_tracking.finish_date IS NULL; CREATE TABLE IF NOT EXISTS order_history( - id SERIAL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, order_id BIGINT NOT NULL, previous_status order_status NOT NULL, -- Siempre hay un estado anterior, para casos excepcioneale "unknown" new_status order_status NOT NULL, diff --git a/deployment/database/base/02-objenious.sql b/deployment/database/base/02-objenious.sql index 587b10b..99c95dd 100644 --- a/deployment/database/base/02-objenious.sql +++ b/deployment/database/base/02-objenious.sql @@ -15,7 +15,7 @@ CREATE TABLE if not exists objenious_operation ( request_id TEXT, mass_action_id TEXT, operation TEXT NOT NULL, - start_date TIMESTAMP NOT NULL DEFAULT now(), + start_date TIMESTAMP NOT NULL DEFAULT now(), last_change_date TIMESTAMP NOT NULL DEFAULT now(), end_date TIMESTAMP, error TEXT, diff --git a/deployment/database/base/03-versions.sql b/deployment/database/base/03-versions.sql new file mode 100644 index 0000000..a88f2cc --- /dev/null +++ b/deployment/database/base/03-versions.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS db_versions ( + version TEXT PRIMARY KEY, -- version semantica x.x.x + notes TEXT, + creation_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'), + stable BOOLEAN DEFAULT FALSE -- Si la version ha sido testada y se puede desplegar +); + +INSERT INTO db_versions ( + version, + notes +) +VALUES ( + '0.1.0', + 'Versión base' +); diff --git a/deployment/database/esquema_final_v1.3.1.sql b/deployment/database/esquema_final_v1.0.0.sql similarity index 50% rename from deployment/database/esquema_final_v1.3.1.sql rename to deployment/database/esquema_final_v1.0.0.sql index 773c41d..6b837a9 100644 --- a/deployment/database/esquema_final_v1.3.1.sql +++ b/deployment/database/esquema_final_v1.0.0.sql @@ -2,7 +2,7 @@ -- PostgreSQL database dump -- -\restrict KSNzZnHZpEceNNT6ECpaur3DZ2vfo46zPOlHHzj65wcCLFVfh0bZaudbdKNNiIC +\restrict n4DeGueXrI8Aidzy0srXafkz44IcO9Aq9s6hheFCSSTlVeaqyQcAQSMAfGX3yUg -- Dumped from database version 16.11 (Ubuntu 16.11-0ubuntu0.24.04.1) -- Dumped by pg_dump version 16.11 (Ubuntu 16.11-0ubuntu0.24.04.1) @@ -63,6 +63,18 @@ SET default_tablespace = ''; SET default_table_access_method = heap; +-- +-- Name: db_versions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.db_versions ( + version text NOT NULL, + notes text, + creation_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL, + stable boolean DEFAULT false +); + + -- -- Name: objenious_operation; Type: TABLE; Schema: public; Owner: - -- @@ -77,7 +89,7 @@ CREATE TABLE public.objenious_operation ( mass_action_id text, operation text NOT NULL, start_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL, - last_change_date timestamp without time zone DEFAULT now() NOT NULL, + last_change_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL, end_date timestamp without time zone, error text, status public.status_enum, @@ -92,7 +104,7 @@ CREATE TABLE public.objenious_operation ( CREATE TABLE public.objenious_operation_change ( id bigint NOT NULL, operation_id bigint, - creation_date timestamp without time zone DEFAULT now() NOT NULL, + creation_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL, error text, new_status public.status_enum, previous_status public.status_enum, @@ -131,6 +143,77 @@ ALTER TABLE public.objenious_operation ALTER COLUMN id ADD GENERATED ALWAYS AS I ); +-- +-- Name: order_history; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.order_history ( + id bigint NOT NULL, + order_id bigint NOT NULL, + previous_status public.order_status NOT NULL, + new_status public.order_status NOT NULL, + change_reason text, + change_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL +); + + +-- +-- Name: order_history_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +ALTER TABLE public.order_history ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( + SEQUENCE NAME public.order_history_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: order_tracking; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.order_tracking ( + id bigint NOT NULL, + correlation_id character varying(255) NOT NULL, + exchange character varying(100), + routing_key character varying(100), + order_type public.order_types DEFAULT 'unknown'::public.order_types NOT NULL, + payload jsonb, + status public.order_status DEFAULT 'pending'::public.order_status NOT NULL, + retry_count integer DEFAULT 0, + error_message text, + error_stacktrace text, + start_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL, + update_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL, + finish_date timestamp without time zone +); + + +-- +-- Name: order_tracking_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +ALTER TABLE public.order_tracking ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( + SEQUENCE NAME public.order_tracking_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- Name: db_versions db_versions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.db_versions + ADD CONSTRAINT db_versions_pkey PRIMARY KEY (version); + + -- -- Name: objenious_operation_change objenious_operation_change_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -147,6 +230,43 @@ ALTER TABLE ONLY public.objenious_operation ADD CONSTRAINT objenious_operation_pkey PRIMARY KEY (id); +-- +-- Name: order_history order_history_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.order_history + ADD CONSTRAINT order_history_pkey PRIMARY KEY (id); + + +-- +-- Name: order_tracking order_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.order_tracking + ADD CONSTRAINT order_tracking_pkey PRIMARY KEY (id); + + +-- +-- Name: idx_order_change_date; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_order_change_date ON public.order_history USING btree (change_date); + + +-- +-- Name: idx_order_correlation; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_order_correlation ON public.order_tracking USING btree (correlation_id); + + +-- +-- Name: idx_order_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_order_id ON public.order_history USING btree (order_id); + + -- -- Name: operation_change; Type: INDEX; Schema: public; Owner: - -- @@ -161,6 +281,13 @@ CREATE INDEX operation_change ON public.objenious_operation_change USING btree ( CREATE INDEX pending_operations ON public.objenious_operation USING btree (start_date) WHERE (end_date IS NULL); +-- +-- Name: pending_orders; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX pending_orders ON public.order_tracking USING btree (start_date) WHERE (finish_date IS NULL); + + -- -- Name: objenious_operation_change fk_operation_id; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -169,9 +296,17 @@ ALTER TABLE ONLY public.objenious_operation_change ADD CONSTRAINT fk_operation_id FOREIGN KEY (operation_id) REFERENCES public.objenious_operation(id); +-- +-- Name: order_history fk_order_id; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.order_history + ADD CONSTRAINT fk_order_id FOREIGN KEY (order_id) REFERENCES public.order_tracking(id) ON DELETE CASCADE; + + -- -- PostgreSQL database dump complete -- -\unrestrict KSNzZnHZpEceNNT6ECpaur3DZ2vfo46zPOlHHzj65wcCLFVfh0bZaudbdKNNiIC +\unrestrict n4DeGueXrI8Aidzy0srXafkz44IcO9Aq9s6hheFCSSTlVeaqyQcAQSMAfGX3yUg diff --git a/deployment/database/init.sql b/deployment/database/init.sql index 8c056e7..04ed2d2 100644 --- a/deployment/database/init.sql +++ b/deployment/database/init.sql @@ -29,7 +29,7 @@ CREATE TABLE IF NOT EXISTS order_tracking ( start_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'), update_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'), finish_date TIMESTAMP -) +); -- Busqueda según id de rabbit CREATE INDEX IF NOT EXISTS idx_order_correlation @@ -40,7 +40,7 @@ CREATE INDEX IF NOT EXISTS pending_orders WHERE order_tracking.finish_date IS NULL; CREATE TABLE IF NOT EXISTS order_history( - id SERIAL PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, order_id BIGINT NOT NULL, previous_status order_status NOT NULL, -- Siempre hay un estado anterior, para casos excepcioneale "unknown" new_status order_status NOT NULL, @@ -78,7 +78,7 @@ CREATE TABLE if not exists objenious_operation ( request_id TEXT, mass_action_id TEXT, operation TEXT NOT NULL, - start_date TIMESTAMP NOT NULL DEFAULT now(), + start_date TIMESTAMP NOT NULL DEFAULT now(), last_change_date TIMESTAMP NOT NULL DEFAULT now(), end_date TIMESTAMP, error TEXT, @@ -109,3 +109,18 @@ CREATE TABLE if not exists objenious_operation_change ( CREATE INDEX operation_change ON objenious_operation_change(operation_id); +CREATE TABLE IF NOT EXISTS db_versions ( + version TEXT PRIMARY KEY, -- version semantica x.x.x + notes TEXT, + creation_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'), + stable BOOLEAN DEFAULT FALSE -- Si la version ha sido testada y se puede desplegar +); + +INSERT INTO db_versions ( + version, + notes +) +VALUES ( + '0.1.0', + 'Versión base' +); diff --git a/deployment/database/migrations/1.0.0.sql b/deployment/database/migrations/1.0.0_utc.sql similarity index 68% rename from deployment/database/migrations/1.0.0.sql rename to deployment/database/migrations/1.0.0_utc.sql index 20ae098..2b62cb4 100644 --- a/deployment/database/migrations/1.0.0.sql +++ b/deployment/database/migrations/1.0.0_utc.sql @@ -4,3 +4,12 @@ ALTER TABLE objenious_operation ALTER TABLE objenious_operation_change ALTER COLUMN creation_date SET DEFAULT (now() at time zone 'utc'); + +INSERT INTO db_versions ( + version, + notes +) +VALUES ( + '1.0.0', + 'Fechas modificadas para que todas sean en base a UTC' +); diff --git a/deployment/database/runMigrations.sh b/deployment/database/runMigrations.sh index 75bbb67..325545e 100755 --- a/deployment/database/runMigrations.sh +++ b/deployment/database/runMigrations.sh @@ -12,6 +12,7 @@ usage() { echo "Uso: $0 -v [-e ]" echo " -v Versión semántica objetivo (ej: 1.2.0)" echo " -e (Opcional) Ruta al archivo .env para cargar variables" + echo " Los archivos de verions tienen que tener el formato x.x.x_descripcion.sql (Es importante la _ para serpar las partes) " exit 1 } @@ -84,7 +85,8 @@ for f in $(ls $MIGRATIONS_DIR/*.sql | sort -V); do FILE_VER=$(echo "$FILENAME" | sed -E 's/^V//' | awk -F_ '{print $1}') # Comparación semántica - LOWEST=$(echo -e "$FILE_VER\n$TARGET_VERSION" | sort -V | head -n1) + echo "comparando $TARGET_VERSION con $FILE_VER" + LOWEST=$(echo -e "$TARGET_VERSION\n$FILE_VER" | sort -V | head -n1) if [ "$LOWEST" == "$FILE_VER" ] || [ "$FILE_VER" == "$TARGET_VERSION" ]; then echo "~> Aplicando: $FILENAME ($FILE_VER)"