- {user.tenant?.name || user.companyCode || "-"}
+ {user.tenant?.name || user.tenantSlug || "-"}
{user.department || "-"}
diff --git a/adminfront/src/features/users/components/UserBulkMoveGroupModal.tsx b/adminfront/src/features/users/components/UserBulkMoveGroupModal.tsx
index 4334fe5c..c3f91f8b 100644
--- a/adminfront/src/features/users/components/UserBulkMoveGroupModal.tsx
+++ b/adminfront/src/features/users/components/UserBulkMoveGroupModal.tsx
@@ -138,7 +138,7 @@ export function UserBulkMoveGroupModal({
if (!selectedTenantSlug) return;
mutation.mutate({
userIds,
- companyCode: selectedTenantSlug,
+ tenantSlug: selectedTenantSlug,
department: selectedGroupName, // can be empty for "No Department"
} as any);
};
diff --git a/adminfront/src/features/users/components/UserBulkUploadModal.tsx b/adminfront/src/features/users/components/UserBulkUploadModal.tsx
index 789b66b5..cf978162 100644
--- a/adminfront/src/features/users/components/UserBulkUploadModal.tsx
+++ b/adminfront/src/features/users/components/UserBulkUploadModal.tsx
@@ -74,7 +74,7 @@ export function UserBulkUploadModal({ onSuccess }: UserBulkUploadModalProps) {
};
const downloadTemplate = () => {
- const headers = "email,name,phone,role,companyCode,department,employee_id";
+ const headers = "email,name,phone,role,tenant,department,employee_id";
const example =
"user1@example.com,홍길동,010-1234-5678,user,tenant-slug,개발팀,EMP001";
const blob = new Blob(
@@ -203,7 +203,7 @@ ${example}`,
| {u.email} |
{u.name} |
- {u.companyCode || "-"} |
+ {u.tenantSlug || "-"} |
))}
{previewData.length > 10 && (
diff --git a/adminfront/src/features/users/utils/csvParser.test.ts b/adminfront/src/features/users/utils/csvParser.test.ts
index 019f0b83..f31bc396 100644
--- a/adminfront/src/features/users/utils/csvParser.test.ts
+++ b/adminfront/src/features/users/utils/csvParser.test.ts
@@ -3,7 +3,7 @@ import { parseUserCSV } from "./csvParser";
describe("parseUserCSV", () => {
it("should parse valid CSV correctly", () => {
- const csv = `email,name,phone,role,companyCode,department,emp_id
+ const csv = `email,name,phone,role,tenant,department,emp_id
user1@test.com,Hong Gil Dong,010-1111-2222,user,baron,HR,E001
user2@test.com,Kim Cheol Su,,admin,baron,IT,E002`;
@@ -15,7 +15,7 @@ user2@test.com,Kim Cheol Su,,admin,baron,IT,E002`;
name: "Hong Gil Dong",
phone: "010-1111-2222",
role: "user",
- companyCode: "baron",
+ tenantSlug: "baron",
department: "HR",
metadata: {
emp_id: "E001",
@@ -37,10 +37,10 @@ no-name@test.com,`;
});
it("should handle mixed case headers", () => {
- const csv = `EMAIL,Name,CompanyCode
+ const csv = `EMAIL,Name,Tenant
test@test.com,Test,baron`;
const result = parseUserCSV(csv);
expect(result[0].email).toBe("test@test.com");
- expect(result[0].companyCode).toBe("baron");
+ expect(result[0].tenantSlug).toBe("baron");
});
});
diff --git a/adminfront/src/features/users/utils/csvParser.ts b/adminfront/src/features/users/utils/csvParser.ts
index f4ce6543..601eb762 100644
--- a/adminfront/src/features/users/utils/csvParser.ts
+++ b/adminfront/src/features/users/utils/csvParser.ts
@@ -30,8 +30,8 @@ export function parseUserCSV(text: string): BulkUserItem[] {
item.phone = value;
} else if (header === "role") {
item.role = value;
- } else if (header === "companycode") {
- item.companyCode = value;
+ } else if (header === "tenant") {
+ item.tenantSlug = value;
} else if (header === "department") {
item.department = value;
} else {
diff --git a/adminfront/src/lib/adminApi.ts b/adminfront/src/lib/adminApi.ts
index a390501c..fe885349 100644
--- a/adminfront/src/lib/adminApi.ts
+++ b/adminfront/src/lib/adminApi.ts
@@ -352,7 +352,7 @@ export type UserSummary = {
phone?: string;
role: string;
status: string;
- companyCode?: string;
+ tenantSlug?: string;
tenant?: TenantSummary;
joinedTenants?: TenantSummary[]; // [New] 다중 소속 테넌트 목록
metadata?: Record;
@@ -376,7 +376,7 @@ export type UserCreateRequest = {
name: string;
phone?: string;
role?: string;
- companyCode?: string;
+ tenantSlug?: string;
department?: string;
position?: string;
jobTitle?: string;
@@ -392,7 +392,7 @@ export type UserUpdateRequest = {
phone?: string;
role?: string;
status?: string;
- companyCode?: string;
+ tenantSlug?: string;
department?: string;
position?: string;
jobTitle?: string;
@@ -403,7 +403,7 @@ export type BulkUserItem = {
name: string;
phone?: string;
role?: string;
- companyCode?: string;
+ tenantSlug?: string;
department?: string;
metadata?: Record;
};
@@ -423,10 +423,10 @@ export async function fetchUsers(
limit = 50,
offset = 0,
search?: string,
- companyCode?: string,
+ tenantSlug?: string,
) {
const { data } = await apiClient.get("/v1/admin/users", {
- params: { limit, offset, search, companyCode },
+ params: { limit, offset, search, tenantSlug },
});
return data;
}
@@ -446,10 +446,10 @@ export async function createUser(payload: UserCreateRequest) {
return data;
}
-export function exportUsersCSVUrl(search?: string, companyCode?: string) {
+export function exportUsersCSVUrl(search?: string, tenantSlug?: string) {
const params = new URLSearchParams();
if (search) params.append("search", search);
- if (companyCode) params.append("companyCode", companyCode);
+ if (tenantSlug) params.append("tenantSlug", tenantSlug);
// Get mock role from storage if exists for dev environment
const mockRole = window.localStorage.getItem("X-Mock-Role");
@@ -503,7 +503,7 @@ export type UserProfileResponse = {
role: string;
department: string;
affiliationType: string;
- companyCode?: string;
+ tenantSlug?: string;
tenantId?: string;
metadata?: Record;
tenant?: TenantSummary;
diff --git a/adminfront/src/lib/i18n.test.ts b/adminfront/src/lib/i18n.test.ts
index cd5b5f0a..250e097f 100644
--- a/adminfront/src/lib/i18n.test.ts
+++ b/adminfront/src/lib/i18n.test.ts
@@ -8,15 +8,15 @@ describe("i18n utility", () => {
});
it("returns fallback if key not found", () => {
- expect(t("non.existent.key", "Fallback")).toBe("Fallback");
+ expect(t("this.key.truly.does.not.exist", "Fallback")).toBe("Fallback");
});
it("returns key if fallback not provided and key not found", () => {
- expect(t("non.existent.key")).toBe("non.existent.key");
+ expect(t("this.key.truly.does.not.exist")).toBe("this.key.truly.does.not.exist");
});
it("replaces variables in template", () => {
- expect(t("test.key", "Hello {{ name }}", { name: "World" })).toBe(
+ expect(t("this.test.key", "Hello {{ name }}", { name: "World" })).toBe(
"Hello World",
);
});
diff --git a/adminfront/tests/users_schema.spec.ts b/adminfront/tests/users_schema.spec.ts
index 88db0d7b..2450d7c8 100644
--- a/adminfront/tests/users_schema.spec.ts
+++ b/adminfront/tests/users_schema.spec.ts
@@ -70,7 +70,7 @@ test.describe("User Schema Dynamic Form", () => {
id: "u-1",
name: "John Doe",
email: "john@test.com",
- companyCode: "test-tenant",
+ tenantSlug: "test-tenant",
tenant: { id: "t-1", name: "Test Tenant", slug: "test-tenant" },
joinedTenants: [
{ id: "t-1", name: "Test Tenant", slug: "test-tenant" },