220 lines
7 KiB
SQL
220 lines
7 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "companies" (
|
|
"id" UUID NOT NULL,
|
|
"cnpj" TEXT NOT NULL,
|
|
"corporate_name" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL DEFAULT 'farmacia',
|
|
"license_number" TEXT NOT NULL,
|
|
"is_verified" BOOLEAN NOT NULL DEFAULT false,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"latitude" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
|
"longitude" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
|
"city" TEXT NOT NULL DEFAULT '',
|
|
"state" TEXT NOT NULL DEFAULT '',
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "companies_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"id" UUID NOT NULL,
|
|
"company_id" UUID NOT NULL,
|
|
"role" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"username" TEXT,
|
|
"email" TEXT NOT NULL,
|
|
"password_hash" TEXT NOT NULL,
|
|
"refresh_token" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "products" (
|
|
"id" UUID NOT NULL,
|
|
"seller_id" UUID NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"batch" TEXT NOT NULL,
|
|
"expires_at" DATE NOT NULL,
|
|
"price_cents" BIGINT NOT NULL,
|
|
"stock" BIGINT NOT NULL,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "products_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "inventory_adjustments" (
|
|
"id" UUID NOT NULL,
|
|
"product_id" UUID NOT NULL,
|
|
"delta" BIGINT NOT NULL,
|
|
"reason" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "inventory_adjustments_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "orders" (
|
|
"id" UUID NOT NULL,
|
|
"buyer_id" UUID NOT NULL,
|
|
"seller_id" UUID NOT NULL,
|
|
"status" TEXT NOT NULL,
|
|
"total_cents" BIGINT NOT NULL,
|
|
"payment_method" TEXT NOT NULL DEFAULT 'pix',
|
|
"shipping_recipient_name" TEXT,
|
|
"shipping_street" TEXT,
|
|
"shipping_number" TEXT,
|
|
"shipping_complement" TEXT,
|
|
"shipping_district" TEXT,
|
|
"shipping_city" TEXT,
|
|
"shipping_state" TEXT,
|
|
"shipping_zip_code" TEXT,
|
|
"shipping_country" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "orders_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "order_items" (
|
|
"id" UUID NOT NULL,
|
|
"order_id" UUID NOT NULL,
|
|
"product_id" UUID NOT NULL,
|
|
"quantity" BIGINT NOT NULL,
|
|
"unit_cents" BIGINT NOT NULL,
|
|
"batch" TEXT NOT NULL,
|
|
"expires_at" DATE NOT NULL,
|
|
|
|
CONSTRAINT "order_items_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "cart_items" (
|
|
"id" UUID NOT NULL,
|
|
"buyer_id" UUID NOT NULL,
|
|
"product_id" UUID NOT NULL,
|
|
"quantity" BIGINT NOT NULL,
|
|
"unit_cents" BIGINT NOT NULL,
|
|
"batch" TEXT,
|
|
"expires_at" DATE,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "cart_items_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "reviews" (
|
|
"id" UUID NOT NULL,
|
|
"order_id" UUID NOT NULL,
|
|
"buyer_id" UUID NOT NULL,
|
|
"seller_id" UUID NOT NULL,
|
|
"rating" INTEGER NOT NULL,
|
|
"comment" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "reviews_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "shipments" (
|
|
"id" UUID NOT NULL,
|
|
"order_id" UUID NOT NULL,
|
|
"carrier" TEXT NOT NULL,
|
|
"tracking_code" TEXT,
|
|
"external_tracking" TEXT,
|
|
"status" TEXT NOT NULL,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "shipments_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "system_settings" (
|
|
"id" UUID NOT NULL,
|
|
"key" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL DEFAULT 'GENERAL',
|
|
"is_secure" BOOLEAN NOT NULL DEFAULT false,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "system_settings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "company_documents" (
|
|
"id" UUID NOT NULL,
|
|
"company_id" UUID NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"file_url" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"rejection_reason" TEXT,
|
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
|
|
CONSTRAINT "company_documents_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "companies_cnpj_key" ON "companies"("cnpj");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "cart_items_buyer_id_product_id_key" ON "cart_items"("buyer_id", "product_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "reviews_order_id_key" ON "reviews"("order_id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "reviews_seller_id_idx" ON "reviews"("seller_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "shipments_order_id_key" ON "shipments"("order_id");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "system_settings_key_key" ON "system_settings"("key");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "users" ADD CONSTRAINT "users_company_id_fkey" FOREIGN KEY ("company_id") REFERENCES "companies"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "products" ADD CONSTRAINT "products_seller_id_fkey" FOREIGN KEY ("seller_id") REFERENCES "companies"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "inventory_adjustments" ADD CONSTRAINT "inventory_adjustments_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "products"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "orders" ADD CONSTRAINT "orders_buyer_id_fkey" FOREIGN KEY ("buyer_id") REFERENCES "companies"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "orders" ADD CONSTRAINT "orders_seller_id_fkey" FOREIGN KEY ("seller_id") REFERENCES "companies"("id") ON DELETE RESTRICT 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 RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "cart_items" ADD CONSTRAINT "cart_items_product_id_fkey" FOREIGN KEY ("product_id") REFERENCES "products"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "reviews" ADD CONSTRAINT "reviews_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "shipments" ADD CONSTRAINT "shipments_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "company_documents" ADD CONSTRAINT "company_documents_company_id_fkey" FOREIGN KEY ("company_id") REFERENCES "companies"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|