-- Database export via SQLPro (https://www.sqlprostudio.com/)
-- Exported by camille at 28-01-2025 14:06.
-- WARNING: This file may contain descructive statements such as DROPs.
-- Please ensure that you are running the script at the proper location.


-- BEGIN TABLE public.instances
DROP TABLE IF EXISTS public.instances CASCADE;
BEGIN;

CREATE TABLE IF NOT EXISTS public.instances (
	id bigint DEFAULT nextval('insances_sampleid_seq'::regclass) NOT NULL,
	instance character varying NOT NULL,
	record_update_by bigint,
	record_updated_at timestamp without time zone,
	vote integer DEFAULT 1 NOT NULL,
	pingable boolean,
	PRIMARY KEY(id)
);

COMMIT;

-- END TABLE public.instances

-- BEGIN TABLE public.receipt_tags
DROP TABLE IF EXISTS public.receipt_tags CASCADE;
BEGIN;

CREATE TABLE IF NOT EXISTS public.receipt_tags (
	id bigint DEFAULT nextval('receipt_tags_sampleid_seq'::regclass) NOT NULL,
	instance_id bigint NOT NULL,
	receipt_id bigint,
	tag_id bigint NOT NULL,
	PRIMARY KEY(id)
);

COMMIT;

-- END TABLE public.receipt_tags

-- BEGIN TABLE public.receipts
DROP TABLE IF EXISTS public.receipts CASCADE;
BEGIN;

CREATE TABLE IF NOT EXISTS public.receipts (
	id bigint DEFAULT nextval('receipts_sampleid_seq'::regclass) NOT NULL,
	instance_id bigint NOT NULL,
	updated_by bigint,
	updated_at timestamp without time zone,
	original_link character varying NOT NULL,
	image_filename character varying,
	PRIMARY KEY(id)
);

COMMIT;

-- END TABLE public.receipts

-- BEGIN TABLE public.tags
DROP TABLE IF EXISTS public.tags CASCADE;
BEGIN;

CREATE TABLE IF NOT EXISTS public.tags (
	id bigint DEFAULT nextval('tags_sampleid_seq'::regclass) NOT NULL,
	tag_name character varying NOT NULL,
	tag_description character varying NOT NULL,
	PRIMARY KEY(id)
);

COMMIT;

-- END TABLE public.tags

-- BEGIN TABLE public.users
DROP TABLE IF EXISTS public.users CASCADE;
BEGIN;

CREATE TABLE IF NOT EXISTS public.users (
	id bigint DEFAULT nextval('users_sampleid_seq'::regclass) NOT NULL,
	username character varying NOT NULL,
	fullname character varying,
	fedi_address character varying NOT NULL,
	active boolean DEFAULT true NOT NULL,
	PRIMARY KEY(id)
);

COMMIT;

-- END TABLE public.users

ALTER TABLE IF EXISTS public.instances
	ADD CONSTRAINT instances_users_fk
	FOREIGN KEY (record_update_by)
	REFERENCES public.users (id);

ALTER TABLE IF EXISTS public.receipt_tags
	ADD CONSTRAINT instance_id_fkey
	FOREIGN KEY (instance_id, instance_id)
	REFERENCES public.instances (id, id)
	ON DELETE CASCADE;

ALTER TABLE IF EXISTS public.receipt_tags
	ADD CONSTRAINT tag_id
	FOREIGN KEY (tag_id)
	REFERENCES public.tags (id);

ALTER TABLE IF EXISTS public.receipt_tags
	ADD CONSTRAINT receipt_id_fkey
	FOREIGN KEY (receipt_id)
	REFERENCES public.receipts (id);

ALTER TABLE IF EXISTS public.receipts
	ADD CONSTRAINT instance_id_fkey
	FOREIGN KEY (instance_id, instance_id)
	REFERENCES public.instances (id, id)
	ON DELETE CASCADE;

ALTER TABLE IF EXISTS public.receipts
	ADD CONSTRAINT update_by_fkey
	FOREIGN KEY (updated_by)
	REFERENCES public.users (id);

