MIF_E31221222/sigap-website/prisma/migrations/20250227114657_/migration.sql

225 lines
7.3 KiB
SQL

-- CreateExtension
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
-- CreateEnum
CREATE TYPE "roles" AS ENUM ('admin', 'staff', 'user');
-- CreateEnum
CREATE TYPE "status_contact_messages" AS ENUM ('new', 'read', 'replied', 'resolved');
-- CreateEnum
CREATE TYPE "crime_rates" AS ENUM ('low', 'medium', 'high');
-- CreateEnum
CREATE TYPE "crime_status" AS ENUM ('new', 'in_progress', 'resolved');
-- CreateTable
CREATE TABLE "users" (
"id" UUID NOT NULL,
"email" VARCHAR(255) NOT NULL,
"email_verified" BOOLEAN NOT NULL DEFAULT false,
"password" VARCHAR(255),
"first_name" VARCHAR(255),
"last_name" VARCHAR(255),
"avatar" VARCHAR(255),
"role" "roles" NOT NULL DEFAULT 'user',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
"last_signed_in" TIMESTAMP(3),
"metadata" JSONB,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "profiles" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"user_id" UUID NOT NULL,
"bio" TEXT,
"phone" VARCHAR(20),
"address" VARCHAR(255),
"city" VARCHAR(100),
"country" VARCHAR(100),
"birth_date" TIMESTAMP(3),
CONSTRAINT "profiles_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "contact_messages" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"name" VARCHAR(255),
"email" VARCHAR(255),
"phone" VARCHAR(20),
"message_type" VARCHAR(50),
"message_type_label" VARCHAR(50),
"message" TEXT,
"status" "status_contact_messages" NOT NULL DEFAULT 'new',
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL,
CONSTRAINT "contact_messages_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "cities" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"geographic_id" UUID,
"name" VARCHAR(100) NOT NULL,
"code" VARCHAR(10) NOT NULL,
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "cities_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "districts" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"city_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"code" VARCHAR(10) NOT NULL,
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "districts_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "geographics" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"district_id" UUID,
"latitude" DOUBLE PRECISION,
"longitude" DOUBLE PRECISION,
"land_area" DOUBLE PRECISION,
"polygon" JSONB,
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "geographics_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "demographics" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"district_id" UUID,
"city_id" UUID,
"province_id" UUID,
"year" INTEGER NOT NULL,
"population" INTEGER NOT NULL,
"population_density" DOUBLE PRECISION NOT NULL,
"poverty_rate" DOUBLE PRECISION NOT NULL,
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "demographics_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "crimes" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"district_id" UUID,
"city_id" UUID,
"year" INTEGER NOT NULL,
"number_of_crime" INTEGER NOT NULL,
"rate" "crime_rates" NOT NULL DEFAULT 'low',
"heat_map" JSONB,
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "crimes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "crime_cases" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"crime_id" UUID,
"crime_category_id" UUID,
"date" TIMESTAMPTZ(6) NOT NULL,
"time" TIMESTAMPTZ(6) NOT NULL,
"location" VARCHAR(255) NOT NULL,
"latitude" DOUBLE PRECISION NOT NULL,
"longitude" DOUBLE PRECISION NOT NULL,
"description" TEXT NOT NULL,
"victim_count" INTEGER NOT NULL,
"status" "crime_status" NOT NULL DEFAULT 'new',
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "crime_cases_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "crime_categories" (
"id" UUID NOT NULL DEFAULT gen_random_uuid(),
"name" VARCHAR(255) NOT NULL,
"description" TEXT NOT NULL,
"created_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
"updated_at" TIMESTAMPTZ(6) NOT NULL DEFAULT now(),
CONSTRAINT "crime_categories_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE INDEX "users_role_idx" ON "users"("role");
-- CreateIndex
CREATE UNIQUE INDEX "profiles_user_id_key" ON "profiles"("user_id");
-- CreateIndex
CREATE INDEX "profiles_user_id_idx" ON "profiles"("user_id");
-- CreateIndex
CREATE INDEX "cities_name_idx" ON "cities"("name");
-- CreateIndex
CREATE INDEX "districts_name_idx" ON "districts"("name");
-- CreateIndex
CREATE UNIQUE INDEX "geographics_district_id_key" ON "geographics"("district_id");
-- CreateIndex
CREATE UNIQUE INDEX "demographics_district_id_year_key" ON "demographics"("district_id", "year");
-- CreateIndex
CREATE UNIQUE INDEX "demographics_city_id_year_key" ON "demographics"("city_id", "year");
-- CreateIndex
CREATE UNIQUE INDEX "crimes_district_id_year_key" ON "crimes"("district_id", "year");
-- CreateIndex
CREATE UNIQUE INDEX "crimes_city_id_year_key" ON "crimes"("city_id", "year");
-- AddForeignKey
ALTER TABLE "profiles" ADD CONSTRAINT "profiles_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "cities" ADD CONSTRAINT "cities_geographic_id_fkey" FOREIGN KEY ("geographic_id") REFERENCES "geographics"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "districts" ADD CONSTRAINT "districts_city_id_fkey" FOREIGN KEY ("city_id") REFERENCES "cities"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "geographics" ADD CONSTRAINT "geographics_district_id_fkey" FOREIGN KEY ("district_id") REFERENCES "districts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "demographics" ADD CONSTRAINT "demographics_district_id_fkey" FOREIGN KEY ("district_id") REFERENCES "districts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "demographics" ADD CONSTRAINT "demographics_city_id_fkey" FOREIGN KEY ("city_id") REFERENCES "cities"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "crimes" ADD CONSTRAINT "crimes_district_id_fkey" FOREIGN KEY ("district_id") REFERENCES "districts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "crimes" ADD CONSTRAINT "crimes_city_id_fkey" FOREIGN KEY ("city_id") REFERENCES "cities"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "crime_cases" ADD CONSTRAINT "crime_cases_crime_id_fkey" FOREIGN KEY ("crime_id") REFERENCES "crimes"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "crime_cases" ADD CONSTRAINT "crime_cases_crime_category_id_fkey" FOREIGN KEY ("crime_category_id") REFERENCES "crime_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;