261 lines
8.8 KiB
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;
|