CREATE DATABASE IF NOT EXISTS wy_order DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_order;

-- ------------------------------
-- 1. 商品分类表
-- ------------------------------
CREATE TABLE `product_category` (
                                    `id` INT AUTO_INCREMENT PRIMARY KEY,
                                    `name` VARCHAR(100) NOT NULL COMMENT '分类名称',
                                    `parent_id` INT COMMENT '父分类ID',
                                    `sort` INT DEFAULT 0 COMMENT '排序权重',
                                    `status` TINYINT DEFAULT 1 COMMENT '状态：0-禁用，1-启用',
                                    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                    FOREIGN KEY (`parent_id`) REFERENCES `product_category` (`id`) ON DELETE SET NULL,
                                    INDEX `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';

-- ------------------------------
-- 2. 商品表（关联artist服务的artist.id、content服务的album/song.id）
-- ------------------------------
CREATE TABLE `product` (
                           `id` INT AUTO_INCREMENT PRIMARY KEY,
                           `category_id` INT NOT NULL COMMENT '关联本服务的product_category.id',
                           `name` VARCHAR(255) NOT NULL COMMENT '商品名称',
                           `cover_url` VARCHAR(500) COMMENT '商品封面URL',
                           `description` TEXT COMMENT '商品描述',
                           `price` DECIMAL(10,2) NOT NULL COMMENT '售价',
                           `original_price` DECIMAL(10,2) COMMENT '原价',
                           `stock` INT NOT NULL DEFAULT 0 COMMENT '库存（-1表示无限）',
                           `product_type` TINYINT NOT NULL COMMENT '类型：1-数字商品，2-实体商品',
                           `artist_id` INT COMMENT '关联artist服务的artist.id',
                           `album_id` INT COMMENT '关联content服务的album.id',
                           `song_id` INT COMMENT '关联content服务的song.id',
                           `status` TINYINT DEFAULT 1 COMMENT '状态：0-下架，1-上架',
                           `sales_count` INT DEFAULT 0 COMMENT '销量',
                           `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                           `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                           FOREIGN KEY (`category_id`) REFERENCES `product_category` (`id`) ON DELETE CASCADE,
                           INDEX `idx_product_name` (`name`),
                           INDEX `idx_product_type` (`product_type`),
                           INDEX `idx_status` (`status`),
                           INDEX `idx_artist_id` (`artist_id`), -- 逻辑关联索引
                           INDEX `idx_album_id` (`album_id`), -- 逻辑关联索引
                           INDEX `idx_song_id` (`song_id`) -- 逻辑关联索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

-- ------------------------------
-- 3. 订单表（关联auth服务的user.id）
-- ------------------------------
CREATE TABLE `order` (
                         `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                         `order_no` VARCHAR(50) NOT NULL COMMENT '订单编号',
                         `user_id` INT NOT NULL COMMENT '关联auth服务的user.id',
                         `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
                         `pay_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额',
                         `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
                         `pay_type` TINYINT COMMENT '支付方式：1-微信，2-支付宝',
                         `status` TINYINT NOT NULL COMMENT '状态：0-待支付，1-已支付，2-已取消，3-已退款，4-已完成',
                         `pay_time` DATETIME COMMENT '支付时间',
                         `cancel_time` DATETIME COMMENT '取消时间',
                         `finish_time` DATETIME COMMENT '完成时间',
                         `receive_name` VARCHAR(100) COMMENT '收货人姓名',
                         `receive_phone` VARCHAR(20) COMMENT '收货人电话',
                         `receive_address` TEXT COMMENT '收货地址',
                         `note` TEXT COMMENT '订单备注',
                         `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                         `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                         UNIQUE KEY `uk_order_no` (`order_no`),
                         INDEX `idx_user_id` (`user_id`), -- 逻辑关联索引
                         INDEX `idx_status` (`status`),
                         INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

-- ------------------------------
-- 4. 订单项表（关联本服务的order和product表）
-- ------------------------------
CREATE TABLE `order_item` (
                              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                              `order_id` BIGINT NOT NULL COMMENT '关联本服务的order.id',
                              `product_id` INT NULL COMMENT '关联本服务的product.id',
                              `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称快照',
                              `product_cover` VARCHAR(500) COMMENT '商品封面快照',
                              `product_price` DECIMAL(10,2) NOT NULL COMMENT '下单时单价',
                              `quantity` INT NOT NULL DEFAULT 1 COMMENT '购买数量',
                              `sub_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额',
                              `digital_code` VARCHAR(100) COMMENT '数字商品兑换码',
                              `digital_code_status` TINYINT DEFAULT 0 COMMENT '兑换码状态：0-未使用，1-已使用',
                              `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE,
                              FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE SET NULL,
                              INDEX `idx_order_id` (`order_id`),
                              INDEX `idx_product_id` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';