67 lines
6.0 KiB
Go
67 lines
6.0 KiB
Go
|
|
// 功能:家庭成员与设备共享表的增量迁移;版本:1.0.0。
|
|||
|
|
package main
|
|||
|
|
|
|||
|
|
// migrateFamilySharing 只新增家庭共享相关表、约束、索引和中文注释。
|
|||
|
|
func migrateFamilySharing() error {
|
|||
|
|
return migrateClientColumns([]string{
|
|||
|
|
`CREATE TABLE IF NOT EXISTS user_family_member (
|
|||
|
|
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)), owner_user_account_id bigint NOT NULL REFERENCES user_account(id), member_user_account_id bigint NOT NULL DEFAULT 0,
|
|||
|
|
name varchar(64) NOT NULL, phone varchar(32) NOT NULL, relationship varchar(32) NOT NULL DEFAULT '', invite_status integer NOT NULL DEFAULT 10 CHECK (invite_status IN (10,20,30,40)),
|
|||
|
|
request_no varchar(36) NOT NULL, expires_at timestamptz NOT NULL, accepted_at timestamptz, revoked_at timestamptz,
|
|||
|
|
UNIQUE(owner_user_account_id, request_no))`,
|
|||
|
|
`COMMENT ON TABLE user_family_member IS '家庭成员邀请与确认关系;紧急联系人不自动成为家庭成员'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.id IS '数据库自增内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.identity IS '对外业务UUID标识'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.created_at IS '邀请创建时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.updated_at IS '最后修改时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.deleted_at IS '软删除时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.status IS '通用状态:1=启用,3=归档'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.owner_user_account_id IS '房主用户内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.member_user_account_id IS '已接受邀请的成员用户内部主键;0=尚未接受'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.name IS '房主填写的成员称呼'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.phone IS '受邀手机号;接口仅脱敏显示'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.relationship IS '与房主关系描述'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.invite_status IS '邀请状态:10=待确认,20=已接受,30=已拒绝,40=已撤销'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.request_no IS '同一房主邀请请求幂等UUID'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.expires_at IS '邀请失效时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.accepted_at IS '成员接受邀请时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_member.revoked_at IS '房主撤销成员时间'`,
|
|||
|
|
`CREATE UNIQUE INDEX IF NOT EXISTS ux_family_active_phone ON user_family_member(owner_user_account_id,phone) WHERE status=1 AND invite_status IN (10,20) AND deleted_at IS NULL`,
|
|||
|
|
`CREATE INDEX IF NOT EXISTS idx_family_invitee ON user_family_member(phone,invite_status,status)`,
|
|||
|
|
`CREATE TABLE IF NOT EXISTS user_device_share (
|
|||
|
|
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)), family_member_id bigint NOT NULL REFERENCES user_family_member(id), product_info_id bigint NOT NULL REFERENCES product_info(id),
|
|||
|
|
can_view boolean NOT NULL DEFAULT false, can_alert boolean NOT NULL DEFAULT false, can_control boolean NOT NULL DEFAULT false, UNIQUE(family_member_id,product_info_id))`,
|
|||
|
|
`COMMENT ON TABLE user_device_share IS '家庭成员按设备分配的查看、告警和控制权限'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.id IS '数据库自增内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.identity IS '对外业务UUID标识'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.created_at IS '授权创建时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.updated_at IS '授权最后修改时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.deleted_at IS '软删除时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.status IS '授权状态:1=启用,3=归档'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.family_member_id IS '家庭成员关系内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.product_info_id IS '房主名下设备内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.can_view IS '是否允许查看设备资料和状态'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.can_alert IS '是否允许接收危险告警'`,
|
|||
|
|
`COMMENT ON COLUMN user_device_share.can_control IS '是否允许发起远程控制;执行时仍需二次确认'`,
|
|||
|
|
`CREATE TABLE IF NOT EXISTS user_family_audit (
|
|||
|
|
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, owner_user_account_id bigint NOT NULL REFERENCES user_account(id), family_member_id bigint NOT NULL DEFAULT 0,
|
|||
|
|
actor_user_account_id bigint NOT NULL REFERENCES user_account(id), action varchar(32) NOT NULL, summary varchar(512) NOT NULL DEFAULT '')`,
|
|||
|
|
`COMMENT ON TABLE user_family_audit IS '家庭邀请和设备授权操作审计,只记录必要摘要'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.id IS '数据库自增内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.identity IS '对外业务UUID标识'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.created_at IS '操作发生时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.updated_at IS '记录更新时间'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.deleted_at IS '软删除时间,审计记录正常不删除'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.status IS '记录状态:1=有效'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.owner_user_account_id IS '房主用户内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.family_member_id IS '关联成员内部主键;0=无成员'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.actor_user_account_id IS '执行操作的用户内部主键'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.action IS '操作类型:invite/accept/reject/update_permissions/revoke'`,
|
|||
|
|
`COMMENT ON COLUMN user_family_audit.summary IS '不含手机号的操作摘要'`,
|
|||
|
|
`CREATE INDEX IF NOT EXISTS idx_family_audit_owner_time ON user_family_audit(owner_user_account_id,created_at DESC)`,
|
|||
|
|
})
|
|||
|
|
}
|