canina/backend/prisma/migrations/20260526145407_init/migration.sql

261 lines
8.8 KiB
SQL

-- CreateTable
CREATE TABLE "users" (
"id" UUID NOT NULL,
"first_name" VARCHAR(100) NOT NULL,
"last_name" VARCHAR(100) NOT NULL,
"email" VARCHAR(150) NOT NULL,
"mobile" VARCHAR(15),
"role" VARCHAR(30) NOT NULL DEFAULT 'User_PetOwner',
"wallet_balance" DECIMAL(15,2) NOT NULL DEFAULT 0.00,
"charity_donation_total" DECIMAL(15,2) NOT NULL DEFAULT 0.00,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "user_addresses" (
"id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"title" VARCHAR(100) NOT NULL,
"receptor_name" VARCHAR(150) NOT NULL,
"phone" VARCHAR(15) NOT NULL,
"province" VARCHAR(100) NOT NULL,
"city" VARCHAR(100) NOT NULL,
"detail" TEXT NOT NULL,
"zip_code" VARCHAR(10) NOT NULL,
"is_default" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "user_addresses_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "wallet_transactions" (
"id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"amount" DECIMAL(15,2) NOT NULL,
"type" VARCHAR(20) NOT NULL,
"status" VARCHAR(20) NOT NULL,
"transaction_reference" VARCHAR(100),
"description" TEXT,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "wallet_transactions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "products" (
"id" UUID NOT NULL,
"art_no" VARCHAR(20) NOT NULL,
"name" VARCHAR(200) NOT NULL,
"scientific_tagline" VARCHAR(250),
"description" TEXT NOT NULL,
"short_description" TEXT,
"category" VARCHAR(100) NOT NULL,
"category_slug" VARCHAR(100) NOT NULL,
"price_value" DECIMAL(15,2) NOT NULL,
"price_display" VARCHAR(50) NOT NULL,
"unit" VARCHAR(50) NOT NULL,
"package_size" DECIMAL(10,2) NOT NULL,
"dosage_logic" TEXT,
"suitable_for" VARCHAR(15) NOT NULL,
"image_url" TEXT NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "products_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "product_ingredients" (
"product_id" UUID NOT NULL,
"ingredient" VARCHAR(150) NOT NULL,
CONSTRAINT "product_ingredients_pkey" PRIMARY KEY ("product_id","ingredient")
);
-- CreateTable
CREATE TABLE "product_symptoms" (
"product_id" UUID NOT NULL,
"symptom" VARCHAR(150) NOT NULL,
CONSTRAINT "product_symptoms_pkey" PRIMARY KEY ("product_id","symptom")
);
-- CreateTable
CREATE TABLE "pets" (
"id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"name" VARCHAR(100) NOT NULL,
"type" VARCHAR(10) NOT NULL,
"breed" VARCHAR(100) NOT NULL,
"age" INTEGER NOT NULL,
"weight" DECIMAL(5,2) NOT NULL,
"activity_level" VARCHAR(15) NOT NULL,
"image_url" TEXT,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "pets_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "pet_medical_conditions" (
"pet_id" UUID NOT NULL,
"condition" VARCHAR(150) NOT NULL,
CONSTRAINT "pet_medical_conditions_pkey" PRIMARY KEY ("pet_id","condition")
);
-- CreateTable
CREATE TABLE "reminders" (
"id" UUID NOT NULL,
"pet_id" UUID NOT NULL,
"product_id" UUID,
"title" VARCHAR(150) NOT NULL,
"time" VARCHAR(5) NOT NULL,
"frequency" VARCHAR(20) NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "reminders_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "reminder_completions" (
"id" UUID NOT NULL,
"reminder_id" UUID NOT NULL,
"completed_date" DATE NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "reminder_completions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "health_logs" (
"id" UUID NOT NULL,
"pet_id" UUID NOT NULL,
"appetite" VARCHAR(15) NOT NULL,
"energy" VARCHAR(15) NOT NULL,
"digestion" VARCHAR(15) NOT NULL,
"note" TEXT,
"logged_date" DATE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "health_logs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "coupons" (
"id" UUID NOT NULL,
"code" VARCHAR(50) NOT NULL,
"discount_value" DECIMAL(15,2) NOT NULL,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "coupons_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "orders" (
"id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"coupon_id" UUID,
"total_amount" DECIMAL(15,2) NOT NULL,
"charity_donation" DECIMAL(15,2) NOT NULL DEFAULT 0.00,
"status" VARCHAR(30) NOT NULL DEFAULT 'processing',
"tracking_number" VARCHAR(100),
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "orders_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "order_items" (
"id" UUID NOT NULL,
"order_id" UUID NOT NULL,
"product_id" UUID,
"quantity" INTEGER NOT NULL,
"dose_qty" DECIMAL(10,2),
"dose_unit" VARCHAR(50),
CONSTRAINT "order_items_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "users_mobile_key" ON "users"("mobile");
-- CreateIndex
CREATE INDEX "user_addresses_user_id_idx" ON "user_addresses"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "wallet_transactions_transaction_reference_key" ON "wallet_transactions"("transaction_reference");
-- CreateIndex
CREATE UNIQUE INDEX "products_art_no_key" ON "products"("art_no");
-- CreateIndex
CREATE INDEX "products_category_slug_idx" ON "products"("category_slug");
-- CreateIndex
CREATE INDEX "products_suitable_for_idx" ON "products"("suitable_for");
-- CreateIndex
CREATE INDEX "reminders_pet_id_idx" ON "reminders"("pet_id");
-- CreateIndex
CREATE INDEX "reminder_completions_reminder_id_completed_date_idx" ON "reminder_completions"("reminder_id", "completed_date");
-- CreateIndex
CREATE UNIQUE INDEX "reminder_completions_reminder_id_completed_date_key" ON "reminder_completions"("reminder_id", "completed_date");
-- CreateIndex
CREATE UNIQUE INDEX "coupons_code_key" ON "coupons"("code");
-- CreateIndex
CREATE UNIQUE INDEX "orders_tracking_number_key" ON "orders"("tracking_number");
-- AddForeignKey
ALTER TABLE "user_addresses" ADD CONSTRAINT "user_addresses_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "wallet_transactions" ADD CONSTRAINT "wallet_transactions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "product_ingredients" ADD CONSTRAINT "product_ingredients_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "products"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "product_symptoms" ADD CONSTRAINT "product_symptoms_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "products"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "pets" ADD CONSTRAINT "pets_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "pet_medical_conditions" ADD CONSTRAINT "pet_medical_conditions_pet_id_fkey" FOREIGN KEY ("pet_id") REFERENCES "pets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "reminders" ADD CONSTRAINT "reminders_pet_id_fkey" FOREIGN KEY ("pet_id") REFERENCES "pets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "reminders" ADD CONSTRAINT "reminders_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "products"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "reminder_completions" ADD CONSTRAINT "reminder_completions_reminder_id_fkey" FOREIGN KEY ("reminder_id") REFERENCES "reminders"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "health_logs" ADD CONSTRAINT "health_logs_pet_id_fkey" FOREIGN KEY ("pet_id") REFERENCES "pets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "orders" ADD CONSTRAINT "orders_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "orders" ADD CONSTRAINT "orders_coupon_id_fkey" FOREIGN KEY ("coupon_id") REFERENCES "coupons"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "order_items" ADD CONSTRAINT "order_items_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "order_items" ADD CONSTRAINT "order_items_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "products"("id") ON DELETE SET NULL ON UPDATE CASCADE;