DROP VIEW "public"."template_detail_view";--> statement-breakpoint DROP VIEW "public"."template_list_view";--> statement-breakpoint ALTER TABLE "template_history" ALTER COLUMN "changed_by" SET DATA TYPE integer;--> statement-breakpoint ALTER TABLE "templates" ALTER COLUMN "created_by" SET DATA TYPE integer;--> statement-breakpoint ALTER TABLE "template_history" ADD CONSTRAINT "template_history_changed_by_users_id_fk" FOREIGN KEY ("changed_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint ALTER TABLE "templates" ADD CONSTRAINT "templates_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint CREATE VIEW "public"."template_detail_view" AS ( SELECT t.id, t.name, t.slug, t.content, t.description, t.category, t.sample_data, t.is_active, t.version, t.created_by, t.created_at, t.updated_at, COALESCE( json_agg( json_build_object( 'id', v.id, 'variableName', v.variable_name, 'variableType', v.variable_type, 'defaultValue', v.default_value, 'isRequired', v.is_required, 'description', v.description, 'displayOrder', v.display_order ) ORDER BY v.display_order ) FILTER (WHERE v.id IS NOT NULL), '[]'::json ) AS variables FROM "templates" t LEFT JOIN "template_variables" v ON t.id = v.template_id GROUP BY t.id, t.name, t.slug, t.content, t.description, t.category, t.sample_data, t.is_active, t.version, t.created_by, t.created_at, t.updated_at );--> statement-breakpoint CREATE VIEW "public"."template_list_view" AS ( SELECT t.id, t.name, t.slug, t.description, t.category, t.is_active, t.version, t.created_by, t.created_at, t.updated_at, COALESCE(v.variable_count, 0) AS variable_count, COALESCE(v.required_variable_count, 0) AS required_variable_count FROM "templates" t LEFT JOIN ( SELECT template_id, COUNT(*) AS variable_count, COUNT(*) FILTER (WHERE is_required = true) AS required_variable_count FROM "template_variables" GROUP BY template_id ) v ON t.id = v.template_id );