Files
pgz-sport/migrations/email_templates_20260505.sql
damir b72d037141 CRITICAL FIX (Slika 11, 12): /api/v2/auth/me alias + frontend fix
Bug: crm_v2.html, admin_users.html, ostali pozivali /api/v2/auth/me
koji ne postoji u backendu (postoji /api/auth/me bez v2).
401 redirect na /login?reason=unauthorized iako Damir prijavljen.

Fix:
- Frontend: replace /api/v2/auth/me → /api/auth/me u svim file-ovima
- Backend: dodan defensive alias @app.get('/api/v2/auth/me')
2026-05-05 18:25:52 +02:00

59 lines
3.0 KiB
PL/PgSQL

-- ═══════════════════════════════════════════════════════════════════
-- email_templates_20260505.sql | v1.0.0 | 2026-05-05
-- Author: Damir Radulić <dradulic@outlook.com> / damir@rinet.one
-- Lokacija: /opt/pgz-sport/migrations/email_templates_20260505.sql
-- Svrha: CRM v2 — E-mail templates tab (CRUD predložaka za masovni e-mail).
-- Idempotent: ostavlja postojeću tablicu netaknutom + osigurava
-- 3 seed predloška (clanarina_opomena, lijecnicki_podsjetnik,
-- obrazac_potpis).
-- ═══════════════════════════════════════════════════════════════════
BEGIN;
CREATE TABLE IF NOT EXISTS pgz_sport.email_templates (
id SERIAL PRIMARY KEY,
code TEXT NOT NULL UNIQUE,
naziv TEXT NOT NULL,
kategorija TEXT,
subject_tpl TEXT NOT NULL,
body_tpl TEXT NOT NULL,
variables JSONB,
active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Indexes
CREATE INDEX IF NOT EXISTS ix_email_templates_kategorija
ON pgz_sport.email_templates (kategorija);
CREATE INDEX IF NOT EXISTS ix_email_templates_active
ON pgz_sport.email_templates (active);
-- Seed (skip if already present)
INSERT INTO pgz_sport.email_templates (code, naziv, kategorija, subject_tpl, body_tpl, variables, active)
VALUES
('pristupnica',
'Pristupnica klubu — predložak',
'obrasci',
'Pristupnica za klub {{naziv_kluba}}',
E'Poštovani,\n\nu prilogu Vam šaljemo pristupnicu za klub {{naziv_kluba}} (sezona {{sezona}}).\nMolimo da ispunjenu i potpisanu pristupnicu vratite najkasnije do {{rok}}.\n\nLijep pozdrav,\nPGŽ Sport',
'{"naziv_kluba":"string","sezona":"string","rok":"date"}'::jsonb,
true),
('suglasnost',
'Suglasnost roditelja — predložak',
'obrasci',
'Suglasnost roditelja za {{ime_djeteta}}',
E'Poštovani roditelju/skrbniku,\n\nMolimo Vas da popunite priloženu suglasnost za sudjelovanje djeteta {{ime_djeteta}} u programu kluba {{naziv_kluba}}.\nSuglasnost je potrebno potpisati i vratiti najkasnije do {{rok}}.\n\nHvala na razumijevanju,\nPGŽ Sport',
'{"ime_djeteta":"string","naziv_kluba":"string","rok":"date"}'::jsonb,
true),
('putni-nalog',
'Putni nalog — predložak',
'obrasci',
'Putni nalog #{{nalog_broj}} — {{odrediste}}',
E'Pozdrav,\n\nIzdaje se putni nalog broj {{nalog_broj}} za putovanje u {{odrediste}} u razdoblju od {{datum_od}} do {{datum_do}}.\nSvrha: {{svrha}}\nProcijenjeni trošak: {{iznos}} EUR\n\nMolimo da po povratku dostavite obračun s pripadajućim računima.\n\nPGŽ Sport',
'{"nalog_broj":"string","odrediste":"string","datum_od":"date","datum_do":"date","svrha":"string","iznos":"number"}'::jsonb,
true)
ON CONFLICT (code) DO NOTHING;
COMMIT;