Files
monthly-report-kit/deploy/docker-fewo/sql/reporting-schema.sql
T

110 lines
4.0 KiB
PL/PgSQL

BEGIN;
CREATE TABLE IF NOT EXISTS public.report_customer_config (
customer_id VARCHAR(64) PRIMARY KEY,
customer_name VARCHAR(160) NOT NULL,
property_name VARCHAR(160) NOT NULL,
location VARCHAR(160) NOT NULL,
contact_line VARCHAR(180) NOT NULL DEFAULT '',
logo_data_uri TEXT,
logo_text VARCHAR(5) NOT NULL,
theme VARCHAR(40) NOT NULL DEFAULT 'modern',
primary_color CHAR(7) NOT NULL DEFAULT '#1F5D66',
secondary_color CHAR(7) NOT NULL DEFAULT '#2C7C82',
accent_color CHAR(7) NOT NULL DEFAULT '#DBA25D',
text_color CHAR(7) NOT NULL DEFAULT '#24343A',
muted_color CHAR(7) NOT NULL DEFAULT '#718087',
surface_color CHAR(7) NOT NULL DEFAULT '#F2F6F5',
font_family VARCHAR(100) NOT NULL DEFAULT 'Arial',
active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Upgrade-Pfad für die ursprüngliche Repo-Struktur.
ALTER TABLE public.report_customer_config
ALTER COLUMN theme TYPE VARCHAR(40);
ALTER TABLE public.report_customer_config
DROP CONSTRAINT IF EXISTS report_customer_config_theme_check;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'report_customer_config_theme_not_empty'
AND conrelid = 'public.report_customer_config'::regclass
) THEN
ALTER TABLE public.report_customer_config
ADD CONSTRAINT report_customer_config_theme_not_empty
CHECK (length(trim(theme)) > 0) NOT VALID;
END IF;
END;
$$;
ALTER TABLE public.report_customer_config
VALIDATE CONSTRAINT report_customer_config_theme_not_empty;
CREATE TABLE IF NOT EXISTS public.monthly_report_runs (
id BIGSERIAL PRIMARY KEY,
customer_id VARCHAR(64) NOT NULL
REFERENCES public.report_customer_config(customer_id),
report_year INTEGER NOT NULL
CHECK (report_year BETWEEN 2020 AND 2100),
report_month INTEGER NOT NULL
CHECK (report_month BETWEEN 1 AND 12),
status VARCHAR(20) NOT NULL
CHECK (status IN ('queued', 'processing', 'completed', 'failed')),
report_version VARCHAR(20) NOT NULL,
prompt_version VARCHAR(20) NOT NULL,
template_version VARCHAR(20) NOT NULL,
claude_model VARCHAR(80),
storage_path TEXT,
checksum_sha256 CHAR(64),
error_message TEXT,
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (customer_id, report_year, report_month, report_version)
);
CREATE INDEX IF NOT EXISTS idx_monthly_report_runs_status
ON public.monthly_report_runs(status, report_year, report_month);
CREATE INDEX IF NOT EXISTS idx_monthly_report_runs_customer_period
ON public.monthly_report_runs(customer_id, report_year, report_month);
CREATE OR REPLACE FUNCTION public.set_report_customer_config_updated_at()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$;
DROP TRIGGER IF EXISTS trg_report_customer_config_updated_at
ON public.report_customer_config;
CREATE TRIGGER trg_report_customer_config_updated_at
BEFORE UPDATE ON public.report_customer_config
FOR EACH ROW
EXECUTE FUNCTION public.set_report_customer_config_updated_at();
ALTER TABLE public.report_customer_config OWNER TO fewo;
ALTER TABLE public.monthly_report_runs OWNER TO fewo;
ALTER SEQUENCE IF EXISTS public.monthly_report_runs_id_seq OWNER TO fewo;
ALTER FUNCTION public.set_report_customer_config_updated_at() OWNER TO fewo;
GRANT SELECT, INSERT, UPDATE, DELETE
ON public.report_customer_config, public.monthly_report_runs
TO fewo;
GRANT USAGE, SELECT, UPDATE
ON SEQUENCE public.monthly_report_runs_id_seq
TO fewo;
COMMIT;