CREATE TYPE HASH_TYPE AS ENUM ('SHA256'); CREATE TYPE SIGNATURE_TYPE AS ENUM ('JWS/JCS'); -- DROP TABLE IF EXISTS public.audit CASCADE; CREATE TABLE public.audit ( audit_id BIGSERIAL PRIMARY KEY, version SMALLINT NOT NULL, event_id UUID, agreement_id UUID, hash_type HASH_TYPE NOT NULL, digest TEXT NOT NULL, created BIGINT NOT NULL, created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX idx__public__audit__event_id ON public.audit (event_id); CREATE INDEX idx__public__audit__agreement_id ON public.audit (agreement_id); CREATE INDEX idx__public__audit__created ON public.audit (created); CREATE INDEX idx__public__audit__created_ts ON public.audit (created_ts); CREATE INDEX idx__public__audit__updated_ts ON public.audit (updated_ts); ALTER TABLE public.audit ADD CONSTRAINT cnst__audit__event_or_agreement CHECK (num_nonnulls(event_id, agreement_id) = 1); -- DROP TABLE IF EXISTS public.audit_signature CASCADE; CREATE TABLE public.audit_signature ( signature_id BIGSERIAL PRIMARY KEY, audit_id BIGINT NOT NULL REFERENCES public.audit(audit_id), version SMALLINT NOT NULL, id TEXT NOT NULL, signedOn BIGINT NOT NULL, type SIGNATURE_TYPE NOT NULL, jws TEXT NOT NULL, created_ts TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_ts TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX idx__public__audit_signature__id ON public.audit_signature (id); CREATE INDEX idx__public__audit_signature__signedOn ON public.audit_signature (signedOn); CREATE INDEX idx__public__audit_signature__type ON public.audit_signature (type); CREATE INDEX idx__public__audit_signature__created_ts ON public.audit_signature (created_ts); CREATE INDEX idx__public__audit_signature__updated_ts ON public.audit_signature (updated_ts);