-- ============================================
-- SPA管理系统 - 系统配置SQL
-- ============================================
-- 版本: v1.0
-- 创建时间: 2025-12-30
-- 数据库: MySQL 8.0+
-- 字符集: utf8mb4
-- ============================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ============================================
-- 系统配置相关表
-- ============================================

-- 1. 系统配置表
DROP TABLE IF EXISTS `spa_system_config`;
CREATE TABLE `spa_system_config` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,

  `config_key` varchar(100) NOT NULL COMMENT '配置键',
  `config_value` text COMMENT '配置值',
  `config_type` varchar(50) DEFAULT 'string' COMMENT '配置类型 string/number/boolean/json',
  `config_group` varchar(50) DEFAULT 'system' COMMENT '配置分组',
  
  `name` varchar(100) NOT NULL COMMENT '配置名称',
  `description` varchar(500) DEFAULT NULL COMMENT '配置说明',
  
  `is_public` tinyint DEFAULT 0 COMMENT '是否公开 0否 1是',
  `sort` int DEFAULT 0 COMMENT '排序',

  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';

-- 2. 数据字典表
DROP TABLE IF EXISTS `spa_dictionary`;
CREATE TABLE `spa_dictionary` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `deleted_at` datetime(3) DEFAULT NULL,

  `dict_type` varchar(50) NOT NULL COMMENT '字典类型',
  `dict_label` varchar(100) NOT NULL COMMENT '字典标签',
  `dict_value` varchar(100) NOT NULL COMMENT '字典值',
  
  `parent_id` bigint unsigned DEFAULT 0 COMMENT '父级ID',
  `sort` int DEFAULT 0 COMMENT '排序',
  `status` tinyint DEFAULT 1 COMMENT '状态 1启用 2停用',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',

  PRIMARY KEY (`id`),
  KEY `idx_dict_type` (`dict_type`),
  KEY `idx_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典表';

-- 3. 操作日志表
DROP TABLE IF EXISTS `spa_operation_log`;
CREATE TABLE `spa_operation_log` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime(3) DEFAULT NULL,

  `user_id` bigint unsigned DEFAULT NULL COMMENT '操作用户ID',
  `user_name` varchar(100) DEFAULT NULL COMMENT '操作用户名',
  `user_type` tinyint DEFAULT NULL COMMENT '用户类型 1管理员 2技师 3客户',

  `module` varchar(50) DEFAULT NULL COMMENT '操作模块',
  `operation` varchar(100) DEFAULT NULL COMMENT '操作类型',
  `method` varchar(200) DEFAULT NULL COMMENT '请求方法',
  `request_url` varchar(500) DEFAULT NULL COMMENT '请求URL',
  
  `request_params` text COMMENT '请求参数',
  `response_data` text COMMENT '响应数据',
  
  `ip` varchar(50) DEFAULT NULL COMMENT 'IP地址',
  `location` varchar(200) DEFAULT NULL COMMENT 'IP归属地',
  `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理',
  
  `status` tinyint DEFAULT 1 COMMENT '状态 1成功 2失败',
  `error_msg` text COMMENT '错误信息',
  `cost_time` int DEFAULT NULL COMMENT '耗时（毫秒）',

  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表';

-- 4. 消息通知表
DROP TABLE IF EXISTS `spa_notification`;
CREATE TABLE `spa_notification` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `created_at` datetime(3) DEFAULT NULL,
  `updated_at` datetime(3) DEFAULT NULL,
  `deleted_at` datetime(3) DEFAULT NULL,

  `user_type` tinyint NOT NULL COMMENT '接收用户类型 1客户 2技师 3代理',
  `user_id` bigint unsigned NOT NULL COMMENT '接收用户ID',
  
  `title` varchar(200) NOT NULL COMMENT '通知标题',
  `content` text COMMENT '通知内容',
  `notification_type` tinyint NOT NULL COMMENT '通知类型 1系统 2订单 3分佣 4活动',
  
  `related_id` bigint unsigned DEFAULT NULL COMMENT '关联业务ID',
  `related_type` varchar(50) DEFAULT NULL COMMENT '关联业务类型',
  
  `is_read` tinyint DEFAULT 0 COMMENT '是否已读 0否 1是',
  `read_time` datetime DEFAULT NULL COMMENT '阅读时间',

  PRIMARY KEY (`id`),
  KEY `idx_user` (`user_type`, `user_id`),
  KEY `idx_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知表';

SET FOREIGN_KEY_CHECKS = 1;
