feat: 实现端停用与删除的消息作废与群主转让级联

This commit is contained in:
Nixevol
2026-09-30 08:10:52 +08:00
parent b8569b0708
commit 19a8ec95fa
8 changed files with 1143 additions and 16 deletions
+31 -2
View File
@@ -308,6 +308,21 @@ func (h *Handler) patchEndpoint(ctx context.Context, id string, name, remark *st
}
func (h *Handler) setEndpointEnabled(ctx context.Context, id string, enabled bool) (found bool, err error) {
if h.identity != nil {
var opErr error
if enabled {
opErr = h.identity.Enable(ctx, id)
} else {
opErr = h.identity.Disable(ctx, id)
}
if opErr != nil {
if isEndpointNotFound(opErr) {
return false, nil
}
return false, opErr
}
return true, nil
}
err = h.db.Queue.Do(ctx, func(tx *sql.Tx) error {
v := 0
if enabled {
@@ -331,9 +346,18 @@ func (h *Handler) setEndpointEnabled(ctx context.Context, id string, enabled boo
return found, err
}
// deleteEndpointBasic 删除端行并清掉与之相关的 talk_grants。
// 作废消息、群主转让等完整级联留给 I5。
// deleteEndpointBasic 删除端;注入 Identity 时走 I5 完整级联。
func (h *Handler) deleteEndpointBasic(ctx context.Context, id string) (found bool, err error) {
if h.identity != nil {
opErr := h.identity.Delete(ctx, id)
if opErr != nil {
if isEndpointNotFound(opErr) {
return false, nil
}
return false, opErr
}
return true, nil
}
err = h.db.Queue.Do(ctx, func(tx *sql.Tx) error {
if _, e := tx.ExecContext(ctx, `DELETE FROM talk_grants WHERE sender_id = ? OR target_id = ?`, id, id); e != nil {
return e
@@ -349,6 +373,11 @@ func (h *Handler) deleteEndpointBasic(ctx context.Context, id string) (found boo
return found, err
}
func isEndpointNotFound(err error) bool {
var pe *protocol.Error
return errors.As(err, &pe) && pe.Code == protocol.CodeNotFound
}
func (h *Handler) resetLoginPassword(ctx context.Context, id, loginHash string) (bool, error) {
var found bool
err := h.db.Queue.Do(ctx, func(tx *sql.Tx) error {