CREATE TYPE "public"."user_domain" AS ENUM('evcp', 'partners');--> statement-breakpoint CREATE TABLE "companies" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "companies_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "name" varchar(255) NOT NULL, "taxID" integer NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE "tasks" ( "id" varchar(30) PRIMARY KEY NOT NULL, "code" varchar(128) DEFAULT concat('TASK-', to_char(nextval('tasks_code_seq'), 'FM0000')) NOT NULL, "title" varchar(128), "status" varchar(30) DEFAULT 'todo' NOT NULL, "label" varchar(30) DEFAULT 'bug' NOT NULL, "priority" varchar(30) DEFAULT 'low' NOT NULL, "archived" boolean DEFAULT false NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT current_timestamp, CONSTRAINT "tasks_code_unique" UNIQUE("code") ); --> statement-breakpoint CREATE TABLE "otps" ( "email" varchar(256) PRIMARY KEY NOT NULL, "code" varchar(6) NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "otpToken" varchar(512) NOT NULL, "otp_expires" timestamp NOT NULL ); --> statement-breakpoint CREATE TABLE "user_roles" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "user_roles_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "user_id" integer, "role" varchar(30) DEFAULT 'normal' NOT NULL ); --> statement-breakpoint CREATE TABLE "users" ( "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "users_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1), "name" varchar(255) NOT NULL, "email" varchar(255) NOT NULL, "company_id" integer, "domain" "user_domain" DEFAULT 'partners' NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "image_url" varchar(1024), CONSTRAINT "users_email_unique" UNIQUE("email") ); --> statement-breakpoint ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "users" ADD CONSTRAINT "users_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint CREATE VIEW "public"."user_view" AS (select "users"."id" as "user_id", "users"."name" as "user_name", "users"."email" as "user_email", "users"."image_url" as "user_image", "companies"."id" as "company_id", "companies"."name" as "company_name", array_agg("user_roles"."role") as "roles", "users"."created_at" as "created_at" from "users" left join "companies" on "users"."company_id" = "companies"."id" left join "user_roles" on "users"."id" = "user_roles"."user_id" group by "users"."id", "companies"."id");