summaryrefslogtreecommitdiff
path: root/db/migrations/0260_cute_tomas.sql
diff options
context:
space:
mode:
Diffstat (limited to 'db/migrations/0260_cute_tomas.sql')
-rw-r--r--db/migrations/0260_cute_tomas.sql53
1 files changed, 53 insertions, 0 deletions
diff --git a/db/migrations/0260_cute_tomas.sql b/db/migrations/0260_cute_tomas.sql
new file mode 100644
index 00000000..368ce023
--- /dev/null
+++ b/db/migrations/0260_cute_tomas.sql
@@ -0,0 +1,53 @@
+CREATE TYPE "public"."consent_action" AS ENUM('consent', 'revoke', 'update');--> statement-breakpoint
+CREATE TYPE "public"."consent_type" AS ENUM('privacy_policy', 'terms_of_service', 'marketing', 'optional');--> statement-breakpoint
+CREATE TYPE "public"."policy_type" AS ENUM('privacy_policy', 'terms_of_service');--> statement-breakpoint
+CREATE TABLE "consent_logs" (
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "consent_logs_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
+ "user_id" integer NOT NULL,
+ "consent_type" "consent_type" NOT NULL,
+ "action" "consent_action" NOT NULL,
+ "old_status" boolean,
+ "new_status" boolean NOT NULL,
+ "policy_version" varchar(20) NOT NULL,
+ "ip_address" varchar(45),
+ "user_agent" text,
+ "action_timestamp" timestamp with time zone DEFAULT now() NOT NULL,
+ "additional_data" json
+);
+--> statement-breakpoint
+CREATE TABLE "policy_versions" (
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "policy_versions_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
+ "policy_type" "policy_type" NOT NULL,
+ "version" varchar(20) NOT NULL,
+ "content" text NOT NULL,
+ "effective_date" timestamp with time zone NOT NULL,
+ "is_current" boolean DEFAULT false NOT NULL,
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "user_consents" (
+ "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "user_consents_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
+ "user_id" integer NOT NULL,
+ "consent_type" "consent_type" NOT NULL,
+ "consent_status" boolean DEFAULT false NOT NULL,
+ "policy_version" varchar(20) NOT NULL,
+ "consented_at" timestamp with time zone DEFAULT now() NOT NULL,
+ "ip_address" varchar(45),
+ "user_agent" text,
+ "revoked_at" timestamp with time zone,
+ "revoke_reason" text,
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+ALTER TABLE "consent_logs" ADD CONSTRAINT "consent_logs_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "user_consents" ADD CONSTRAINT "user_consents_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+CREATE INDEX "consent_logs_user_action_timestamp_idx" ON "consent_logs" USING btree ("user_id","action_timestamp");--> statement-breakpoint
+CREATE INDEX "consent_logs_consent_type_idx" ON "consent_logs" USING btree ("consent_type");--> statement-breakpoint
+CREATE INDEX "consent_logs_action_idx" ON "consent_logs" USING btree ("action");--> statement-breakpoint
+CREATE UNIQUE INDEX "policy_versions_type_version_idx" ON "policy_versions" USING btree ("policy_type","version");--> statement-breakpoint
+CREATE INDEX "policy_versions_current_idx" ON "policy_versions" USING btree ("is_current");--> statement-breakpoint
+CREATE INDEX "policy_versions_effective_date_idx" ON "policy_versions" USING btree ("effective_date");--> statement-breakpoint
+CREATE INDEX "user_consents_user_type_idx" ON "user_consents" USING btree ("user_id","consent_type");--> statement-breakpoint
+CREATE INDEX "user_consents_consented_at_idx" ON "user_consents" USING btree ("consented_at");--> statement-breakpoint
+CREATE INDEX "user_consents_policy_version_idx" ON "user_consents" USING btree ("policy_version"); \ No newline at end of file