-- CreateSchema CREATE SCHEMA IF NOT EXISTS "public"; -- CreateEnum CREATE TYPE "Protocol" AS ENUM ('ssh', 'rdp'); -- CreateEnum CREATE TYPE "CredentialType" AS ENUM ('password', 'ssh_key'); -- CreateTable CREATE TABLE "users" ( "id" SERIAL NOT NULL, "email" TEXT NOT NULL, "password_hash" TEXT NOT NULL, "display_name" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "users_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "host_groups" ( "id" SERIAL NOT NULL, "name" TEXT NOT NULL, "parent_id" INTEGER, "sort_order" INTEGER NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "host_groups_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "hosts" ( "id" SERIAL NOT NULL, "name" TEXT NOT NULL, "hostname" TEXT NOT NULL, "port" INTEGER NOT NULL DEFAULT 22, "protocol" "Protocol" NOT NULL DEFAULT 'ssh', "group_id" INTEGER, "credential_id" INTEGER, "tags" TEXT[] DEFAULT ARRAY[]::TEXT[], "notes" TEXT, "color" VARCHAR(7), "sort_order" INTEGER NOT NULL DEFAULT 0, "host_fingerprint" TEXT, "last_connected_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "hosts_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "credentials" ( "id" SERIAL NOT NULL, "name" TEXT NOT NULL, "username" TEXT, "domain" TEXT, "type" "CredentialType" NOT NULL, "encrypted_value" TEXT, "ssh_key_id" INTEGER, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "credentials_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "ssh_keys" ( "id" SERIAL NOT NULL, "name" TEXT NOT NULL, "key_type" VARCHAR(20) NOT NULL, "fingerprint" TEXT, "public_key" TEXT, "encrypted_private_key" TEXT NOT NULL, "passphrase_encrypted" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "ssh_keys_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "connection_logs" ( "id" SERIAL NOT NULL, "host_id" INTEGER NOT NULL, "protocol" "Protocol" NOT NULL, "connected_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "disconnected_at" TIMESTAMP(3), CONSTRAINT "connection_logs_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "settings" ( "key" TEXT NOT NULL, "value" TEXT NOT NULL, CONSTRAINT "settings_pkey" PRIMARY KEY ("key") ); -- CreateIndex CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); -- AddForeignKey ALTER TABLE "host_groups" ADD CONSTRAINT "host_groups_parent_id_fkey" FOREIGN KEY ("parent_id") REFERENCES "host_groups"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "hosts" ADD CONSTRAINT "hosts_group_id_fkey" FOREIGN KEY ("group_id") REFERENCES "host_groups"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "hosts" ADD CONSTRAINT "hosts_credential_id_fkey" FOREIGN KEY ("credential_id") REFERENCES "credentials"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "credentials" ADD CONSTRAINT "credentials_ssh_key_id_fkey" FOREIGN KEY ("ssh_key_id") REFERENCES "ssh_keys"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "connection_logs" ADD CONSTRAINT "connection_logs_host_id_fkey" FOREIGN KEY ("host_id") REFERENCES "hosts"("id") ON DELETE CASCADE ON UPDATE CASCADE;