CREATE TYPE "public"."dbms_status" AS ENUM('active', 'inactive');--> statement-breakpoint CREATE TYPE "public"."status" AS ENUM('waiting', 'ongoing', 'failed', 'success');--> statement-breakpoint CREATE TYPE "public"."type_storage" AS ENUM('local', 's3');--> statement-breakpoint CREATE TABLE "settings" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "storage" "type_storage" DEFAULT 'local' NOT NULL, "name" varchar(255) NOT NULL, "s3_endpoint_url" varchar(255), "s3_access_key_id" varchar(255), "s3_secret_access_key" varchar(255), "s3_bucket_name" varchar(255), "smtp_password" varchar(255), "smtp_from" varchar(255), "smtp_host" varchar(255), "smtp_port" varchar(255), "smtp_user" varchar(255), "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, CONSTRAINT "settings_name_unique" UNIQUE("name") ); --> statement-breakpoint CREATE TABLE "account" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "account_id" text NOT NULL, "provider_id" text NOT NULL, "user_id" uuid 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 DEFAULT now() NOT NULL, "updated_at" timestamp ); --> statement-breakpoint CREATE TABLE "session" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "expires_at" timestamp NOT NULL, "token" text NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "ip_address" text, "user_agent" text, "user_id" uuid NOT NULL, "impersonated_by" text, CONSTRAINT "session_token_unique" UNIQUE("token") ); --> statement-breakpoint CREATE TABLE "user" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" text NOT NULL, "email" text NOT NULL, "email_verified" boolean NOT NULL, "image" text, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "role" text, "banned" boolean, "ban_reason" text, "ban_expires" timestamp, "deleted_at" timestamp, CONSTRAINT "user_email_unique" UNIQUE("email") ); --> statement-breakpoint CREATE TABLE "verification" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "identifier" text NOT NULL, "value" text NOT NULL, "expires_at" timestamp NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp ); --> statement-breakpoint CREATE TABLE "invitation" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "organization_id" uuid NOT NULL, "email" text NOT NULL, "role" text, "status" text NOT NULL, "expires_at" timestamp NOT NULL, "inviter_id" uuid NOT NULL ); --> statement-breakpoint CREATE TABLE "member" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "organization_id" uuid NOT NULL, "user_id" uuid NOT NULL, "role" text NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp ); --> statement-breakpoint CREATE TABLE "organization" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" text NOT NULL, "slug" text NOT NULL, "logo" text, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "metadata" text, CONSTRAINT "organization_slug_unique" UNIQUE("slug") ); --> statement-breakpoint CREATE TABLE "projects" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "slug" text NOT NULL, "name" text NOT NULL, "is_archived" boolean DEFAULT false, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "organization_id" uuid NOT NULL, CONSTRAINT "projects_slug_unique" UNIQUE("slug") ); --> statement-breakpoint CREATE TABLE "agents" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "slug" text NOT NULL, "name" text NOT NULL, "description" text NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "last_contact" timestamp, CONSTRAINT "agents_slug_unique" UNIQUE("slug") ); --> statement-breakpoint CREATE TABLE "backups" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "status" "status" DEFAULT 'waiting' NOT NULL, "file" text, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "database_id" uuid NOT NULL ); --> statement-breakpoint CREATE TABLE "databases" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "agent_database_id" uuid DEFAULT gen_random_uuid() NOT NULL, "name" text NOT NULL, "dbms" "dbms_status" NOT NULL, "description" text NOT NULL, "backup_policy" text, "is_waiting_for_backup" boolean DEFAULT false NOT NULL, "backup_to_restore" text, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "agent_id" uuid NOT NULL, "last_contact" timestamp, "project_id" uuid NOT NULL ); --> statement-breakpoint CREATE TABLE "restorations" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "status" "status" DEFAULT 'waiting' NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp, "backup_id" uuid NOT NULL, "database_id" uuid ); --> statement-breakpoint 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;--> statement-breakpoint ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "invitation" ADD CONSTRAINT "invitation_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "invitation" ADD CONSTRAINT "invitation_inviter_id_user_id_fk" FOREIGN KEY ("inviter_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "member" ADD CONSTRAINT "member_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "member" ADD CONSTRAINT "member_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "projects" ADD CONSTRAINT "projects_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "backups" ADD CONSTRAINT "backups_database_id_databases_id_fk" FOREIGN KEY ("database_id") REFERENCES "public"."databases"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "databases" ADD CONSTRAINT "databases_agent_id_agents_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."agents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "databases" ADD CONSTRAINT "databases_project_id_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint ALTER TABLE "restorations" ADD CONSTRAINT "restorations_backup_id_backups_id_fk" FOREIGN KEY ("backup_id") REFERENCES "public"."backups"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint ALTER TABLE "restorations" ADD CONSTRAINT "restorations_database_id_databases_id_fk" FOREIGN KEY ("database_id") REFERENCES "public"."databases"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint CREATE UNIQUE INDEX "database_id_status_unique" ON "backups" USING btree ("database_id","status");