import 'server-only'; import type { AdminMember } from '@/lib/domain/admin-member'; /** * 관리자 회원 **삭제**의 mock 오버레이 — 백엔드에 삭제 API가 없어 임시로 두는 계층이다. * 등록·수정·중복확인은 실제 API를 쓰므로(`admin-member-repository.ts`) 여기 남는 책임은 삭제뿐이다. * * 백엔드(edupay-backend develop 924db37) `MngrAdminApiController`에는 GET 3개(목록·단건·중복확인)와 * POST·PUT만 있고 `@DeleteMapping`이 없다. 수정 API로 비활성화를 대신할 수도 없다 — UPDATE 문이 * `USE_YN`을 건드리지 않아 사용여부를 끌 수단 자체가 없다(바꿀 수 있는 건 `ACCT_LOCK_YN`뿐). * * **한계** — 서버 프로세스 메모리에만 있다. 재시작하면 삭제한 행이 되살아나고, 인스턴스가 여럿이면 * 공유되지 않는다. 삭제한 계정의 로그인 ID도 백엔드에는 그대로 남아 재등록 시 중복으로 걸린다. * * 백엔드에 삭제 API가 생기면 이 파일을 지우고 Repository의 `deleteAdminMember` 본문만 교체한다. */ type MockStoreState = { deletedIds: Set; }; /** HMR로 모듈이 다시 평가돼도 삭제 상태가 초기화되지 않도록 globalThis에 붙인다(mock 전용 편법). */ const globalStore = globalThis as typeof globalThis & { __adminMemberMockStore?: MockStoreState; }; function getState(): MockStoreState { globalStore.__adminMemberMockStore ??= { deletedIds: new Set() }; return globalStore.__adminMemberMockStore; } /** 백엔드 목록에서 mock 삭제된 행을 걷어낸다. 정렬·검색·페이징은 Repository가 한다. */ export function applyMockDeletions(backendItems: AdminMember[]): AdminMember[] { const { deletedIds } = getState(); return backendItems.filter((item) => !deletedIds.has(item.id)); } export function isMockDeleted(id: string): boolean { return getState().deletedIds.has(id); } /** 백엔드 행은 매 조회마다 다시 등장하므로 삭제 사실을 따로 기억해야 한다. */ export function markMockDeleted(id: string): void { getState().deletedIds.add(id); }