infoalloggi-monorepo/apps/db/migrations/37_rinnovi.up.sql
Marco Pedone 1307f352a4 feat: enhance payment preparation logic and add rinnovo handling
- Refactor `preparePayment` function to handle multiple order types including Rinnovo.
- Introduce new `RinnovoSolver` function to calculate renewal packs based on duration.
- Add `createRinnovo` service to manage the creation of renewal orders.
- Update `whIntentSucceededHandler` to handle payment confirmations for Rinnovo and other order types.
- Introduce default conditions for packs in `prezziario.service.ts`.
- Add new utility functions for managing renewal durations and permanenza.
- Update database interactions to ensure proper handling of orders and renewals.
- Enhance error handling and logging throughout the payment and renewal processes.
2026-03-17 18:46:43 +01:00

261 lines
No EOL
5.6 KiB
SQL

ALTER TABLE IF EXISTS public.ordini
ALTER COLUMN servizio_id
DROP NOT NULL;
ALTER TABLE IF EXISTS public.ordini
ADD COLUMN IF NOT EXISTS rinnovo_id UUID;
CREATE TABLE IF NOT EXISTS public.rinnovi (
id UUID NOT NULL DEFAULT gen_random_uuid (),
"userId" UUID NOT NULL,
codice TEXT NOT NULL,
decorrenza TIMESTAMP WITHOUT TIME ZONE NOT NULL,
scadenza timestamp without time zone NOT NULL,
gestionale_id TEXT
);
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'rinnovo_user_fkey'
) THEN
ALTER TABLE public.rinnovi
ADD CONSTRAINT rinnovo_user_fkey
FOREIGN KEY ("userId") REFERENCES public.users (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
-- Primary Key
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'rinnovi_pkey'
AND conrelid = 'public.rinnovi'::regclass
) THEN
ALTER TABLE public.rinnovi
ADD CONSTRAINT rinnovi_pkey PRIMARY KEY (id);
END IF;
END $$;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'ordine_rinnovo_fkey') THEN
ALTER TABLE public.ordini
ADD CONSTRAINT ordine_rinnovo_fkey FOREIGN KEY (rinnovo_id) REFERENCES public.rinnovi (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE NOT VALID;
END IF;
END;
$$;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'only_one_service') THEN
ALTER TABLE public.ordini
ADD CONSTRAINT only_one_service CHECK (
(
servizio_id IS NOT NULL
AND rinnovo_id IS NULL
)
OR (
servizio_id IS NULL
AND rinnovo_id IS NOT NULL
)
) NOT VALID;
END IF;
END;
$$;
ALTER TABLE IF EXISTS public.prezziario
ADD COLUMN IF NOT EXISTS order_type "OrderTypeEnum";
ALTER TABLE IF EXISTS public.prezziario
ADD COLUMN IF NOT EXISTS service_type "TipologiaPosizioneEnum";
UPDATE public.prezziario
SET
service_type = 'Transitorio'
WHERE
idprezziario = 'ACCONTO_BD'
OR idprezziario LIKE 'SALDOBD%'
OR idprezziario = 'CONS_TRANS'
OR idprezziario = 'CONS_30GG';
UPDATE public.prezziario
SET
service_type = 'Stabile'
WHERE
idprezziario = 'ACCONTO_CA'
OR idprezziario LIKE 'SALDOCA%'
OR idprezziario = 'CONS_COMM'
OR idprezziario = 'CONS_4+4'
OR idprezziario = 'CONS_3+2';
UPDATE public.prezziario
SET
order_type = 'Acconto'
WHERE
idprezziario LIKE 'ACCONTO%';
UPDATE public.prezziario
SET
order_type = 'Saldo'
WHERE
idprezziario LIKE 'SALDO%';
UPDATE public.prezziario
SET
order_type = 'Consulenza'
WHERE
idprezziario LIKE 'CONS%';
ALTER TABLE IF EXISTS public.prezziario
DROP COLUMN IF EXISTS "isAcconto";
ALTER TABLE IF EXISTS public.prezziario
DROP COLUMN IF EXISTS "isSaldo";
ALTER TABLE IF EXISTS public.prezziario
DROP COLUMN IF EXISTS "isConsulenza";
ALTER TABLE IF EXISTS public.prezziario
DROP COLUMN IF EXISTS "isStabile";
ALTER TABLE IF EXISTS public.prezziario
DROP COLUMN IF EXISTS "isTransitorio";
ALTER TABLE IF EXISTS public.prezziario
ADD COLUMN IF NOT EXISTS service_variant integer;
UPDATE public.prezziario
SET
service_variant = 4
WHERE
idprezziario = 'SALDOBD_12MESI';
UPDATE public.prezziario
SET
service_variant = 0
WHERE
idprezziario = 'SALDOBD_1MESE';
UPDATE public.prezziario
SET
service_variant = 1
WHERE
idprezziario = 'SALDOBD_3MESI';
UPDATE public.prezziario
SET
service_variant = 2
WHERE
idprezziario = 'SALDOBD_6MESI';
UPDATE public.prezziario
SET
service_variant = 3
WHERE
idprezziario = 'SALDOBD_9MESI';
UPDATE public.prezziario
SET
service_variant = 0
WHERE
idprezziario = 'SALDOCA500';
UPDATE public.prezziario
SET
service_variant = 1
WHERE
idprezziario = 'SALDOCA500+';
UPDATE public.prezziario
SET
service_variant = 2
WHERE
idprezziario = 'SALDOCA700+';
INSERT INTO
public.prezziario (
idprezziario,
prezzo_cent,
testo_condizioni,
"isActive",
nome_it,
nome_en,
desc_it,
desc_en,
sconto,
order_type,
service_type,
service_variant
)
VALUES (
'CERCO_BD365',
46000,
'CONDIZIONI_CERCHI',
TRUE,
'Rinnovo permanenza 12 mesi',
'Renewal 12 months',
'Rinnovo permanenza 12 mesi',
'Renewal 12 months',
0,
'Rinnovo',
'Transitorio',
4
),
(
'CERCO_BD30',
8000,
'CONDIZIONI_CERCHI',
TRUE,
'Rinnovo permanenza 1 mese',
'Renewal 1 month',
'Rinnovo permanenza 1 mese',
'Renewal 1 month',
0,
'Rinnovo',
'Transitorio',
0
),
(
'CERCO_BD90',
25000,
'CONDIZIONI_CERCHI',
TRUE,
'Rinnovo permanenza 3 mesi',
'Renewal 3 months',
'Rinnovo permanenza 3 mesi',
'Renewal 3 months',
0,
'Rinnovo',
'Transitorio',
1
),
(
'CERCO_BD180',
36000,
'CONDIZIONI_CERCHI',
TRUE,
'Rinnovo permanenza 6 mesi',
'Renewal 6 months',
'Rinnovo permanenza 6 mesi',
'Renewal 6 months',
0,
'Rinnovo',
'Transitorio',
2
),
(
'CERCO_BD270',
41000,
'CONDIZIONI_CERCHI',
TRUE,
'Rinnovo permanenza 9 mesi',
'Renewal 9 months',
'Rinnovo permanenza 9 mesi',
'Renewal 9 months',
0,
'Rinnovo',
'Transitorio',
3
)
ON CONFLICT (idprezziario) DO NOTHING;