fix(테이블타입): constraints API PgArray 디코딩 + primary_key key 매칭 #15

Merged
johngreen merged 1 commits from johngreen into main 2026-05-13 23:33:18 +00:00
Contributor

요약

테이블 타입 관리 페이지에서 PK/IDX 토글 후 UI 상태가 갱신되지 않던 버그 수정.

원인

  1. Backend TableManagementService.parseColumnArray — PostgreSQL ARRAY_AGGjava.sql.Array (PgArray) 객체로 오는데 List / String 만 처리해서 항상 List.of() 반환. 즉 constraints API 의 columns 가 항상 빈 배열.
  2. Frontend loadConstraints — 백엔드는 result.put("primary_key", ...) snake_case 인데 프론트가 data.primaryKey camelCase 로 읽어 항상 undefined.

결과: PR #14 로 IDX API 호출은 200 으로 성공하지만 UI 토글 상태가 켜지지 않아 사용자가 "동작 안한다" 라고 인식.

변경

  • TableManagementService.parseColumnArray: java.sql.Array 분기 추가 → arr.getArray()Object[] 꺼내 List<String> 변환
  • tableMngList/page.tsx::loadConstraints: data.primary_key 로 통일

Test plan

  • solution.invyone.com customer_mng / email IDX 클릭 → 토글 상태가 emerald 색으로 표시
  • 다시 클릭 → "인덱스가 삭제되었습니다" + 회색으로 복구
  • 기존 PK 가 있는 컬럼은 페이지 열자마자 PK 뱃지 파란색으로 표시
## 요약 테이블 타입 관리 페이지에서 PK/IDX 토글 후 UI 상태가 갱신되지 않던 버그 수정. ## 원인 1. **Backend** `TableManagementService.parseColumnArray` — PostgreSQL `ARRAY_AGG` 가 `java.sql.Array` (PgArray) 객체로 오는데 `List` / `String` 만 처리해서 항상 `List.of()` 반환. 즉 constraints API 의 `columns` 가 항상 빈 배열. 2. **Frontend** `loadConstraints` — 백엔드는 `result.put("primary_key", ...)` snake_case 인데 프론트가 `data.primaryKey` camelCase 로 읽어 항상 undefined. 결과: PR #14 로 IDX API 호출은 200 으로 성공하지만 UI 토글 상태가 켜지지 않아 사용자가 "동작 안한다" 라고 인식. ## 변경 - `TableManagementService.parseColumnArray`: `java.sql.Array` 분기 추가 → `arr.getArray()` 로 `Object[]` 꺼내 `List<String>` 변환 - `tableMngList/page.tsx::loadConstraints`: `data.primary_key` 로 통일 ## Test plan - [ ] solution.invyone.com customer_mng / email IDX 클릭 → 토글 상태가 emerald 색으로 표시 - [ ] 다시 클릭 → "인덱스가 삭제되었습니다" + 회색으로 복구 - [ ] 기존 PK 가 있는 컬럼은 페이지 열자마자 PK 뱃지 파란색으로 표시
johngreen added 1 commit 2026-05-13 23:33:16 +00:00
테이블 타입 관리 페이지에서 PK/IDX 토글 후 UI 상태가 갱신되지 않던 버그.

1. Backend: TableManagementService.parseColumnArray
   - PostgreSQL ARRAY_AGG 가 java.sql.Array (PgArray) 로 오는데
     List/String 만 처리해서 항상 List.of() 반환 → columns 빈 배열
   - 조치: java.sql.Array 분기 추가, arr.getArray() → Object[] → List<String>

2. Frontend: loadConstraints
   - 백엔드는 result.put("primary_key", ...) 로 snake_case 반환
   - 프론트가 data.primaryKey 로 camelCase 로 읽어 undefined → 항상 빈 PK
   - 조치: data.primary_key 로 통일

이전 PR (#14) 의 IDX payload 수정과 합쳐, PK/IDX 토글이 API 호출/DB 적용/
UI 반영까지 한 사이클로 동작.

검증:
- gradle compileJava BUILD SUCCESSFUL
- solution.invyone.com 에서 IDX 토글 양방향 확인 예정

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
johngreen merged commit 35d5a00b20 into main 2026-05-13 23:33:18 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gbpark/invyone#15