From 721edddbe0ffd3cb25738e981c979d98b19b8e08 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 11:17:46 +0900 Subject: [PATCH 1/7] docs: enhance README with highlighted warnings and recommendations for Prisma ORM usage - Updated section on Prisma ORM to emphasize caution with red text for potential risks and recommendations. - Ensured clarity on the importance of backing up the schema before executing database commands. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e6a83f7..f5c677e 100644 --- a/README.md +++ b/README.md @@ -155,17 +155,17 @@ const suitableCheckMemo = (value: string): string => { # 주의 -## Prisma ORM 사용 시 주의사항 +## Prisma ORM 사용 시 주의사항 현재 프로젝트는 Prisma ORM을 통해 데이터베이스의 일부 테이블만 관리하고 있습니다. 이로 인해 `prisma db pull` 또는 `prisma db push` 명령어 사용 시 주의가 필요합니다. -### 잠재적 위험성 +### 잠재적 위험성 - `schema.prisma` 파일에 정의된 모델이 의도치 않게 수정될 수 있습니다. - 기존에 정의된 모델의 속성이나 관계가 손상될 수 있습니다. - 데이터베이스 스키마와 Prisma 스키마 간의 불일치가 발생할 수 있습니다. -### 권장 사항 +### 권장 사항 - 데이터베이스 스키마 변경이 필요한 경우, 반드시 팀 내 논의 후 진행하시기 바랍니다. - `prisma db pull` 실행 전 현재 `schema.prisma` 파일의 백업을 권장합니다. From 3088c881224695a9afd551140dfccf9103cd035a Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 11:18:44 +0900 Subject: [PATCH 2/7] docs: remove cautionary notes on database initialization from README - Deleted warnings regarding the execution of database initialization commands to streamline the setup instructions. - Maintained focus on essential setup steps for development environment. --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index f5c677e..43b5109 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,6 @@ npm install # 환경 변수 설정 cp .env.example .env.local -# 데이터베이스 초기화 <- 절대 함부로 실행하지 마시오 -# npx prisma migrate dev -# npx prisma generate ``` ### 개발 서버 실행 From 0bcb0f58e56a28021d8b69305a74163a5256068d Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 15:30:31 +0900 Subject: [PATCH 3/7] docs: add documentation for root layout structure and component hierarchy - Introduced a new markdown file detailing the root layout structure used across the application. - Included a mermaid diagram to illustrate the component hierarchy and data flow. - Documented key components such as providers, layout components, and session management details. - Emphasized server-side session management and performance optimization strategies. --- diagram/layout.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 diagram/layout.md diff --git a/diagram/layout.md b/diagram/layout.md new file mode 100644 index 0000000..f015268 --- /dev/null +++ b/diagram/layout.md @@ -0,0 +1,71 @@ +# 루트 레이아웃 구조 + +이 문서는 애플리케이션의 모든 페이지에서 공통으로 사용되는 루트 레이아웃(`src/app/layout.tsx`)의 구조를 설명합니다. + +## 컴포넌트 계층 구조 + +```mermaid +graph TD + A[RootLayout] --> B[ReactQueryProviders] + B --> C[EdgeProvider] + C --> D[HTML Structure] + + D --> E[Header] + D --> F[Children/Main Content] + D --> G[Footer] + D --> H[Float Button] + D --> I[PopupController] + + J[Session Management] --> |Session Data| C + + subgraph Providers + B + C + end + + subgraph Layout Components + E + F + G + H + I + end + + subgraph Session + J + end +``` + +## 주요 컴포넌트 + +### 프로바이더 + +- **ReactQueryProviders**: React Query 상태 관리를 위한 최상위 프로바이더 +- **EdgeProvider**: 세션 데이터를 관리하고 애플리케이션에 제공 + +### 레이아웃 컴포넌트 + +- **Header**: 공통 헤더 컴포넌트 +- **Children**: 메인 콘텐츠 영역 (페이지별 콘텐츠) +- **Footer**: 공통 푸터 컴포넌트 +- **Float Button**: 플로팅 액션 버튼 +- **PopupController**: 팝업/모달 상태 관리 + +### 세션 관리 + +- `iron-session`을 사용한 서버 사이드 세션 관리 +- 세션 데이터는 EdgeProvider를 통해 전역적으로 접근 가능 + +## 데이터 흐름 + +1. 세션 데이터는 서버 사이드에서 관리됨 +2. 세션 데이터는 EdgeProvider로 전달됨 +3. 모든 레이아웃 컴포넌트는 세션 컨텍스트에 접근 가능 +4. React Query는 데이터 페칭과 캐싱 기능을 제공 + +## 구현 세부사항 + +- 서버 컴포넌트로 구현 +- Next.js App Router 구조 사용 +- 서버 사이드 렌더링 지원 +- 하이드레이션 억제를 통한 성능 최적화 From c2e76fa764a8767da620f3d929542a6ab3e0c089 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 16:21:42 +0900 Subject: [PATCH 4/7] refactor: update SD_SURVEY_SALES_BASIC_INFO model to include CONSTRUCTION_POINT_ID field - Added CONSTRUCTION_POINT_ID to the SD_SURVEY_SALES_BASIC_INFO model for improved data structure. - Maintained existing fields and their types for consistency. --- prisma/schema.prisma | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2c353a4..5892018 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -8,25 +8,26 @@ datasource db { } model SD_SURVEY_SALES_BASIC_INFO { - ID Int @id @default(autoincrement()) - SRL_NO String @db.NVarChar(20) - REPRESENTATIVE String @db.NVarChar(200) - STORE String? @db.NVarChar(200) - CONSTRUCTION_POINT String? @db.NVarChar(200) - INVESTIGATION_DATE String? @db.NVarChar(10) - BUILDING_NAME String? @db.NVarChar(200) - CUSTOMER_NAME String? @db.NVarChar(200) - POST_CODE String? @db.NVarChar(10) - ADDRESS String? @db.NVarChar(200) - ADDRESS_DETAIL String? @db.NVarChar(300) - SUBMISSION_STATUS Boolean @default(false) - SUBMISSION_DATE DateTime? @db.Date - SUBMISSION_TARGET_ID String? @db.NVarChar(200) - REG_DT DateTime @default(now()) - UPT_DT DateTime @updatedAt - REPRESENTATIVE_ID String? @db.NVarChar(100) - STORE_ID String? @db.NVarChar(100) - DETAIL_INFO SD_SURVEY_SALES_DETAIL_INFO? + ID Int @id @default(autoincrement()) + SRL_NO String @db.NVarChar(20) + REPRESENTATIVE String @db.NVarChar(200) + STORE String? @db.NVarChar(200) + CONSTRUCTION_POINT String? @db.NVarChar(200) + CONSTRUCTION_POINT_ID String? @db.NVarChar(200) + INVESTIGATION_DATE String? @db.NVarChar(10) + BUILDING_NAME String? @db.NVarChar(200) + CUSTOMER_NAME String? @db.NVarChar(200) + POST_CODE String? @db.NVarChar(10) + ADDRESS String? @db.NVarChar(200) + ADDRESS_DETAIL String? @db.NVarChar(300) + SUBMISSION_STATUS Boolean @default(false) + SUBMISSION_DATE DateTime? @db.Date + SUBMISSION_TARGET_ID String? @db.NVarChar(200) + REG_DT DateTime @default(now()) + UPT_DT DateTime @updatedAt + REPRESENTATIVE_ID String? @db.NVarChar(100) + STORE_ID String? @db.NVarChar(100) + DETAIL_INFO SD_SURVEY_SALES_DETAIL_INFO? } model SD_SURVEY_SALES_DETAIL_INFO { From 78beaa7b8aeaaf2208d5f1f5183227929c24bd27 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 16:47:16 +0900 Subject: [PATCH 5/7] refactor: add SUBMISSION_TARGET_NM field to SD_SURVEY_SALES_BASIC_INFO model - Introduced SUBMISSION_TARGET_NM to enhance the data structure of the SD_SURVEY_SALES_BASIC_INFO model. - Ensured consistency with existing field types and structure. --- prisma/schema.prisma | 1 + 1 file changed, 1 insertion(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 5892018..45a6939 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -23,6 +23,7 @@ model SD_SURVEY_SALES_BASIC_INFO { SUBMISSION_STATUS Boolean @default(false) SUBMISSION_DATE DateTime? @db.Date SUBMISSION_TARGET_ID String? @db.NVarChar(200) + SUBMISSION_TARGET_NM String? @db.NVarChar(200) REG_DT DateTime @default(now()) UPT_DT DateTime @updatedAt REPRESENTATIVE_ID String? @db.NVarChar(100) From 53966a16e1213fd1185f17a71d91ea83d37464ee Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 17:12:54 +0900 Subject: [PATCH 6/7] refactor: enhance session management by adding builderNm field - Introduced builderNm field to SessionData interface for improved session tracking. - Updated API routes to set builderNm based on user data. - Modified useAxios hook to manage spinner visibility more effectively. - Adjusted ReactQueryProvider to disable retry on queries for better performance. --- README.md | 2 +- src/app/api/auth/route.ts | 2 ++ src/app/api/partner/route.ts | 2 ++ src/hooks/useAxios.ts | 8 +++----- src/providers/ReactQueryProvider.tsx | 1 + src/types/Auth.ts | 1 + 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 43b5109..fda8464 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ session에 있는 role 키로 구분한다 session.role === 'Builder' - teshg44 / 1234 -> 시공사\ session.role === 'Builder' -- partners -> Q.Partners 계정\ +- isogai@yanegiken.co.jp / password -> Q.Partners 계정\ session.role === 'Partner' - 이외의 경우 -> 굳이 체크할 필요 없어보임\ session.role === 'User' diff --git a/src/app/api/auth/route.ts b/src/app/api/auth/route.ts index 8205132..bb64208 100644 --- a/src/app/api/auth/route.ts +++ b/src/app/api/auth/route.ts @@ -57,6 +57,7 @@ export async function POST(request: Request) { session.storeLvl = result.data.data.storeLvl session.custCd = result.data.data.custCd session.builderNo = result.data.data.builderNo + session.builderNm = '' session.isLoggedIn = true if (result.data.data.userId === 'T01') { @@ -104,6 +105,7 @@ export async function POST(request: Request) { STORE_LVL: result.data.data.storeLvl, CUST_CD: result.data.data.custCd, BUILDER_NO: result.data.data.builderNo, + BUILDER_NM: '', IS_LOGGED_IN: true, ROLE: '', } diff --git a/src/app/api/partner/route.ts b/src/app/api/partner/route.ts index 7d02959..dc08352 100644 --- a/src/app/api/partner/route.ts +++ b/src/app/api/partner/route.ts @@ -85,6 +85,7 @@ export async function POST(request: Request) { session.storeLvl = null session.custCd = null session.builderNo = data[0].user_seko_id + session.builderNm = data[0].supplier_name session.isLoggedIn = true session.role = 'Partner' @@ -123,6 +124,7 @@ export async function POST(request: Request) { STORE_LVL: null, CUST_CD: null, BUILDER_NO: data[0].user_seko_id, + BUILDER_NM: data[0].supplier_name, IS_LOGGED_IN: true, ROLE: 'Partner', } diff --git a/src/hooks/useAxios.ts b/src/hooks/useAxios.ts index 3fc9e4e..21cacfd 100644 --- a/src/hooks/useAxios.ts +++ b/src/hooks/useAxios.ts @@ -3,21 +3,19 @@ import Config from '@/config/config.export' import { useSpinnerStore } from '@/store/spinnerStore' export function useAxios() { - // const { setIsShow } = useSpinnerStore() - const requestHandler = (config: InternalAxiosRequestConfig) => { - // setIsShow(true) + useSpinnerStore.getState().setIsShow(true) return config } const responseHandler = (response: AxiosResponse) => { - // setIsShow(false) + useSpinnerStore.getState().setIsShow(false) response.data = transferResponse(response) return response } const errorHandler = (error: any) => { - // setIsShow(false) + useSpinnerStore.getState().setIsShow(false) return Promise.reject(error) } diff --git a/src/providers/ReactQueryProvider.tsx b/src/providers/ReactQueryProvider.tsx index b324b12..5e9700f 100644 --- a/src/providers/ReactQueryProvider.tsx +++ b/src/providers/ReactQueryProvider.tsx @@ -11,6 +11,7 @@ export default function ReactQueryProviders({ children }: React.PropsWithChildre defaultOptions: { queries: { staleTime: 60 * 1000, + retry: false, }, }, }), diff --git a/src/types/Auth.ts b/src/types/Auth.ts index 61a3880..ce26cf6 100644 --- a/src/types/Auth.ts +++ b/src/types/Auth.ts @@ -27,6 +27,7 @@ export interface SessionData { storeLvl: null custCd: null builderNo: null + builderNm: null | string isLoggedIn: boolean role: string | null } From fe96acebecdfa4951aed5e2c37607f3bdb16ec27 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 17:42:11 +0900 Subject: [PATCH 7/7] refactor: add builderNm field to session management - Added builderNm field to both SessionData interface and initial state for enhanced session tracking. - Ensured consistency across session management structures. --- src/libs/session.ts | 1 + src/store/session.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/libs/session.ts b/src/libs/session.ts index 5036e4e..a11eaf1 100644 --- a/src/libs/session.ts +++ b/src/libs/session.ts @@ -45,6 +45,7 @@ export const defaultSession: SessionData = { storeLvl: null, custCd: null, builderNo: null, + builderNm: null, isLoggedIn: false, role: null, } diff --git a/src/store/session.ts b/src/store/session.ts index f96926a..0ad5b81 100644 --- a/src/store/session.ts +++ b/src/store/session.ts @@ -41,6 +41,7 @@ const initialState: InitialState = { storeLvl: null, custCd: null, builderNo: null, + builderNm: null, isLoggedIn: false, role: null, },