CREATE TABLE IF NOT EXISTS "account" ( "id" text PRIMARY KEY NOT NULL, "account_id" text NOT NULL, "provider_id" text NOT NULL, "user_id" text NOT NULL, "access_token" text, "refresh_token" text, "id_token" text, "access_token_expires_at" timestamp, "refresh_token_expires_at" timestamp, "scope" text, "password" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "user" ( "id" text PRIMARY KEY NOT NULL, "name" text NOT NULL, "email" text NOT NULL, "email_verified" boolean NOT NULL, "image" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "username" text, "display_username" text, "role" text, "banned" boolean, "ban_reason" text, "ban_expires" timestamp, "parent_id" text, "discount_percent" integer, CONSTRAINT "user_email_unique" UNIQUE("email"), CONSTRAINT "user_username_unique" UNIQUE("username") ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "verification" ( "id" text PRIMARY KEY NOT NULL, "identifier" text NOT NULL, "value" text NOT NULL, "expires_at" timestamp NOT NULL, "created_at" timestamp, "updated_at" timestamp ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "coupon" ( "id" serial PRIMARY KEY NOT NULL, "code" varchar(32) NOT NULL, "description" text, "discount_type" varchar(16) NOT NULL, "discount_value" numeric(12, 2) NOT NULL, "max_usage_count" integer, "current_usage_count" integer DEFAULT 0 NOT NULL, "min_order_value" numeric(12, 2), "max_discount_amount" numeric(12, 2), "start_date" timestamp NOT NULL, "end_date" timestamp, "is_active" boolean DEFAULT true NOT NULL, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now(), "created_by" text, CONSTRAINT "coupon_code_unique" UNIQUE("code") ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "coupon_usage" ( "id" serial PRIMARY KEY NOT NULL, "coupon_id" integer NOT NULL, "user_id" text, "order_id" integer, "discount_amount" numeric(12, 2) NOT NULL, "used_at" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "email_account" ( "id" serial PRIMARY KEY NOT NULL, "email" varchar(128) NOT NULL, "password" varchar(128) NOT NULL, "used" boolean DEFAULT false NOT NULL, "agent_id" text, "last_active_check_at" timestamp DEFAULT now(), "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now(), CONSTRAINT "email_account_email_unique" UNIQUE("email") ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "flight_ticket_info" ( "id" serial PRIMARY KEY NOT NULL, "ticket_id" text DEFAULT '' NOT NULL, "flight_type" varchar(24) NOT NULL, "departure" text NOT NULL, "arrival" text NOT NULL, "departure_date" timestamp NOT NULL, "return_date" timestamp NOT NULL, "dates" json DEFAULT '[]'::json NOT NULL, "flight_iteneraries" json DEFAULT '[]'::json NOT NULL, "price_details" json NOT NULL, "bags_info" json NOT NULL, "last_available" json NOT NULL, "refundable" boolean DEFAULT false NOT NULL, "passenger_counts" json DEFAULT '{"adult":1,"children":0}'::json NOT NULL, "cabin_class" varchar(24) NOT NULL, "share_id" text DEFAULT '' NOT NULL, "checkout_url" text DEFAULT '' NOT NULL, "is_cache" boolean DEFAULT false NOT NULL, "ref_oids" json DEFAULT '[]'::json NOT NULL, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now() ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "inbox" ( "id" serial PRIMARY KEY NOT NULL, "email_id" text DEFAULT '' NOT NULL, "from" text, "to" text, "cc" text, "subject" text, "body" text, "attachments" json, "date" timestamp DEFAULT now(), "email_account_id" integer NOT NULL, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now() ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "order" ( "id" serial PRIMARY KEY NOT NULL, "order_price" numeric(12, 2), "discount_amount" numeric(12, 2), "display_price" numeric(12, 2), "base_price" numeric(12, 2), "fullfilled_price" numeric(12, 2) DEFAULT '0', "price_per_passenger" numeric(12, 2) DEFAULT '0', "status" varchar(24), "pnr" varchar(12) DEFAULT '' NOT NULL, "flight_ticket_info_id" integer NOT NULL, "payment_details_id" integer, "email_account_id" integer, "agent_id" text, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now() ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "passenger_info" ( "id" serial PRIMARY KEY NOT NULL, "passenger_pii_id" integer, "payment_details_id" integer, "passenger_type" varchar(24) NOT NULL, "seat_selection" json, "bag_selection" json, "order_id" integer, "flight_ticket_info_id" integer, "agents_info" boolean DEFAULT false NOT NULL, "agent_id" text, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now() ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "passenger_pii" ( "id" serial PRIMARY KEY NOT NULL, "first_name" varchar(64) NOT NULL, "middle_name" varchar(64) NOT NULL, "last_name" varchar(64) NOT NULL, "email" varchar(128) NOT NULL, "phone_country_code" varchar(6) NOT NULL, "phone_number" varchar(20) NOT NULL, "nationality" varchar(32) NOT NULL, "gender" varchar(32) NOT NULL, "dob" date NOT NULL, "passport_no" varchar(64) NOT NULL, "passport_expiry" varchar(12) NOT NULL, "country" varchar(128) NOT NULL, "state" varchar(128) NOT NULL, "city" varchar(128) NOT NULL, "zip_code" varchar(21) NOT NULL, "address" text NOT NULL, "address2" text, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now() ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "payment_details" ( "id" serial PRIMARY KEY NOT NULL, "cardholder_name" varchar(128) NOT NULL, "card_number" varchar(20) NOT NULL, "expiry" varchar(5) NOT NULL, "cvv" varchar(6) NOT NULL, "flight_ticket_info_id" integer, "created_at" timestamp DEFAULT now(), "updated_at" timestamp DEFAULT now() ); --> statement-breakpoint DO $$ BEGIN ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "coupon" ADD CONSTRAINT "coupon_created_by_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "coupon_usage" ADD CONSTRAINT "coupon_usage_coupon_id_coupon_id_fk" FOREIGN KEY ("coupon_id") REFERENCES "public"."coupon"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "coupon_usage" ADD CONSTRAINT "coupon_usage_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "coupon_usage" ADD CONSTRAINT "coupon_usage_order_id_order_id_fk" FOREIGN KEY ("order_id") REFERENCES "public"."order"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "email_account" ADD CONSTRAINT "email_account_agent_id_user_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "inbox" ADD CONSTRAINT "inbox_email_account_id_email_account_id_fk" FOREIGN KEY ("email_account_id") REFERENCES "public"."email_account"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "order" ADD CONSTRAINT "order_flight_ticket_info_id_flight_ticket_info_id_fk" FOREIGN KEY ("flight_ticket_info_id") REFERENCES "public"."flight_ticket_info"("id") ON DELETE no action ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "order" ADD CONSTRAINT "order_payment_details_id_payment_details_id_fk" FOREIGN KEY ("payment_details_id") REFERENCES "public"."payment_details"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "order" ADD CONSTRAINT "order_email_account_id_email_account_id_fk" FOREIGN KEY ("email_account_id") REFERENCES "public"."email_account"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "order" ADD CONSTRAINT "order_agent_id_user_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "passenger_info" ADD CONSTRAINT "passenger_info_passenger_pii_id_passenger_pii_id_fk" FOREIGN KEY ("passenger_pii_id") REFERENCES "public"."passenger_pii"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "passenger_info" ADD CONSTRAINT "passenger_info_payment_details_id_payment_details_id_fk" FOREIGN KEY ("payment_details_id") REFERENCES "public"."payment_details"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "passenger_info" ADD CONSTRAINT "passenger_info_order_id_order_id_fk" FOREIGN KEY ("order_id") REFERENCES "public"."order"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "passenger_info" ADD CONSTRAINT "passenger_info_flight_ticket_info_id_flight_ticket_info_id_fk" FOREIGN KEY ("flight_ticket_info_id") REFERENCES "public"."flight_ticket_info"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "passenger_info" ADD CONSTRAINT "passenger_info_agent_id_user_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."user"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "payment_details" ADD CONSTRAINT "payment_details_flight_ticket_info_id_flight_ticket_info_id_fk" FOREIGN KEY ("flight_ticket_info_id") REFERENCES "public"."flight_ticket_info"("id") ON DELETE set null ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$;