fix: 后台加人审计按实际插入数避免全跳过记成 ok
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user