// 功能:家庭成员与设备共享表的增量迁移;版本: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)`, }) }