rwadurian/backend/services/planting-service/prisma/migrations/20241204000000_init/migration.sql

187 lines
7.0 KiB
SQL

-- CreateTable
CREATE TABLE "planting_orders" (
"order_id" BIGSERIAL NOT NULL,
"order_no" VARCHAR(50) NOT NULL,
"user_id" BIGINT NOT NULL,
"tree_count" INTEGER NOT NULL,
"total_amount" DECIMAL(20,8) NOT NULL,
"selected_province" VARCHAR(10),
"selected_city" VARCHAR(10),
"province_city_selected_at" TIMESTAMP(3),
"province_city_confirmed_at" TIMESTAMP(3),
"status" VARCHAR(30) NOT NULL DEFAULT 'CREATED',
"pool_injection_batch_id" BIGINT,
"pool_injection_scheduled_time" TIMESTAMP(3),
"pool_injection_actual_time" TIMESTAMP(3),
"pool_injection_tx_hash" VARCHAR(100),
"mining_enabled_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"paid_at" TIMESTAMP(3),
"fund_allocated_at" TIMESTAMP(3),
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "planting_orders_pkey" PRIMARY KEY ("order_id")
);
-- CreateTable
CREATE TABLE "fund_allocations" (
"allocation_id" BIGSERIAL NOT NULL,
"order_id" BIGINT NOT NULL,
"target_type" VARCHAR(50) NOT NULL,
"amount" DECIMAL(20,8) NOT NULL,
"target_account_id" VARCHAR(100),
"metadata" JSONB,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "fund_allocations_pkey" PRIMARY KEY ("allocation_id")
);
-- CreateTable
CREATE TABLE "planting_positions" (
"position_id" BIGSERIAL NOT NULL,
"user_id" BIGINT NOT NULL,
"total_tree_count" INTEGER NOT NULL DEFAULT 0,
"effective_tree_count" INTEGER NOT NULL DEFAULT 0,
"pending_tree_count" INTEGER NOT NULL DEFAULT 0,
"first_mining_start_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "planting_positions_pkey" PRIMARY KEY ("position_id")
);
-- CreateTable
CREATE TABLE "position_province_city_distribution" (
"distribution_id" BIGSERIAL NOT NULL,
"user_id" BIGINT NOT NULL,
"province_code" VARCHAR(10),
"city_code" VARCHAR(10),
"tree_count" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "position_province_city_distribution_pkey" PRIMARY KEY ("distribution_id")
);
-- CreateTable
CREATE TABLE "pool_injection_batches" (
"batch_id" BIGSERIAL NOT NULL,
"batch_no" VARCHAR(50) NOT NULL,
"start_date" DATE NOT NULL,
"end_date" DATE NOT NULL,
"order_count" INTEGER NOT NULL DEFAULT 0,
"total_amount" DECIMAL(20,8) NOT NULL DEFAULT 0,
"status" VARCHAR(20) NOT NULL DEFAULT 'PENDING',
"scheduled_injection_time" TIMESTAMP(3),
"actual_injection_time" TIMESTAMP(3),
"injection_tx_hash" VARCHAR(100),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "pool_injection_batches_pkey" PRIMARY KEY ("batch_id")
);
-- CreateTable
CREATE TABLE "planting_events" (
"event_id" BIGSERIAL NOT NULL,
"event_type" VARCHAR(50) NOT NULL,
"aggregate_id" VARCHAR(100) NOT NULL,
"aggregate_type" VARCHAR(50) NOT NULL,
"event_data" JSONB NOT NULL,
"user_id" BIGINT,
"occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"version" INTEGER NOT NULL DEFAULT 1,
CONSTRAINT "planting_events_pkey" PRIMARY KEY ("event_id")
);
-- CreateIndex
CREATE UNIQUE INDEX "planting_orders_order_no_key" ON "planting_orders"("order_no");
-- CreateIndex
CREATE INDEX "planting_orders_user_id_idx" ON "planting_orders"("user_id");
-- CreateIndex
CREATE INDEX "planting_orders_order_no_idx" ON "planting_orders"("order_no");
-- CreateIndex
CREATE INDEX "planting_orders_status_idx" ON "planting_orders"("status");
-- CreateIndex
CREATE INDEX "planting_orders_pool_injection_batch_id_idx" ON "planting_orders"("pool_injection_batch_id");
-- CreateIndex
CREATE INDEX "planting_orders_selected_province_selected_city_idx" ON "planting_orders"("selected_province", "selected_city");
-- CreateIndex
CREATE INDEX "planting_orders_created_at_idx" ON "planting_orders"("created_at");
-- CreateIndex
CREATE INDEX "planting_orders_paid_at_idx" ON "planting_orders"("paid_at");
-- CreateIndex
CREATE INDEX "fund_allocations_order_id_idx" ON "fund_allocations"("order_id");
-- CreateIndex
CREATE INDEX "fund_allocations_target_type_target_account_id_idx" ON "fund_allocations"("target_type", "target_account_id");
-- CreateIndex
CREATE INDEX "fund_allocations_created_at_idx" ON "fund_allocations"("created_at");
-- CreateIndex
CREATE UNIQUE INDEX "planting_positions_user_id_key" ON "planting_positions"("user_id");
-- CreateIndex
CREATE INDEX "planting_positions_user_id_idx" ON "planting_positions"("user_id");
-- CreateIndex
CREATE INDEX "planting_positions_total_tree_count_idx" ON "planting_positions"("total_tree_count");
-- CreateIndex
CREATE UNIQUE INDEX "position_province_city_distribution_user_id_province_code_c_key" ON "position_province_city_distribution"("user_id", "province_code", "city_code");
-- CreateIndex
CREATE INDEX "position_province_city_distribution_user_id_idx" ON "position_province_city_distribution"("user_id");
-- CreateIndex
CREATE INDEX "position_province_city_distribution_province_code_idx" ON "position_province_city_distribution"("province_code");
-- CreateIndex
CREATE INDEX "position_province_city_distribution_city_code_idx" ON "position_province_city_distribution"("city_code");
-- CreateIndex
CREATE UNIQUE INDEX "pool_injection_batches_batch_no_key" ON "pool_injection_batches"("batch_no");
-- CreateIndex
CREATE INDEX "pool_injection_batches_batch_no_idx" ON "pool_injection_batches"("batch_no");
-- CreateIndex
CREATE INDEX "pool_injection_batches_start_date_end_date_idx" ON "pool_injection_batches"("start_date", "end_date");
-- CreateIndex
CREATE INDEX "pool_injection_batches_status_idx" ON "pool_injection_batches"("status");
-- CreateIndex
CREATE INDEX "pool_injection_batches_scheduled_injection_time_idx" ON "pool_injection_batches"("scheduled_injection_time");
-- CreateIndex
CREATE INDEX "planting_events_aggregate_type_aggregate_id_idx" ON "planting_events"("aggregate_type", "aggregate_id");
-- CreateIndex
CREATE INDEX "planting_events_event_type_idx" ON "planting_events"("event_type");
-- CreateIndex
CREATE INDEX "planting_events_user_id_idx" ON "planting_events"("user_id");
-- CreateIndex
CREATE INDEX "planting_events_occurred_at_idx" ON "planting_events"("occurred_at");
-- AddForeignKey
ALTER TABLE "fund_allocations" ADD CONSTRAINT "fund_allocations_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "planting_orders"("order_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "position_province_city_distribution" ADD CONSTRAINT "position_province_city_distribution_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "planting_positions"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "planting_orders" ADD CONSTRAINT "planting_orders_pool_injection_batch_id_fkey" FOREIGN KEY ("pool_injection_batch_id") REFERENCES "pool_injection_batches"("batch_id") ON DELETE SET NULL ON UPDATE CASCADE;