feat: 实现端停用与删除的消息作废与群主转让级联
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user