Base + compilacion simple
This commit is contained in:
0
deployment/database/init.sql
Normal file
0
deployment/database/init.sql
Normal 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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user