Merge branch 'dev' of https://git.hanasys.jp/qcast3/onsitesurvey into feature/survey
This commit is contained in:
commit
68a0c15c61
105
README.md
105
README.md
@ -1,4 +1,71 @@
|
||||
# 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
|
||||
|
||||
```
|
||||
|
||||
### 개발 서버 실행
|
||||
|
||||
```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 +78,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 +128,7 @@ session에 있는 role 키로 구분한다
|
||||
- 이외의 경우 -> 굳이 체크할 필요 없어보임\
|
||||
session.role === 'User'
|
||||
|
||||
# 지붕재 적합성 TODO
|
||||
### 지붕재 적합성 TODO
|
||||
|
||||
```
|
||||
const suitableCheckIcon = (value: string): string => {
|
||||
@ -82,3 +149,21 @@ const suitableCheckMemo = (value: string): string => {
|
||||
|
||||
- src/hooks/useSuitable.ts > suitableCheckIcon(), suitableCheckMemo()
|
||||
- 추후 지붕재 적합성 데이터 CUD 구현 시 ×, ー 데이터 관리 필요
|
||||
|
||||
# 주의
|
||||
|
||||
## <span style="color: red">Prisma ORM 사용 시 주의사항</span>
|
||||
|
||||
현재 프로젝트는 Prisma ORM을 통해 데이터베이스의 일부 테이블만 관리하고 있습니다. 이로 인해 `prisma db pull` 또는 `prisma db push` 명령어 사용 시 주의가 필요합니다.
|
||||
|
||||
### <span style="color: red">잠재적 위험성</span>
|
||||
|
||||
- `schema.prisma` 파일에 정의된 모델이 의도치 않게 수정될 수 있습니다.
|
||||
- 기존에 정의된 모델의 속성이나 관계가 손상될 수 있습니다.
|
||||
- 데이터베이스 스키마와 Prisma 스키마 간의 불일치가 발생할 수 있습니다.
|
||||
|
||||
### <span style="color: red">권장 사항</span>
|
||||
|
||||
- 데이터베이스 스키마 변경이 필요한 경우, 반드시 팀 내 논의 후 진행하시기 바랍니다.
|
||||
- `prisma db pull` 실행 전 현재 `schema.prisma` 파일의 백업을 권장합니다.
|
||||
- 변경 사항 적용 전 staging 환경에서 충분한 테스트를 진행하시기 바랍니다.
|
||||
|
||||
@ -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,24 +155,25 @@ 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")
|
||||
@@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.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)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user