임동욱 임동욱 09-03
Merge branch 'claude/franchise-management-category-search-removal-ca3eaf' into hub
@ca22a358295ebb6d1b7c4693f857ccb68af32ede
lib/data/repositories/point-account-repository.ts
--- lib/data/repositories/point-account-repository.ts
+++ lib/data/repositories/point-account-repository.ts
@@ -5,7 +5,10 @@
   PointAccount,
   PointHistoryEntry,
 } from '@/lib/domain/point-account';
-import type { PointAccountQuery } from '@/lib/domain/point-account-query';
+import type {
+  PointAccountQuery,
+  PointAccountSearchField,
+} from '@/lib/domain/point-account-query';
 
 /**
  * 누적포인트 관리 Repository.
@@ -18,18 +21,25 @@
  * 조회 전용이다 — 백엔드에 쓰기 엔드포인트가 없다.
  *
  * ⚠️ 백엔드 이슈 — 화면이 기획대로 동작하지 못하는 부분
- * 1. 목록 검색이 전혀 걸리지 않는다. `MngrPointStatsSearchVo`에 `searchSchulNm`·
- *    `searchGradeCd`·`searchClsNo`·`searchNo`·`searchUserId`가 있지만 `MngrPointStatsMapper.xml`
- *    의 `includeSql`에 WHERE 절이 없어 항상 전체가 나온다. 아래에서 파라미터는 규약대로
- *    보내 두었으니 매퍼에 조건만 추가되면 프론트 수정 없이 동작한다.
- * 2. 번호(출석번호)·회원번호·구분(사이트) 열의 원본이 응답에 없다. 회원번호 자리는
- *    로그인 아이디로 대신 채우고 나머지는 빈 값이다.
+ * 1. 목록 검색이 아직 걸리지 않는다. 매퍼에 검색 WHERE(`includeWhere` — `searchCondition`
+ *    1=아이디·2=이름, `searchSchulNm`·`searchGradeCd`·`searchClsNo`·`searchBno`)는 생겼지만
+ *    `selectPagination`·`selectPaginationCount`가 이 블록을 include하지 않아 항상 전체가
+ *    나온다. 아래 파라미터는 VO·매퍼 규약대로 보내 두었으니 백엔드가 연결만 하면 프론트
+ *    수정 없이 동작한다.
+ * 2. 회원번호·구분(사이트) 열의 원본이 응답에 없다. 회원번호 자리는 로그인 아이디로 대신
+ *    채우고 구분은 빈 값이다.
  * 3. 현재포인트는 SQL에서 `p.current_point`를 뽑지만 VO에 필드가 없어 응답에서 사라진다.
  *    `total_point = current_point + use_point` 정의를 역산해 채운다.
  * 4. 차감포인트는 개념 자체가 없다(`POINT_TYPE_CD`는 취득 `E`·사용 `S` 둘뿐). 0으로 둔다.
  */
 
 const STATS_PATH = '/api/v1/mngr/point/stats';
+
+/** 화면 검색 대상 → 백엔드 `searchCondition`(매퍼 규약: 1=아이디, 2=이름). */
+const SEARCH_CONDITION_BY_FIELD: Record<PointAccountSearchField, string> = {
+  loginId: '1',
+  studentName: '2',
+};
 
 function isRecord(value: unknown): value is Record<string, unknown> {
   return value !== null && typeof value === 'object';
@@ -66,7 +76,7 @@
     schoolName: readString(raw, 'schNm'),
     grade: readNumber(raw, 'grade'),
     classNo: readNumber(raw, 'clsNo'),
-    studentNo: 0,
+    studentNo: readNumber(raw, 'bno'),
     totalPoint: total,
     deductedPoint: 0,
     usedPoint: used,
@@ -139,9 +149,8 @@
       searchSchulNm: query.schoolName,
       searchGradeCd: query.grade === null ? '' : String(query.grade),
       searchClsNo: query.classNo === null ? '' : String(query.classNo),
-      searchNo: query.studentNo === null ? '' : String(query.studentNo),
-      // 검색 대상이 아이디일 때만 백엔드가 걸러 준다 — 이름 검색은 아래에서 건다.
-      searchLoginId: query.searchField === 'loginId' ? keyword : '',
+      searchBno: query.studentNo === null ? '' : String(query.studentNo),
+      searchCondition: SEARCH_CONDITION_BY_FIELD[query.searchField],
       searchKeyword: keyword,
       pageIndex: query.page,
       recordCountPerPage: query.pageSize,
Add a comment
List