From 03e8ed4822229b369308daa0c3b59a93f5cc10c8 Mon Sep 17 00:00:00 2001 From: chan Date: Wed, 4 Mar 2026 17:42:58 +0900 Subject: [PATCH] fix: resolve build errors and fix member count synchronization issues in bulk/org-chart import --- backend/internal/handler/user_handler.go | 12 ++++++++++++ backend/internal/service/org_chart_service.go | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/backend/internal/handler/user_handler.go b/backend/internal/handler/user_handler.go index 828bbd19..5faea3af 100644 --- a/backend/internal/handler/user_handler.go +++ b/backend/internal/handler/user_handler.go @@ -530,7 +530,19 @@ func (h *UserHandler) BulkCreateUsers(c *fiber.Ctx) error { localUser := h.mapToLocalUser(*identity) _ = h.UserRepo.Update(context.Background(), localUser) if h.KetoOutboxRepo != nil { + // 1. Sync Role based relationship h.syncKetoRole(context.Background(), localUser.ID, role, "", "", localUser.TenantID) + + // 2. Sync direct membership to the Tenant (for count) + if localUser.TenantID != nil && *localUser.TenantID != "" { + _ = h.KetoOutboxRepo.Create(context.Background(), &domain.KetoOutbox{ + Namespace: "Tenant", + Object: *localUser.TenantID, + Relation: "members", + Subject: "User:" + localUser.ID, + Action: domain.KetoOutboxActionCreate, + }) + } } } } diff --git a/backend/internal/service/org_chart_service.go b/backend/internal/service/org_chart_service.go index 4cdcbb59..d8e419cf 100644 --- a/backend/internal/service/org_chart_service.go +++ b/backend/internal/service/org_chart_service.go @@ -139,6 +139,17 @@ func (s *orgChartService) ImportCSV(ctx context.Context, tenantID string, r io.R Action: domain.KetoOutboxActionCreate, }) + // [New] Also add as member of the root Tenant (for tenant-level member count) + if leafID != tenantID { + _ = s.ketoOutboxRepo.Create(ctx, &domain.KetoOutbox{ + Namespace: "Tenant", + Object: tenantID, + Relation: "members", + Subject: "User:" + kratosID, + Action: domain.KetoOutboxActionCreate, + }) + } + // Add as owner if applicable if isOwner { _ = s.ketoOutboxRepo.Create(ctx, &domain.KetoOutbox{