实现个人客户微信认证和短信验证功能
- 添加个人客户微信登录和手机验证码登录接口 - 实现个人客户设备、ICCID、手机号关联管理 - 添加短信发送服务(HTTP 客户端) - 添加微信认证服务(含 mock 实现) - 添加 JWT Token 生成和验证工具 - 创建数据库迁移脚本(personal_customer 关联表) - 修复测试文件中的路由注册参数错误 - 重构 scripts 目录结构(分离独立脚本到子目录) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
-- 删除个人客户设备号绑定表
|
||||
DROP INDEX IF EXISTS idx_personal_customer_device_deleted_at;
|
||||
DROP INDEX IF EXISTS idx_personal_customer_device_device_no;
|
||||
DROP INDEX IF EXISTS idx_personal_customer_device_customer_device;
|
||||
DROP TABLE IF EXISTS personal_customer_device;
|
||||
|
||||
-- 删除个人客户 ICCID 绑定表
|
||||
DROP INDEX IF EXISTS idx_personal_customer_iccid_deleted_at;
|
||||
DROP INDEX IF EXISTS idx_personal_customer_iccid_iccid;
|
||||
DROP INDEX IF EXISTS idx_personal_customer_iccid_customer_iccid;
|
||||
DROP TABLE IF EXISTS personal_customer_iccid;
|
||||
|
||||
-- 删除个人客户手机号绑定表
|
||||
DROP INDEX IF EXISTS idx_personal_customer_phone_deleted_at;
|
||||
DROP INDEX IF EXISTS idx_personal_customer_phone_phone;
|
||||
DROP INDEX IF EXISTS idx_personal_customer_phone_customer_phone;
|
||||
DROP TABLE IF EXISTS personal_customer_phone;
|
||||
86
migrations/000004_create_personal_customer_relations.up.sql
Normal file
86
migrations/000004_create_personal_customer_relations.up.sql
Normal file
@@ -0,0 +1,86 @@
|
||||
-- 创建个人客户手机号绑定表
|
||||
CREATE TABLE IF NOT EXISTS personal_customer_phone (
|
||||
id SERIAL PRIMARY KEY,
|
||||
customer_id INTEGER NOT NULL,
|
||||
phone VARCHAR(20) NOT NULL,
|
||||
is_primary BOOLEAN DEFAULT false,
|
||||
verified_at TIMESTAMP,
|
||||
status INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at TIMESTAMP
|
||||
);
|
||||
|
||||
COMMENT ON TABLE personal_customer_phone IS '个人客户手机号绑定表';
|
||||
COMMENT ON COLUMN personal_customer_phone.id IS '主键ID';
|
||||
COMMENT ON COLUMN personal_customer_phone.customer_id IS '个人客户ID';
|
||||
COMMENT ON COLUMN personal_customer_phone.phone IS '手机号';
|
||||
COMMENT ON COLUMN personal_customer_phone.is_primary IS '是否主手机号';
|
||||
COMMENT ON COLUMN personal_customer_phone.verified_at IS '验证通过时间';
|
||||
COMMENT ON COLUMN personal_customer_phone.status IS '状态 0=禁用 1=启用';
|
||||
COMMENT ON COLUMN personal_customer_phone.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN personal_customer_phone.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN personal_customer_phone.deleted_at IS '删除时间(软删除)';
|
||||
|
||||
-- 创建索引
|
||||
CREATE UNIQUE INDEX idx_personal_customer_phone_customer_phone ON personal_customer_phone(customer_id, phone) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX idx_personal_customer_phone_phone ON personal_customer_phone(phone);
|
||||
CREATE INDEX idx_personal_customer_phone_deleted_at ON personal_customer_phone(deleted_at);
|
||||
|
||||
-- 创建个人客户 ICCID 绑定表
|
||||
CREATE TABLE IF NOT EXISTS personal_customer_iccid (
|
||||
id SERIAL PRIMARY KEY,
|
||||
customer_id INTEGER NOT NULL,
|
||||
iccid VARCHAR(20) NOT NULL,
|
||||
bind_at TIMESTAMP,
|
||||
last_used_at TIMESTAMP,
|
||||
status INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at TIMESTAMP
|
||||
);
|
||||
|
||||
COMMENT ON TABLE personal_customer_iccid IS '个人客户ICCID绑定表';
|
||||
COMMENT ON COLUMN personal_customer_iccid.id IS '主键ID';
|
||||
COMMENT ON COLUMN personal_customer_iccid.customer_id IS '个人客户ID';
|
||||
COMMENT ON COLUMN personal_customer_iccid.iccid IS 'ICCID(20位数字)';
|
||||
COMMENT ON COLUMN personal_customer_iccid.bind_at IS '绑定时间';
|
||||
COMMENT ON COLUMN personal_customer_iccid.last_used_at IS '最后使用时间';
|
||||
COMMENT ON COLUMN personal_customer_iccid.status IS '状态 0=禁用 1=启用';
|
||||
COMMENT ON COLUMN personal_customer_iccid.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN personal_customer_iccid.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN personal_customer_iccid.deleted_at IS '删除时间(软删除)';
|
||||
|
||||
-- 创建索引
|
||||
CREATE UNIQUE INDEX idx_personal_customer_iccid_customer_iccid ON personal_customer_iccid(customer_id, iccid) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX idx_personal_customer_iccid_iccid ON personal_customer_iccid(iccid);
|
||||
CREATE INDEX idx_personal_customer_iccid_deleted_at ON personal_customer_iccid(deleted_at);
|
||||
|
||||
-- 创建个人客户设备号绑定表
|
||||
CREATE TABLE IF NOT EXISTS personal_customer_device (
|
||||
id SERIAL PRIMARY KEY,
|
||||
customer_id INTEGER NOT NULL,
|
||||
device_no VARCHAR(50) NOT NULL,
|
||||
bind_at TIMESTAMP,
|
||||
last_used_at TIMESTAMP,
|
||||
status INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at TIMESTAMP
|
||||
);
|
||||
|
||||
COMMENT ON TABLE personal_customer_device IS '个人客户设备号绑定表';
|
||||
COMMENT ON COLUMN personal_customer_device.id IS '主键ID';
|
||||
COMMENT ON COLUMN personal_customer_device.customer_id IS '个人客户ID';
|
||||
COMMENT ON COLUMN personal_customer_device.device_no IS '设备号/IMEI';
|
||||
COMMENT ON COLUMN personal_customer_device.bind_at IS '绑定时间';
|
||||
COMMENT ON COLUMN personal_customer_device.last_used_at IS '最后使用时间';
|
||||
COMMENT ON COLUMN personal_customer_device.status IS '状态 0=禁用 1=启用';
|
||||
COMMENT ON COLUMN personal_customer_device.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN personal_customer_device.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN personal_customer_device.deleted_at IS '删除时间(软删除)';
|
||||
|
||||
-- 创建索引
|
||||
CREATE UNIQUE INDEX idx_personal_customer_device_customer_device ON personal_customer_device(customer_id, device_no) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX idx_personal_customer_device_device_no ON personal_customer_device(device_no);
|
||||
CREATE INDEX idx_personal_customer_device_deleted_at ON personal_customer_device(deleted_at);
|
||||
Reference in New Issue
Block a user