feat: 支持商品管理
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `products` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`title` VARCHAR(80) NOT NULL,
|
||||
`description` TEXT NOT NULL,
|
||||
`cover_url` VARCHAR(1000) NOT NULL,
|
||||
`price` INTEGER NOT NULL,
|
||||
`stock` INTEGER NOT NULL DEFAULT 0,
|
||||
`sold` INTEGER NOT NULL DEFAULT 0,
|
||||
`is_active` BOOLEAN NOT NULL DEFAULT false,
|
||||
`sort_order` INTEGER NOT NULL DEFAULT 0,
|
||||
`version` INTEGER NOT NULL DEFAULT 0,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
INDEX `products_is_active_sort_order_idx`(`is_active`, `sort_order`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `product_orders` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`order_no` VARCHAR(32) NOT NULL,
|
||||
`request_id` VARCHAR(80) NOT NULL,
|
||||
`user_id` VARCHAR(191) NOT NULL,
|
||||
`product_id` VARCHAR(191) NOT NULL,
|
||||
`title` VARCHAR(80) NOT NULL,
|
||||
`cover_url` VARCHAR(1000) NOT NULL,
|
||||
`unit_price` INTEGER NOT NULL,
|
||||
`quantity` INTEGER NOT NULL,
|
||||
`amount` INTEGER NOT NULL,
|
||||
`contact_name` VARCHAR(40) NOT NULL,
|
||||
`contact_phone` VARCHAR(20) NOT NULL,
|
||||
`status` ENUM('PENDING', 'PAID', 'COMPLETED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
|
||||
`pickup_code` VARCHAR(12) NOT NULL,
|
||||
`wx_transaction_id` VARCHAR(191) NULL,
|
||||
`expires_at` DATETIME(3) NOT NULL,
|
||||
`paid_at` DATETIME(3) NULL,
|
||||
`completed_at` DATETIME(3) NULL,
|
||||
`completed_by` VARCHAR(191) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `product_orders_order_no_key`(`order_no`),
|
||||
UNIQUE INDEX `product_orders_wx_transaction_id_key`(`wx_transaction_id`),
|
||||
INDEX `product_orders_status_expires_at_idx`(`status`, `expires_at`),
|
||||
INDEX `product_orders_user_id_created_at_idx`(`user_id`, `created_at`),
|
||||
INDEX `product_orders_product_id_status_idx`(`product_id`, `status`),
|
||||
UNIQUE INDEX `product_orders_user_id_request_id_key`(`user_id`, `request_id`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `product_stock_changes` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`product_id` VARCHAR(191) NOT NULL,
|
||||
`delta` INTEGER NOT NULL,
|
||||
`reason` VARCHAR(200) NOT NULL,
|
||||
`operator_id` VARCHAR(191) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `product_stock_changes_product_id_created_at_idx`(`product_id`, `created_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `product_orders` ADD CONSTRAINT `product_orders_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `product_orders` ADD CONSTRAINT `product_orders_product_id_fkey` FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `product_stock_changes` ADD CONSTRAINT `product_stock_changes_product_id_fkey` FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
Reference in New Issue
Block a user