-- ----------------------------
-- App端数据库表结构 (SQL Server版本)
-- 适用于 RuoYi-Vue-Plus 5.X 版本
-- ----------------------------

-- 1、App端用户信息表
CREATE TABLE app_user (
    user_id       BIGINT       NOT NULL,
    user_name     NVARCHAR(30) NOT NULL,
    nick_name     NVARCHAR(30) NOT NULL,
    phone         NVARCHAR(11) DEFAULT '',
    email         NVARCHAR(50) DEFAULT '',
    sex           CHAR(1)      DEFAULT '0',
    avatar        BIGINT,
    password      NVARCHAR(100) DEFAULT '',
    status        CHAR(1)      DEFAULT '0',
    del_flag      CHAR(1)      DEFAULT '0',
    login_ip      NVARCHAR(128) DEFAULT '',
    login_date    DATETIME2,
    register_time DATETIME2,
    create_by     BIGINT,
    create_time   DATETIME2,
    update_by     BIGINT,
    update_time   DATETIME2,
    remark        NVARCHAR(500),
    CONSTRAINT PK_app_user PRIMARY KEY (user_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端用户信息表', 'SCHEMA', 'dbo', 'TABLE', 'app_user';
EXEC sp_addextendedproperty 'MS_Description', 'App用户ID', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'user_id';
EXEC sp_addextendedproperty 'MS_Description', '用户账号', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'account';
EXEC sp_addextendedproperty 'MS_Description', '用户昵称', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'nick_name';
EXEC sp_addextendedproperty 'MS_Description', '手机号码', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'phone';
EXEC sp_addextendedproperty 'MS_Description', '用户邮箱', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'email';
EXEC sp_addextendedproperty 'MS_Description', '用户性别（0男 1女 2未知）', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'sex';
EXEC sp_addextendedproperty 'MS_Description', '头像地址', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'avatar';
EXEC sp_addextendedproperty 'MS_Description', '密码', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'password';
EXEC sp_addextendedproperty 'MS_Description', '帐号状态（0正常 1停用）', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'status';
EXEC sp_addextendedproperty 'MS_Description', '删除标志（0代表存在 1代表删除）', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'del_flag';
EXEC sp_addextendedproperty 'MS_Description', '最后登录IP', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'login_ip';
EXEC sp_addextendedproperty 'MS_Description', '最后登录时间', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'login_date';
EXEC sp_addextendedproperty 'MS_Description', '注册时间', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'register_time';
EXEC sp_addextendedproperty 'MS_Description', '创建者', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'create_by';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'create_time';
EXEC sp_addextendedproperty 'MS_Description', '更新者', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'update_by';
EXEC sp_addextendedproperty 'MS_Description', '更新时间', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'update_time';
EXEC sp_addextendedproperty 'MS_Description', '备注', 'SCHEMA', 'dbo', 'TABLE', 'app_user', 'COLUMN', 'remark';

INSERT INTO app_user VALUES (1, 'appuser', 'App测试用户', '15888888888', 'appuser@qq.com', '1', NULL,
        '$2a$10$7JB720yubVSOfvVMe6LeNOKgEoXAw7tCxJRET6pVuiDDz/LQ4Gqk.',
        '0', '0', '127.0.0.1', GETDATE(), GETDATE(), 1, GETDATE(), NULL, NULL, 'App端测试用户');

-- 2、App端角色信息表
CREATE TABLE app_role (
    role_id     BIGINT        NOT NULL,
    role_name   NVARCHAR(30)  NOT NULL,
    role_key    NVARCHAR(100) NOT NULL,
    role_sort   INT           NOT NULL,
    status      CHAR(1)       NOT NULL,
    del_flag    CHAR(1)       DEFAULT '0',
    create_by   BIGINT,
    create_time DATETIME2,
    update_by   BIGINT,
    update_time DATETIME2,
    remark      NVARCHAR(500),
    CONSTRAINT PK_app_role PRIMARY KEY (role_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端角色信息表', 'SCHEMA', 'dbo', 'TABLE', 'app_role';
EXEC sp_addextendedproperty 'MS_Description', 'App角色ID', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'role_id';
EXEC sp_addextendedproperty 'MS_Description', '角色名称', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'role_name';
EXEC sp_addextendedproperty 'MS_Description', '角色权限字符串', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'role_key';
EXEC sp_addextendedproperty 'MS_Description', '显示顺序', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'role_sort';
EXEC sp_addextendedproperty 'MS_Description', '角色状态（0正常 1停用）', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'status';
EXEC sp_addextendedproperty 'MS_Description', '删除标志（0代表存在 1代表删除）', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'del_flag';
EXEC sp_addextendedproperty 'MS_Description', '创建者', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'create_by';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'create_time';
EXEC sp_addextendedproperty 'MS_Description', '更新者', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'update_by';
EXEC sp_addextendedproperty 'MS_Description', '更新时间', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'update_time';
EXEC sp_addextendedproperty 'MS_Description', '备注', 'SCHEMA', 'dbo', 'TABLE', 'app_role', 'COLUMN', 'remark';

INSERT INTO app_role VALUES (1, 'App普通用户', 'app_user', 1, '0', '0', 1, GETDATE(), NULL, NULL, 'App端普通用户');
INSERT INTO app_role VALUES (2, 'App VIP用户', 'app_vip', 2, '0', '0', 1, GETDATE(), NULL, NULL, 'App端VIP用户');

-- 3、App端用户和角色关联表
CREATE TABLE app_user_role (
    user_id BIGINT NOT NULL,
    role_id BIGINT NOT NULL,
    CONSTRAINT PK_app_user_role PRIMARY KEY (user_id, role_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端用户和角色关联表', 'SCHEMA', 'dbo', 'TABLE', 'app_user_role';
EXEC sp_addextendedproperty 'MS_Description', 'App用户ID', 'SCHEMA', 'dbo', 'TABLE', 'app_user_role', 'COLUMN', 'user_id';
EXEC sp_addextendedproperty 'MS_Description', 'App角色ID', 'SCHEMA', 'dbo', 'TABLE', 'app_user_role', 'COLUMN', 'role_id';

INSERT INTO app_user_role VALUES (1, 1);

-- 4、App端第三方登录授权表
CREATE TABLE app_social_auth (
    id            BIGINT         NOT NULL,
    user_id       BIGINT         NOT NULL,
    platform      NVARCHAR(255)  NOT NULL,
    platform_uid  NVARCHAR(255)  NOT NULL,
    open_id       NVARCHAR(255),
    union_id      NVARCHAR(255),
    access_token  NVARCHAR(MAX)  NOT NULL,
    expire_in     INT,
    refresh_token NVARCHAR(255),
    scope         NVARCHAR(255),
    create_by     BIGINT,
    create_time   DATETIME2,
    update_by     BIGINT,
    update_time   DATETIME2,
    del_flag      CHAR(1) DEFAULT '0',
    CONSTRAINT PK_app_social_auth PRIMARY KEY (id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端第三方登录授权表', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth';
EXEC sp_addextendedproperty 'MS_Description', '主键', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'id';
EXEC sp_addextendedproperty 'MS_Description', 'App用户ID', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'user_id';
EXEC sp_addextendedproperty 'MS_Description', '用户来源平台（wechat_mp:微信小程序 wechat_open:微信开放平台 qq:QQ weibo:微博）', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'platform';
EXEC sp_addextendedproperty 'MS_Description', '表示平台唯一用户标识', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'platform_uid';
EXEC sp_addextendedproperty 'MS_Description', '微信openid', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'open_id';
EXEC sp_addextendedproperty 'MS_Description', '微信unionid', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'union_id';
EXEC sp_addextendedproperty 'MS_Description', '用户的授权令牌', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'access_token';
EXEC sp_addextendedproperty 'MS_Description', '用户的授权令牌的有效期', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'expire_in';
EXEC sp_addextendedproperty 'MS_Description', '刷新令牌', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'refresh_token';
EXEC sp_addextendedproperty 'MS_Description', '授予的权限', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'scope';
EXEC sp_addextendedproperty 'MS_Description', '创建者', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'create_by';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'create_time';
EXEC sp_addextendedproperty 'MS_Description', '更新者', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'update_by';
EXEC sp_addextendedproperty 'MS_Description', '更新时间', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'update_time';
EXEC sp_addextendedproperty 'MS_Description', '删除标志（0代表存在 1代表删除）', 'SCHEMA', 'dbo', 'TABLE', 'app_social_auth', 'COLUMN', 'del_flag';

-- 5、App端登录日志表
CREATE TABLE app_login_log (
    info_id        BIGINT        NOT NULL,
    user_name      NVARCHAR(50)  DEFAULT '',
    status         CHAR(1)       DEFAULT '0',
    ipaddr         NVARCHAR(128) DEFAULT '',
    login_location NVARCHAR(255) DEFAULT '',
    browser        NVARCHAR(50)  DEFAULT '',
    os             NVARCHAR(50)  DEFAULT '',
    msg            NVARCHAR(255) DEFAULT '',
    login_time     DATETIME2,
    CONSTRAINT PK_app_login_log PRIMARY KEY (info_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端登录日志表', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log';
EXEC sp_addextendedproperty 'MS_Description', '访问ID', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'info_id';
EXEC sp_addextendedproperty 'MS_Description', '用户账号', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'user_name';
EXEC sp_addextendedproperty 'MS_Description', '登录状态（0成功 1失败）', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'status';
EXEC sp_addextendedproperty 'MS_Description', '登录IP地址', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'ipaddr';
EXEC sp_addextendedproperty 'MS_Description', '登录地点', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'login_location';
EXEC sp_addextendedproperty 'MS_Description', '浏览器类型', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'browser';
EXEC sp_addextendedproperty 'MS_Description', '操作系统', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'os';
EXEC sp_addextendedproperty 'MS_Description', '提示消息', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'msg';
EXEC sp_addextendedproperty 'MS_Description', '访问时间', 'SCHEMA', 'dbo', 'TABLE', 'app_login_log', 'COLUMN', 'login_time';

CREATE INDEX IX_app_login_log_status ON app_login_log (status);
CREATE INDEX IX_app_login_log_login_time ON app_login_log (login_time);

-- 6、App端操作日志记录
CREATE TABLE app_oper_log (
    oper_id        BIGINT         NOT NULL,
    title          NVARCHAR(50)   DEFAULT '',
    business_type  SMALLINT       DEFAULT 0,
    method         NVARCHAR(100)  DEFAULT '',
    request_method NVARCHAR(10)   DEFAULT '',
    oper_name      NVARCHAR(50)   DEFAULT '',
    oper_url       NVARCHAR(255)  DEFAULT '',
    oper_ip        NVARCHAR(128)  DEFAULT '',
    oper_location  NVARCHAR(255)  DEFAULT '',
    oper_param     NVARCHAR(MAX)  DEFAULT '',
    json_result    NVARCHAR(MAX)  DEFAULT '',
    status         SMALLINT       DEFAULT 0,
    error_msg      NVARCHAR(MAX)  DEFAULT '',
    oper_time      DATETIME2,
    cost_time      BIGINT         DEFAULT 0,
    CONSTRAINT PK_app_oper_log PRIMARY KEY (oper_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端操作日志记录', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log';
EXEC sp_addextendedproperty 'MS_Description', '日志主键', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_id';
EXEC sp_addextendedproperty 'MS_Description', '模块标题', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'title';
EXEC sp_addextendedproperty 'MS_Description', '业务类型（0其它 1新增 2修改 3删除）', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'business_type';
EXEC sp_addextendedproperty 'MS_Description', '方法名称', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'method';
EXEC sp_addextendedproperty 'MS_Description', '请求方式', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'request_method';
EXEC sp_addextendedproperty 'MS_Description', '操作人员', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_name';
EXEC sp_addextendedproperty 'MS_Description', '请求URL', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_url';
EXEC sp_addextendedproperty 'MS_Description', '主机地址', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_ip';
EXEC sp_addextendedproperty 'MS_Description', '操作地点', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_location';
EXEC sp_addextendedproperty 'MS_Description', '请求参数', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_param';
EXEC sp_addextendedproperty 'MS_Description', '返回参数', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'json_result';
EXEC sp_addextendedproperty 'MS_Description', '操作状态（0正常 1异常）', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'status';
EXEC sp_addextendedproperty 'MS_Description', '错误消息', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'error_msg';
EXEC sp_addextendedproperty 'MS_Description', '操作时间', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'oper_time';
EXEC sp_addextendedproperty 'MS_Description', '消耗时间', 'SCHEMA', 'dbo', 'TABLE', 'app_oper_log', 'COLUMN', 'cost_time';

CREATE INDEX IX_app_oper_log_business_type ON app_oper_log (business_type);
CREATE INDEX IX_app_oper_log_status ON app_oper_log (status);
CREATE INDEX IX_app_oper_log_oper_time ON app_oper_log (oper_time);

-- 7、App端设备信息表
CREATE TABLE app_device (
    device_id        BIGINT        NOT NULL,
    user_id          BIGINT        NOT NULL,
    device_type      NVARCHAR(20)  NOT NULL,
    device_name      NVARCHAR(100) DEFAULT '',
    device_model     NVARCHAR(100) DEFAULT '',
    device_brand     NVARCHAR(50)  DEFAULT '',
    os_version       NVARCHAR(50)  DEFAULT '',
    app_version      NVARCHAR(50)  DEFAULT '',
    push_token       NVARCHAR(255) DEFAULT '',
    is_active        CHAR(1)       DEFAULT '1',
    last_active_time DATETIME2,
    create_time      DATETIME2,
    update_time      DATETIME2,
    CONSTRAINT PK_app_device PRIMARY KEY (device_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端设备信息表', 'SCHEMA', 'dbo', 'TABLE', 'app_device';
EXEC sp_addextendedproperty 'MS_Description', '设备ID', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'device_id';
EXEC sp_addextendedproperty 'MS_Description', 'App用户ID', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'user_id';
EXEC sp_addextendedproperty 'MS_Description', '设备类型（ios android h5）', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'device_type';
EXEC sp_addextendedproperty 'MS_Description', '设备名称', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'device_name';
EXEC sp_addextendedproperty 'MS_Description', '设备型号', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'device_model';
EXEC sp_addextendedproperty 'MS_Description', '设备品牌', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'device_brand';
EXEC sp_addextendedproperty 'MS_Description', '操作系统版本', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'os_version';
EXEC sp_addextendedproperty 'MS_Description', 'App版本', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'app_version';
EXEC sp_addextendedproperty 'MS_Description', '推送令牌', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'push_token';
EXEC sp_addextendedproperty 'MS_Description', '是否活跃（0否 1是）', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'is_active';
EXEC sp_addextendedproperty 'MS_Description', '最后活跃时间', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'last_active_time';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'create_time';
EXEC sp_addextendedproperty 'MS_Description', '更新时间', 'SCHEMA', 'dbo', 'TABLE', 'app_device', 'COLUMN', 'update_time';

CREATE INDEX IX_app_device_user_id ON app_device (user_id);
CREATE INDEX IX_app_device_device_type ON app_device (device_type);

-- 8、App端消息推送表
CREATE TABLE app_message (
    message_id   BIGINT        NOT NULL,
    title        NVARCHAR(100) NOT NULL,
    content      NVARCHAR(MAX),
    message_type NVARCHAR(20)  DEFAULT 'system',
    target_type  NVARCHAR(20)  DEFAULT 'all',
    target_ids   NVARCHAR(1000) DEFAULT '',
    send_time    DATETIME2,
    status       CHAR(1)       DEFAULT '0',
    create_by    BIGINT,
    create_time  DATETIME2,
    update_by    BIGINT,
    update_time  DATETIME2,
    CONSTRAINT PK_app_message PRIMARY KEY (message_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端消息推送表', 'SCHEMA', 'dbo', 'TABLE', 'app_message';
EXEC sp_addextendedproperty 'MS_Description', '消息ID', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'message_id';
EXEC sp_addextendedproperty 'MS_Description', '消息标题', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'title';
EXEC sp_addextendedproperty 'MS_Description', '消息内容', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'content';
EXEC sp_addextendedproperty 'MS_Description', '消息类型（system:系统消息 notice:通知 activity:活动）', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'message_type';
EXEC sp_addextendedproperty 'MS_Description', '推送目标（all:全部用户 user:指定用户 role:指定角色）', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'target_type';
EXEC sp_addextendedproperty 'MS_Description', '目标ID列表（用户ID或角色ID，逗号分隔）', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'target_ids';
EXEC sp_addextendedproperty 'MS_Description', '发送时间', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'send_time';
EXEC sp_addextendedproperty 'MS_Description', '状态（0待发送 1已发送 2发送失败）', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'status';
EXEC sp_addextendedproperty 'MS_Description', '创建者', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'create_by';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'create_time';
EXEC sp_addextendedproperty 'MS_Description', '更新者', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'update_by';
EXEC sp_addextendedproperty 'MS_Description', '更新时间', 'SCHEMA', 'dbo', 'TABLE', 'app_message', 'COLUMN', 'update_time';

CREATE INDEX IX_app_message_message_type ON app_message (message_type);
CREATE INDEX IX_app_message_status ON app_message (status);

-- 9、App端用户消息读取记录表
CREATE TABLE app_user_message (
    id          BIGINT NOT NULL,
    user_id     BIGINT NOT NULL,
    message_id  BIGINT NOT NULL,
    is_read     CHAR(1) DEFAULT '0',
    read_time   DATETIME2,
    create_time DATETIME2,
    CONSTRAINT PK_app_user_message PRIMARY KEY (id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App端用户消息读取记录表', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message';
EXEC sp_addextendedproperty 'MS_Description', '主键', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message', 'COLUMN', 'id';
EXEC sp_addextendedproperty 'MS_Description', 'App用户ID', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message', 'COLUMN', 'user_id';
EXEC sp_addextendedproperty 'MS_Description', '消息ID', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message', 'COLUMN', 'message_id';
EXEC sp_addextendedproperty 'MS_Description', '是否已读（0未读 1已读）', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message', 'COLUMN', 'is_read';
EXEC sp_addextendedproperty 'MS_Description', '读取时间', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message', 'COLUMN', 'read_time';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_user_message', 'COLUMN', 'create_time';

CREATE INDEX IX_app_user_message_user_id ON app_user_message (user_id);
CREATE INDEX IX_app_user_message_message_id ON app_user_message (message_id);
CREATE INDEX IX_app_user_message_is_read ON app_user_message (is_read);

-- 10、App版本信息表
CREATE TABLE app_version (
    version_id     BIGINT        NOT NULL,
    version_code   INT           NOT NULL,
    version_name   NVARCHAR(20)  NOT NULL,
    update_content NVARCHAR(MAX),
    download_url   NVARCHAR(500) NOT NULL,
    is_force       CHAR(1)       DEFAULT '0',
    platform       NVARCHAR(10)  DEFAULT 'android',
    create_time    DATETIME2,
    CONSTRAINT PK_app_version PRIMARY KEY (version_id)
);

EXEC sp_addextendedproperty 'MS_Description', 'App版本信息表', 'SCHEMA', 'dbo', 'TABLE', 'app_version';
EXEC sp_addextendedproperty 'MS_Description', '版本ID', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'version_id';
EXEC sp_addextendedproperty 'MS_Description', '版本号（数字）', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'version_code';
EXEC sp_addextendedproperty 'MS_Description', '版本名（如1.0.0）', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'version_name';
EXEC sp_addextendedproperty 'MS_Description', '更新内容', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'update_content';
EXEC sp_addextendedproperty 'MS_Description', '下载地址', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'download_url';
EXEC sp_addextendedproperty 'MS_Description', '是否强制更新（0否 1是）', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'is_force';
EXEC sp_addextendedproperty 'MS_Description', '平台（android、ios）', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'platform';
EXEC sp_addextendedproperty 'MS_Description', '创建时间', 'SCHEMA', 'dbo', 'TABLE', 'app_version', 'COLUMN', 'create_time';

COMMIT;