From e35cc50660c05f9565d95b7109ec7ca18a059860 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Fri, 30 May 2025 10:09:20 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20db=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EC=9D=BC=EB=B6=80=20=EB=B3=80=EA=B2=BD=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20prisma=20=EA=B0=9D=EC=B2=B4=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 170 +++++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 103 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index f8424f6..da1d7e9 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -7,103 +7,65 @@ datasource db { url = env("DATABASE_URL") } -model MS_SUITABLE { - id Int @id @default(autoincrement()) - product_name String @db.VarChar(200) - manufacturer String? @db.VarChar(200) - roof_material String? @db.VarChar(100) - shape String? @db.VarChar(200) - support_roof_tile String? @db.VarChar(2) - support_roof_tile_memo String? @db.VarChar(500) - support_roof_bracket String? @db.VarChar(200) - support_roof_bracket_memo String? @db.VarChar(500) - yg_anchor String? @db.VarChar(200) - yg_anchor_memo String? @db.VarChar(500) - rg_roof_tile_part String? @db.VarChar(200) - rg_roof_tile_part_memo String? @db.VarChar(500) - dido_hunt_support_tile_2 String? @db.VarChar(200) - dido_hunt_support_tile_2_memo String? @db.VarChar(500) - takashima_power_base String? @db.VarChar(200) - takashima_power_base_memo String? @db.VarChar(500) - takashima_tile_bracket String? @db.VarChar(200) - takashima_tile_bracket_memo String? @db.VarChar(500) - slate_bracket_4 String? @db.VarChar(200) - slate_bracket_4_memo String? @db.VarChar(500) - slate_single_metal_bracket String? @db.VarChar(200) - slate_single_metal_bracket_memo String? @db.VarChar(500) - dido_hunt_short_rack_4 String? @db.VarChar(200) - dido_hunt_short_rack_4_memo String? @db.VarChar(500) - takashima_slate_bracket_slate_single String? @db.VarChar(200) - takashima_slate_bracket_slate_single_memo String? @db.VarChar(500) - df_metal_bracket String? @db.VarChar(200) - df_metal_bracket_memo String? @db.VarChar(500) - slate_metal_bracket String? @db.VarChar(200) - slate_metal_bracket_memo String? @db.VarChar(500) - takashima_slate_bracket_metal_roof String? @db.VarChar(200) - takashima_slate_bracket_metal_roof_memo String? @db.VarChar(500) - created_at DateTime @default(now()) - updated_at DateTime @updatedAt -} - model SD_SURVEY_SALES_BASIC_INFO { ID Int @id @default(autoincrement()) - SRL_NO String @db.VarChar(20) - REPRESENTATIVE String @db.VarChar(200) - STORE String? @db.VarChar(200) - CONSTRUCTION_POINT String? @db.VarChar(200) - INVESTIGATION_DATE String? @db.VarChar(10) - BUILDING_NAME String? @db.VarChar(200) - CUSTOMER_NAME String? @db.VarChar(200) - POST_CODE String? @db.VarChar(10) - ADDRESS String? @db.VarChar(200) - ADDRESS_DETAIL String? @db.VarChar(300) + 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.VarChar(200) + SUBMISSION_TARGET_ID String? @db.NVarChar(200) REG_DT DateTime @default(now()) UPT_DT DateTime @updatedAt - REPRESENTATIVE_ID String? @db.VarChar(100) - STORE_ID String? @db.VarChar(100) + 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 { ID Int @id @default(autoincrement()) - CONTRACT_CAPACITY String? @db.VarChar(20) - RETAIL_COMPANY String? @db.VarChar(100) - SUPPLEMENTARY_FACILITIES String? @db.VarChar(20) - SUPPLEMENTARY_FACILITIES_ETC String? @db.VarChar(200) - INSTALLATION_SYSTEM String? @db.VarChar(20) - INSTALLATION_SYSTEM_ETC String? @db.VarChar(200) - CONSTRUCTION_YEAR String? @db.VarChar(200) - CONSTRUCTION_YEAR_ETC String? @db.VarChar(200) - ROOF_MATERIAL String? @db.VarChar(20) - ROOF_MATERIAL_ETC String? @db.VarChar(200) - ROOF_SHAPE String? @db.VarChar(20) - ROOF_SHAPE_ETC String? @db.VarChar(200) - ROOF_SLOPE String? @db.VarChar(5) - HOUSE_STRUCTURE String? @db.VarChar(20) - HOUSE_STRUCTURE_ETC String? @db.VarChar(200) - RAFTER_MATERIAL String? @db.VarChar(20) - RAFTER_MATERIAL_ETC String? @db.VarChar(200) - RAFTER_SIZE String? @db.VarChar(20) - RAFTER_SIZE_ETC String? @db.VarChar(200) - RAFTER_PITCH String? @db.VarChar(20) - RAFTER_PITCH_ETC String? @db.VarChar(200) - RAFTER_DIRECTION String? @db.VarChar(20) - OPEN_FIELD_PLATE_KIND String? @db.VarChar(20) - OPEN_FIELD_PLATE_KIND_ETC String? @db.VarChar(200) - OPEN_FIELD_PLATE_THICKNESS String? @db.VarChar(5) + CONTRACT_CAPACITY String? @db.NVarChar(20) + RETAIL_COMPANY String? @db.NVarChar(100) + SUPPLEMENTARY_FACILITIES String? @db.NVarChar(20) + SUPPLEMENTARY_FACILITIES_ETC String? @db.NVarChar(200) + INSTALLATION_SYSTEM String? @db.NVarChar(20) + INSTALLATION_SYSTEM_ETC String? @db.NVarChar(200) + CONSTRUCTION_YEAR String? @db.NVarChar(200) + CONSTRUCTION_YEAR_ETC String? @db.NVarChar(200) + ROOF_MATERIAL String? @db.NVarChar(20) + ROOF_MATERIAL_ETC String? @db.NVarChar(200) + ROOF_SHAPE String? @db.NVarChar(20) + ROOF_SHAPE_ETC String? @db.NVarChar(200) + ROOF_SLOPE String? @db.NVarChar(5) + HOUSE_STRUCTURE String? @db.NVarChar(20) + HOUSE_STRUCTURE_ETC String? @db.NVarChar(200) + RAFTER_MATERIAL String? @db.NVarChar(20) + RAFTER_MATERIAL_ETC String? @db.NVarChar(200) + RAFTER_SIZE String? @db.NVarChar(20) + RAFTER_SIZE_ETC String? @db.NVarChar(200) + RAFTER_PITCH String? @db.NVarChar(20) + RAFTER_PITCH_ETC String? @db.NVarChar(200) + RAFTER_DIRECTION String? @db.NVarChar(20) + OPEN_FIELD_PLATE_KIND String? @db.NVarChar(20) + OPEN_FIELD_PLATE_KIND_ETC String? @db.NVarChar(200) + OPEN_FIELD_PLATE_THICKNESS String? @db.NVarChar(5) LEAK_TRACE Boolean? @default(false) - WATERPROOF_MATERIAL String? @db.VarChar(20) - WATERPROOF_MATERIAL_ETC String? @db.VarChar(200) - INSULATION_PRESENCE String? @db.VarChar(20) - INSULATION_PRESENCE_ETC String? @db.VarChar(200) - STRUCTURE_ORDER String? @db.VarChar(20) - STRUCTURE_ORDER_ETC String? @db.VarChar(200) - INSTALLATION_AVAILABILITY String? @db.VarChar(20) - INSTALLATION_AVAILABILITY_ETC String? @db.VarChar(200) - MEMO String? @db.VarChar(500) + WATERPROOF_MATERIAL String? @db.NVarChar(20) + WATERPROOF_MATERIAL_ETC String? @db.NVarChar(200) + INSULATION_PRESENCE String? @db.NVarChar(20) + INSULATION_PRESENCE_ETC String? @db.NVarChar(200) + STRUCTURE_ORDER String? @db.NVarChar(20) + STRUCTURE_ORDER_ETC String? @db.NVarChar(200) + INSTALLATION_AVAILABILITY String? @db.NVarChar(20) + INSTALLATION_AVAILABILITY_ETC String? @db.NVarChar(200) + MEMO String? @db.NVarChar(500) REG_DT DateTime @default(now()) UPT_DT DateTime @updatedAt BASIC_INFO_ID Int @unique @@ -171,20 +133,20 @@ model BC_COMM_L { } model MS_SUITABLE_ROOF_MATERIAL_GROUP { - ID Int @id @default(autoincrement()) - ROOF_MATERIAL_GROUP String @db.VarChar(200) - ROOF_MT_CD String @db.VarChar(200) - REG_DT DateTime @default(now(), map: "DF__MS_SUITAB__creat__4F7CD00D") - UPT_DT DateTime? + ID Int @id @default(autoincrement()) + ROOF_MATL_GRP_CD String @db.NVarChar(200) + ROOF_MT_CD String @db.NVarChar(200) + REG_DT DateTime @default(now(), map: "DF__MS_SUITAB__creat__4F7CD00D") + UPT_DT DateTime? } model MS_SUITABLE_DETAIL { ID Int @id @default(autoincrement()) MAIN_ID Int - TRESTLE_MFPC_CD String? @db.VarChar(200) - TRESTLE_MANUFACTURER_PRODUCT_NAME String? @db.VarChar(200) - MEMO String? @db.VarChar(500) - REG_DT DateTime @default(now(), map: "DF__MS_SUITAB__creat__571DF1D5") + TRESTLE_MFPC_CD String? @db.NVarChar(200) + TRESTLE_MANUFACTURER_PRODUCT_NAME String? @db.NVarChar(200) + MEMO String? @db.NVarChar(500) + REG_DT DateTime @default(now(), map: "DF__MS_SUITAB__REG_D__1332DBDC") UPT_DT DateTime? MS_SUITABLE_MAIN MS_SUITABLE_MAIN @relation(fields: [MAIN_ID], references: [ID], onUpdate: NoAction, map: "MS_SUITABLE_DETAIL_MS_SUITABLE_MAIN_FK") @@ -193,12 +155,14 @@ model MS_SUITABLE_DETAIL { model MS_SUITABLE_MAIN { ID Int @id @default(autoincrement()) - PRODUCT_NAME String @db.VarChar(200) - MANU_FT_CD String? @db.VarChar(200) - ROOF_MT_CD String? @db.VarChar(100) - ROOF_SH_CD String? @db.VarChar(200) - REG_DT DateTime @default(now(), map: "DF__MS_SUITAB__creat__5441852A") + PRODUCT_NAME String @db.NVarChar(200) + MANU_FT_CD String? @db.NVarChar(200) + ROOF_MT_CD String? @db.NVarChar(100) + ROOF_SH_CD String? @db.NVarChar(200) + REG_DT DateTime @default(now(), map: "DF__MS_SUITAB__REG_D__10566F31") UPT_DT DateTime? + UPT_ID String? @db.NVarChar(50) + DEL_YN String? @db.NVarChar(1) MS_SUITABLE_DETAIL MS_SUITABLE_DETAIL[] @@index([PRODUCT_NAME], map: "MS_SUITABLE_MAIN_PRODUCT_NAME_IDX") @@ -208,9 +172,9 @@ model MS_SUITABLE_MAIN { /// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. model MS_USR_TRK { ID Int @id @default(autoincrement()) - OWNER String @db.VarChar(100) - TYPE String @db.VarChar(50) - URL String? @db.VarChar(200) + OWNER String @db.NVarChar(100) + TYPE String @db.NVarChar(50) + URL String? @db.NVarChar(200) REG_DT DateTime @default(now()) - DATA String? @db.VarChar(200) + DATA String? @db.NVarChar(200) } From 510f886220c57defe3c2969cbc9f472c9ce52d83 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 10:31:08 +0900 Subject: [PATCH 2/4] docs: update README with project overview, setup instructions, and Prisma ORM usage guidelines - Added comprehensive project overview and technology stack. - Included setup instructions for development and production environments. - Documented project structure and best practices for using Prisma ORM, highlighting potential risks and recommendations. --- README.md | 108 +++++++++++++++++++++++++++++++++++++++---- prisma/schema.prisma | 1 - 2 files changed, 98 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index c6869cd..e6a83f7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,74 @@ -# prisma 연결 +# 모바일 현장 조사 애플리케이션 (onsitesurvey) + +## 개요 + +Next.js와 TypeScript로 구축된 현장 조사용 모바일 애플리케이션입니다. + +## 기술 스택 + +- **프레임워크**: Next.js (App Router) +- **언어**: TypeScript +- **UI 컴포넌트**: Shadcn UI, Radix UI +- **스타일링**: Tailwind CSS +- **상태 관리**: React Query +- **데이터베이스**: Prisma ORM +- **인증**: 세션 기반 인증 + +## 시작하기 + +### 필수 요구사항 + +- Node.js (LTS 버전) +- npm 또는 yarn 또는 pnpm 또는 burn +- Prisma CLI + +### 설치 방법 + +```bash +# 의존성 설치 +npm install + +# 환경 변수 설정 +cp .env.example .env.local + +# 데이터베이스 초기화 <- 절대 함부로 실행하지 마시오 +# npx prisma migrate dev +# npx prisma generate +``` + +### 개발 서버 실행 + +```bash +# 개발 서버 실행 +npm run dev +``` + +### 프로덕션 빌드 + +```bash +# 애플리케이션 빌드 +npm run build + +# 프로덕션 서버 실행 +npm start +``` + +## 프로젝트 구조 + +[프로젝트 구조 Diagram](./diagram/mermaid.md) + +``` +├── app/ # Next.js 앱 디렉토리 +├── components/ # React 컴포넌트 +├── hooks/ # 커스텀 React 훅 +├── lib/ # 유틸리티 함수 및 설정 +├── prisma/ # 데이터베이스 스키마 및 마이그레이션 +└── public/ # 정적 자산 +``` + +## 참고 + +### prisma 연결 ``` npx prisma migrate dev @@ -11,38 +81,38 @@ npx prisma db push generate 를 진행해야 로컬에 연결 파일들이 생성이되고 pull push 를 사용할 수 있게 됨. -# react query cache data 가져오기 +### react query cache data 가져오기 ``` const cache = useQueryClient() const data = cache.getQueryData(['user', 'info']) as UserState ``` -# 팝업 컨트롤러 제어 +### 팝업 컨트롤러 제어 -### open +[open] -``` +```javascript const popupController = usePopupController() onClick={() => popupController.setMemberInformationPopup(true)} onClick={() => popupController.setZipCodePopup(true)} ``` -### close +[close] -``` +```javascript const popupController = usePopupController() onClick={() => popupController.setMemberInformationPopup(false)} onClick={() => popupController.setZipCodePopup(false)} ``` -# useEffect 정리 +### useEffect 정리 - client url pathname 변경시 -> @/components/ui/Header.tsx -# User Role 구분 +### User Role 구분 session에 있는 role 키로 구분한다 @@ -61,7 +131,7 @@ session에 있는 role 키로 구분한다 - 이외의 경우 -> 굳이 체크할 필요 없어보임\ session.role === 'User' -# 지붕재 적합성 TODO +### 지붕재 적합성 TODO ``` const suitableCheckIcon = (value: string): string => { @@ -82,3 +152,21 @@ const suitableCheckMemo = (value: string): string => { - src/hooks/useSuitable.ts > suitableCheckIcon(), suitableCheckMemo() - 추후 지붕재 적합성 데이터 CUD 구현 시 ×, ー 데이터 관리 필요 + +# 주의 + +## Prisma ORM 사용 시 주의사항 + +현재 프로젝트는 Prisma ORM을 통해 데이터베이스의 일부 테이블만 관리하고 있습니다. 이로 인해 `prisma db pull` 또는 `prisma db push` 명령어 사용 시 주의가 필요합니다. + +### 잠재적 위험성 + +- `schema.prisma` 파일에 정의된 모델이 의도치 않게 수정될 수 있습니다. +- 기존에 정의된 모델의 속성이나 관계가 손상될 수 있습니다. +- 데이터베이스 스키마와 Prisma 스키마 간의 불일치가 발생할 수 있습니다. + +### 권장 사항 + +- 데이터베이스 스키마 변경이 필요한 경우, 반드시 팀 내 논의 후 진행하시기 바랍니다. +- `prisma db pull` 실행 전 현재 `schema.prisma` 파일의 백업을 권장합니다. +- 변경 사항 적용 전 staging 환경에서 충분한 테스트를 진행하시기 바랍니다. diff --git a/prisma/schema.prisma b/prisma/schema.prisma index da1d7e9..2c353a4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -169,7 +169,6 @@ model MS_SUITABLE_MAIN { @@index([ROOF_MT_CD, PRODUCT_NAME], map: "MS_SUITABLE_MAIN_ROOF_MT_CD_IDX") } -/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. model MS_USR_TRK { ID Int @id @default(autoincrement()) OWNER String @db.NVarChar(100) From 721edddbe0ffd3cb25738e981c979d98b19b8e08 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Fri, 30 May 2025 11:17:46 +0900 Subject: [PATCH 3/4] 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 4/4] 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 ``` ### 개발 서버 실행