fix: 后台加人审计按实际插入数避免全跳过记成 ok

This commit is contained in:
Nixevol
2026-09-30 19:18:48 +08:00
parent f936a6b312
commit b9b88f1bfd
6 changed files with 143 additions and 13 deletions
+33 -5
View File
@@ -316,6 +316,13 @@ func (h *Handler) handleGroupAddMembers(w http.ResponseWriter, r *http.Request)
return
}
before, err := h.groupMemberCount(r.Context(), id)
if err != nil {
h.auditP(p, "group_add_members", id, "error", ip)
httpx.WriteError(w, http.StatusInternalServerError, "internal", "内部错误")
return
}
res, err := h.groups.AdminAddMembers(r.Context(), id, req.MemberIDs)
if err != nil {
h.writeGroupErr(w, p, "group_add_members", id, ip, err)
@@ -325,15 +332,29 @@ func (h *Handler) handleGroupAddMembers(w http.ResponseWriter, r *http.Request)
if failed == nil {
failed = []group.MemberFail{}
}
okN := len(req.MemberIDs) - len(failed)
if okN < 0 {
okN = 0
after, err := h.groupMemberCount(r.Context(), id)
if err != nil {
h.auditP(p, "group_add_members", id, "error", ip)
httpx.WriteError(w, http.StatusInternalServerError, "internal", "内部错误")
return
}
h.auditPD(p, "group_add_members", id, batchAuditResult(okN, len(failed)), ip, map[string]any{
added := after - before
if added < 0 {
added = 0
}
// 已是成员/请求内重复编号会静默跳过,不算失败;审计用实际插入数,避免全跳过写成 ok。
result := batchAuditResult(added, len(failed))
if added == 0 && len(failed) == 0 {
result = "noop"
}
h.auditPD(p, "group_add_members", id, result, ip, map[string]any{
"members": req.MemberIDs,
"failed": failed,
"added": added,
})
httpx.WriteOK(w, map[string]any{"failed": failed})
httpx.WriteOK(w, map[string]any{"failed": failed, "added": added})
}
func (h *Handler) handleGroupRemoveMember(w http.ResponseWriter, r *http.Request) {
@@ -413,6 +434,13 @@ func (h *Handler) groupOwner(ctx context.Context, groupID string) (string, error
return owner, err
}
func (h *Handler) groupMemberCount(ctx context.Context, groupID string) (int, error) {
var n int
err := h.db.Read.QueryRowContext(ctx,
`SELECT COUNT(*) FROM group_members WHERE group_id = ?`, groupID).Scan(&n)
return n, err
}
func (h *Handler) groupSummary(ctx context.Context, groupID string) (map[string]any, error) {
var name, owner string
var created int64