Base + compilacion simple

This commit is contained in:
2026-03-09 17:11:09 +01:00
parent 221abe0d33
commit 97f8c55199
22 changed files with 1006 additions and 32 deletions

View File

@@ -1,3 +1,6 @@
-- Me he pasado mucho con todo el proceso, lo más probable es que haya que eliminar
-- la parte de control de activacion que eso ya no lo lleva la aplicacion.
CREATE EXTENSION pgcrypto; -- para los random bytes
-- 1. Función de generacion de uuidv7 copiada de github porque no está en postgre 16
CREATE OR REPLACE FUNCTION
@@ -27,7 +30,7 @@ $$
;
-- 2. Tabla de Tarjetas
-- NUNCA se guarda el numero completo (PAN). Solo los últimos 4 dígitos.
-- Posiblemente haya que mantener solo el id e ignorar el PAN
CREATE TABLE payment_cards (
card_id UUID PRIMARY KEY DEFAULT uuid_generate_v7(),
user_id UUID REFERENCES users(user_id),
@@ -39,18 +42,23 @@ CREATE TABLE payment_cards (
);
-- 3. Tabla de Códigos de Activación
-- No creo que vaya a recibir confirmación de activación porque es de otro proyecto,
-- pero por lo menos se mantiene el registro de cuando se ha creado.
-- El algoritmo de hash es sha256
CREATE TABLE activation_codes (
code_id UUID PRIMARY KEY DEFAULT uuid_generate_v7(),
card_id UUID REFERENCES payment_cards(card_id), -- Una tarjeta, maximo un un código activo borrar o solo con expires_at?
code_plain TEXT NOT NULL, --
code_hash TEXT NOT NULL, -- Guardar el código hasheado, el original se imprime y se manda
is_used BOOLEAN DEFAULT FALSE,
is_blocked BOOLEAN DEFAULT FALSE,
failed_attempts INT DEFAULT 0,
expires_at TIMESTAMPTZ NOT NULL,
expires_at TIMESTAMPTZ, -- Si es nulo es permanenete (Solo para pruebas)
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 4. Registro de Auditoría y Dispositivos (Log de Uso)
-- Lo mismo, muy sobredimensionado, no creo que haya falta en este punto
CREATE TABLE activation_logs (
log_id UUID PRIMARY KEY DEFAULT uuid_generate_v7(),
card_id UUID REFERENCES payment_cards(card_id),
@@ -62,6 +70,8 @@ CREATE TABLE activation_logs (
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Trigger para cuando se haga una actualizacion en activation_codes
-- se supone que cuando se intenta activar la tarjeta.
CREATE OR REPLACE FUNCTION log_activation_attempt()
RETURNS TRIGGER AS $$
BEGIN

View File

@@ -1,6 +1,7 @@
-- He separado el procedimiento de activacion en otro archivo por comodidad de desarrollo
-- creo que es mas seguro meter la lógica de activaciones directamente en la bdd que en
-- un server node y asi evitamos problemas de consistencia entre versiones.
--
CREATE OR REPLACE FUNCTION activate_payment_card(
p_card_id UUID, -- uuidv7 de la tarjeta
@@ -47,7 +48,7 @@ BEGIN
RETURN;
END IF;
-- 2.4 Si el código es demasiado viejo
IF v_expires_at < NOW() THEN
RETURN QUERY SELECT FALSE, 'CODE_EXPIRED';
RETURN;