feat: append-only audit trail for all mutations (P0)
This commit is contained in:
@@ -13,11 +13,12 @@ import (
|
||||
)
|
||||
|
||||
type TenantService struct {
|
||||
db *sqlx.DB
|
||||
db *sqlx.DB
|
||||
audit *AuditService
|
||||
}
|
||||
|
||||
func NewTenantService(db *sqlx.DB) *TenantService {
|
||||
return &TenantService{db: db}
|
||||
func NewTenantService(db *sqlx.DB, audit *AuditService) *TenantService {
|
||||
return &TenantService{db: db, audit: audit}
|
||||
}
|
||||
|
||||
// Create creates a new tenant and assigns the creator as owner.
|
||||
@@ -49,6 +50,7 @@ func (s *TenantService) Create(ctx context.Context, userID uuid.UUID, name, slug
|
||||
return nil, fmt.Errorf("commit: %w", err)
|
||||
}
|
||||
|
||||
s.audit.Log(ctx, "create", "tenant", &tenant.ID, nil, tenant)
|
||||
return &tenant, nil
|
||||
}
|
||||
|
||||
@@ -184,6 +186,7 @@ func (s *TenantService) InviteByEmail(ctx context.Context, tenantID uuid.UUID, e
|
||||
return nil, fmt.Errorf("invite user: %w", err)
|
||||
}
|
||||
|
||||
s.audit.Log(ctx, "create", "membership", &tenantID, nil, ut)
|
||||
return &ut, nil
|
||||
}
|
||||
|
||||
@@ -199,6 +202,7 @@ func (s *TenantService) UpdateSettings(ctx context.Context, tenantID uuid.UUID,
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("update settings: %w", err)
|
||||
}
|
||||
s.audit.Log(ctx, "update", "settings", &tenantID, nil, settings)
|
||||
return &tenant, nil
|
||||
}
|
||||
|
||||
@@ -236,5 +240,6 @@ func (s *TenantService) RemoveMember(ctx context.Context, tenantID, userID uuid.
|
||||
return fmt.Errorf("remove member: %w", err)
|
||||
}
|
||||
|
||||
s.audit.Log(ctx, "delete", "membership", &tenantID, map[string]any{"user_id": userID, "role": role}, nil)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user