38 lines
2.5 KiB
Go
38 lines
2.5 KiB
Go
// 功能:独立创建用户设备分组表及产品归组字段,不迁移其他业务表;版本:1.0.0。
|
||
package main
|
||
|
||
// migrateDeviceGroups 创建分组资料并补充产品归组字段,重复执行不清空现有数据。
|
||
func migrateDeviceGroups() error {
|
||
return migrateClientColumns([]string{
|
||
`CREATE TABLE IF NOT EXISTS user_device_group (
|
||
id bigserial PRIMARY KEY,
|
||
identity varchar(36) NOT NULL UNIQUE,
|
||
created_at timestamptz NOT NULL,
|
||
updated_at timestamptz NOT NULL,
|
||
deleted_at timestamptz,
|
||
status integer NOT NULL DEFAULT 1 CHECK (status IN (1,3)),
|
||
user_account_id bigint NOT NULL REFERENCES user_account(id),
|
||
name varchar(32) NOT NULL,
|
||
request_no varchar(36) NOT NULL,
|
||
sort_no integer NOT NULL DEFAULT 0,
|
||
UNIQUE(user_account_id, request_no)
|
||
)`,
|
||
`COMMENT ON TABLE user_device_group IS '用户本人设备展示分组;不授予设备控制、共享或物联网权限'`,
|
||
`COMMENT ON COLUMN user_device_group.id IS '数据库自增内部主键'`,
|
||
`COMMENT ON COLUMN user_device_group.identity IS '对外业务UUID标识'`,
|
||
`COMMENT ON COLUMN user_device_group.created_at IS '分组创建时间'`,
|
||
`COMMENT ON COLUMN user_device_group.updated_at IS '分组最后修改时间'`,
|
||
`COMMENT ON COLUMN user_device_group.deleted_at IS '软删除时间;当前删除操作使用状态归档'`,
|
||
`COMMENT ON COLUMN user_device_group.status IS '状态:1=启用,3=已归档'`,
|
||
`COMMENT ON COLUMN user_device_group.user_account_id IS '分组所属用户内部主键,仅本人可读写'`,
|
||
`COMMENT ON COLUMN user_device_group.name IS '用户自定义分组名称,最多32字'`,
|
||
`COMMENT ON COLUMN user_device_group.request_no IS '客户端新增请求UUID,同一用户内唯一且归档后不复用'`,
|
||
`COMMENT ON COLUMN user_device_group.sort_no IS '同一用户内显示顺序,数值越小越靠前'`,
|
||
`CREATE UNIQUE INDEX IF NOT EXISTS idx_device_group_active_name ON user_device_group(user_account_id,name) WHERE status=1 AND deleted_at IS NULL`,
|
||
`CREATE INDEX IF NOT EXISTS idx_device_group_user_sort ON user_device_group(user_account_id,status,sort_no,id)`,
|
||
`ALTER TABLE product_info ADD COLUMN IF NOT EXISTS device_group_id bigint NOT NULL DEFAULT 0`,
|
||
`COMMENT ON COLUMN product_info.device_group_id IS '当前用户设备分组内部主键;0表示未分组,产品归属变化时必须清空'`,
|
||
`CREATE INDEX IF NOT EXISTS idx_product_device_group ON product_info(user_account_id,device_group_id) WHERE device_group_id <> 0`,
|
||
})
|
||
}
|