feat: 게시판 구분을 화면에서 감춘다
백엔드에 담을 자리가 없다 — 등록·수정 요청 VO에 필드가 없고 응답의 bbsCd는 구분이 아니라 유형이다. 그래서 골라도 저장되지 않고 조회하면 늘 비어 있었으며, 검색에 쓰면 값이 항상 null이라 목록이 통째로 비었다. 등록 팝업의 칸·목록의 열·검색 대상·필터를 모두 `IS_BOARD_CATEGORY_ENABLED` 하나에 걸어 뒀다. 백엔드에 필드가 생기면 그 한 줄만 true로 바꾸면 된다. Co-Authored-By: Claude Opus 5
@03d55353af5e19378a1c0bdcf7be4172f8084591
--- app/(protected)/(basic)/boards/_components/board-post-columns.tsx
+++ app/(protected)/(basic)/boards/_components/board-post-columns.tsx
... | ... | @@ -9,6 +9,7 @@ |
| 9 | 9 |
import {
|
| 10 | 10 |
EMPTY_FIELD_PLACEHOLDER, |
| 11 | 11 |
formatAnswerStatusLabel, |
| 12 |
+ IS_BOARD_CATEGORY_ENABLED, |
|
| 12 | 13 |
formatBoardCategoryLabel, |
| 13 | 14 |
formatFaqTypeLabel, |
| 14 | 15 |
formatContentExcerpt, |
... | ... | @@ -30,7 +31,7 @@ |
| 30 | 31 |
}; |
| 31 | 32 |
} |
| 32 | 33 |
|
| 33 |
-// 이슈: 구분 값은 백엔드에 아직 없다(협의 중). 자리는 시안대로 두고 값이 생기면 배지로 돌아간다. |
|
| 34 |
+// 백엔드에 구분 자리가 생기면 `IS_BOARD_CATEGORY_ENABLED`가 이 열을 다시 켠다. |
|
| 34 | 35 |
function categoryColumn(): FoxListColumn<BoardPost> {
|
| 35 | 36 |
return {
|
| 36 | 37 |
key: 'category', |
... | ... | @@ -80,7 +81,7 @@ |
| 80 | 81 |
function noticeColumns(page: number, pageSize: number): FoxListColumn<BoardPost>[] {
|
| 81 | 82 |
return [ |
| 82 | 83 |
numberColumn(page, pageSize), |
| 83 |
- categoryColumn(), |
|
| 84 |
+ ...(IS_BOARD_CATEGORY_ENABLED ? [categoryColumn()] : []), |
|
| 84 | 85 |
{ key: 'title', header: '제목', width: 320, emphasis: true },
|
| 85 | 86 |
{
|
| 86 | 87 |
key: 'attachment', |
... | ... | @@ -125,7 +126,7 @@ |
| 125 | 126 |
|
| 126 | 127 |
return [ |
| 127 | 128 |
numberColumn(page, pageSize), |
| 128 |
- categoryColumn(), |
|
| 129 |
+ ...(IS_BOARD_CATEGORY_ENABLED ? [categoryColumn()] : []), |
|
| 129 | 130 |
{
|
| 130 | 131 |
key: 'type', |
| 131 | 132 |
header: '유형', |
--- app/(protected)/(basic)/boards/_components/board-post-form-modal.tsx
+++ app/(protected)/(basic)/boards/_components/board-post-form-modal.tsx
... | ... | @@ -15,6 +15,7 @@ |
| 15 | 15 |
import type { CommonCode } from '@/lib/domain/common-code';
|
| 16 | 16 |
import {
|
| 17 | 17 |
BOARD_CATEGORY_OPTIONS, |
| 18 |
+ IS_BOARD_CATEGORY_ENABLED, |
|
| 18 | 19 |
INQUIRY_TYPE_OPTIONS, |
| 19 | 20 |
type BoardPost, |
| 20 | 21 |
type BoardType, |
... | ... | @@ -116,21 +117,23 @@ |
| 116 | 117 |
<input type="hidden" name="boardType" value={boardType} />
|
| 117 | 118 |
{!isCreate && post && <input type="hidden" name="id" value={post.id} />}
|
| 118 | 119 |
|
| 119 |
- <div className={styles.field}>
|
|
| 120 |
- <FoxSelect |
|
| 121 |
- size="md" |
|
| 122 |
- label="구분" |
|
| 123 |
- options={BOARD_CATEGORY_OPTIONS.map((option) => ({
|
|
| 124 |
- value: option.value, |
|
| 125 |
- label: option.label, |
|
| 126 |
- }))} |
|
| 127 |
- value={categoryCode}
|
|
| 128 |
- onValueChange={setCategoryCode}
|
|
| 129 |
- error={Boolean(errors.categoryCode)}
|
|
| 130 |
- hint={errors.categoryCode}
|
|
| 131 |
- /> |
|
| 132 |
- <input type="hidden" name="categoryCode" value={categoryCode} />
|
|
| 133 |
- </div> |
|
| 120 |
+ {IS_BOARD_CATEGORY_ENABLED && (
|
|
| 121 |
+ <div className={styles.field}>
|
|
| 122 |
+ <FoxSelect |
|
| 123 |
+ size="md" |
|
| 124 |
+ label="구분" |
|
| 125 |
+ options={BOARD_CATEGORY_OPTIONS.map((option) => ({
|
|
| 126 |
+ value: option.value, |
|
| 127 |
+ label: option.label, |
|
| 128 |
+ }))} |
|
| 129 |
+ value={categoryCode}
|
|
| 130 |
+ onValueChange={setCategoryCode}
|
|
| 131 |
+ error={Boolean(errors.categoryCode)}
|
|
| 132 |
+ hint={errors.categoryCode}
|
|
| 133 |
+ /> |
|
| 134 |
+ <input type="hidden" name="categoryCode" value={categoryCode} />
|
|
| 135 |
+ </div> |
|
| 136 |
+ )} |
|
| 134 | 137 |
|
| 135 | 138 |
{typeOptions && typeOptions.length > 0 && (
|
| 136 | 139 |
<div className={styles.field}>
|
--- lib/domain/board-post-query.ts
+++ lib/domain/board-post-query.ts
... | ... | @@ -12,6 +12,7 @@ |
| 12 | 12 |
|
| 13 | 13 |
import {
|
| 14 | 14 |
BOARD_CATEGORY_OPTIONS, |
| 15 |
+ IS_BOARD_CATEGORY_ENABLED, |
|
| 15 | 16 |
INQUIRY_TYPE_OPTIONS, |
| 16 | 17 |
type BoardType, |
| 17 | 18 |
} from '@/lib/domain/board-post'; |
... | ... | @@ -36,7 +37,9 @@ |
| 36 | 37 |
*/ |
| 37 | 38 |
export const BOARD_SEARCH_FIELDS: Record<BoardType, readonly BoardSearchFieldOption[]> = {
|
| 38 | 39 |
notice: [ |
| 39 |
- { value: 'category', label: '구분' },
|
|
| 40 |
+ ...(IS_BOARD_CATEGORY_ENABLED |
|
| 41 |
+ ? ([{ value: 'category', label: '구분' }] as BoardSearchFieldOption[])
|
|
| 42 |
+ : []), |
|
| 40 | 43 |
{ value: 'title', label: '제목' },
|
| 41 | 44 |
], |
| 42 | 45 |
// 1:1문의는 제목 없이 내용만 쓴다 — 제목 검색은 대상이 없다. |
... | ... | @@ -57,9 +60,9 @@ |
| 57 | 60 |
BoardType, |
| 58 | 61 |
{ category: boolean; type: boolean; visibility: boolean; answered: boolean }
|
| 59 | 62 |
> = {
|
| 60 |
- notice: { category: true, type: false, visibility: true, answered: false },
|
|
| 61 |
- inquiry: { category: true, type: true, visibility: false, answered: true },
|
|
| 62 |
- faq: { category: true, type: true, visibility: false, answered: false },
|
|
| 63 |
+ notice: { category: IS_BOARD_CATEGORY_ENABLED, type: false, visibility: true, answered: false },
|
|
| 64 |
+ inquiry: { category: IS_BOARD_CATEGORY_ENABLED, type: true, visibility: false, answered: true },
|
|
| 65 |
+ faq: { category: IS_BOARD_CATEGORY_ENABLED, type: true, visibility: false, answered: false },
|
|
| 63 | 66 |
}; |
| 64 | 67 |
|
| 65 | 68 |
/** |
--- lib/domain/board-post.ts
+++ lib/domain/board-post.ts
... | ... | @@ -89,6 +89,16 @@ |
| 89 | 89 |
* 시안의 공지사항 구분은 "공통 / 메뉴명1, 메뉴명2…"이고 FAQ는 "공통 / FOX PAY"다. 확정되지 않은 |
| 90 | 90 |
* "메뉴명N"은 임의로 지어내지 않고 두 화면이 공통으로 쓰는 값만 둔다. |
| 91 | 91 |
*/ |
| 92 |
+/** |
|
| 93 |
+ * 「구분」을 화면에 낼지. **지금은 백엔드에 담을 자리가 없다** — 등록·수정 요청 VO에 필드가 |
|
| 94 |
+ * 없고, 응답의 코드 필드(`bbsCd`)는 구분이 아니라 「유형」이다. 그래서 골라도 저장되지 않고 |
|
| 95 |
+ * 조회하면 항상 비어 있으며, 검색에 쓰면 목록이 통째로 빈다. |
|
| 96 |
+ * |
|
| 97 |
+ * 백엔드에 필드가 생기면 **이 한 줄만 `true`로 바꾸면** 등록 팝업의 칸·목록의 열·검색 대상이 |
|
| 98 |
+ * 함께 돌아온다. |
|
| 99 |
+ */ |
|
| 100 |
+export const IS_BOARD_CATEGORY_ENABLED = false; |
|
| 101 |
+ |
|
| 92 | 102 |
export const BOARD_CATEGORY_OPTIONS: readonly CodeOption[] = [ |
| 93 | 103 |
{ value: 'COMMON', label: '공통' },
|
| 94 | 104 |
{ value: 'FOXPAY', label: 'FOX PAY' },
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?