File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
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<string>;
};
/** 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);
}