Files
platforms/backend/api/cmd/cli/family_migration.go
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

67 lines
6.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 功能家庭成员与设备共享表的增量迁移版本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)`,
})
}