diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 3a511a3..4efd2aa 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -79,13 +79,13 @@ model SD_SERVEY_SALES_DETAIL_INFO { id Int @id @default(autoincrement()) contract_capacity String? @db.VarChar(20) retail_company String? @db.VarChar(100) - supplementary_facilities Int? + supplementary_facilities String? @db.VarChar(20) supplementary_facilities_etc String? @db.VarChar(200) installation_system Int? installation_system_etc String? @db.VarChar(200) construction_year Int? construction_year_etc String? @db.VarChar(200) - roof_material Int? + roof_material String? @db.VarChar(20) roof_material_etc String? @db.VarChar(200) roof_shape Int? roof_shape_etc String? @db.VarChar(200) @@ -177,3 +177,33 @@ model BC_COMM_L { @@id([HEAD_CD, CODE], map: "PK_BC_COMM_L") } + +model MS_SUITABLE_ROOF_MATERIAL_GROUP { + id Int @id @default(autoincrement()) + roof_material_group String @db.VarChar(200) + roof_material String @db.VarChar(200) + created_at DateTime @default(now(), map: "DF__MS_SUITAB__creat__4F7CD00D") + updated_at DateTime +} + +model MS_SUITABLE_DETAIL { + id Int @id @default(autoincrement()) + main_id Int + trestle_manufacturer_product_code String? @db.VarChar(200) + trestle_manufacturer_product_name String? @db.VarChar(200) + memo String? @db.VarChar(500) + created_at DateTime @default(now(), map: "DF__MS_SUITAB__creat__571DF1D5") + updated_at DateTime? + MS_SUITABLE_MAIN MS_SUITABLE_MAIN @relation(fields: [main_id], references: [id], onUpdate: NoAction, map: "MS_SUITABLE_DETAIL_MS_SUITABLE_MAIN_FK") +} + +model MS_SUITABLE_MAIN { + 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) + created_at DateTime @default(now(), map: "DF__MS_SUITAB__creat__5441852A") + updated_at DateTime? @updatedAt + details MS_SUITABLE_DETAIL[] +} diff --git a/src/hooks/useSuitable.ts b/src/hooks/useSuitable.ts new file mode 100644 index 0000000..62f00e2 --- /dev/null +++ b/src/hooks/useSuitable.ts @@ -0,0 +1,30 @@ +import { suitableApi } from '@/api/suitable' + +export function useSuitable() { + const getCategories = async () => { + try { + return await suitableApi.getCategory() + } catch (error) { + console.error('카테고리 데이터 로드 실패:', error) + return [] + } + } + + const getSuitables = async () => { + try { + return await suitableApi.getList() + } catch (error) { + console.error('지붕재 데이터 로드 실패:', error) + } + } + + const updateSearchResults = async (selectedCategory: string | undefined, searchValue: string | undefined) => { + try { + return await suitableApi.getList(selectedCategory, searchValue) + } catch (error) { + console.error('지붕재 데이터 검색 실패:', error) + } + } + + return { getCategories, getSuitables, updateSearchResults } +} diff --git a/src/store/useSuitableStore.ts b/src/store/useSuitableStore.ts new file mode 100644 index 0000000..17b88c5 --- /dev/null +++ b/src/store/useSuitableStore.ts @@ -0,0 +1,68 @@ +import { create } from 'zustand' +import { Suitable, suitableApi } from '@/api/suitable' + +interface SuitableState { + // // 검색 결과 리스트 + // searchResults: Suitable[] + // // 초기 데이터 로드 + // fetchInitializeData: () => Promise + // // 검색 결과 설정 + // setSearchResults: (results: Suitable[]) => void + // // 검색 결과 초기화 + // resetSearchResults: () => void + + // 선택된 아이템 리스트 + selectedItems: Suitable[] + // 선택된 아이템 추가 + addSelectedItem: (item: Suitable) => void + // 선택된 아이템 제거 + removeSelectedItem: (itemId: number) => void + // 선택된 아이템 모두 제거 + clearSelectedItems: () => void +} + +export const useSuitableStore = create((set) => ({ + // // 초기 상태 + // searchResults: [], + + // // 초기 데이터 로드 + // fetchInitializeData: async () => { + // const suitables = await fetchInitialSuitablee() + // set({ searchResults: suitables }) + // }, + + // // 검색 결과 설정 + // setSearchResults: (results) => set({ searchResults: results }), + + // // 검색 결과 초기화 + // resetSearchResults: () => set({ searchResults: [] }), + + // 초기 상태 + selectedItems: [], + + // 선택된 아이템 추가 (중복 방지) + addSelectedItem: (item) => + set((state) => ({ + selectedItems: state.selectedItems.some((i) => i.id === item.id) ? state.selectedItems : [...state.selectedItems, item], + })), + + // 선택된 아이템 제거 + removeSelectedItem: (itemId) => + set((state) => ({ + selectedItems: state.selectedItems.filter((item) => item.id !== itemId), + })), + + // 선택된 아이템 모두 제거 + clearSelectedItems: () => set({ selectedItems: [] }), +})) + +// // 전체 데이터 초기화 함수 +// async function fetchInitialSuitablee() { +// try { +// const suitable = await suitableApi.getList() +// return suitable +// } catch (error) { +// console.error('초기 데이터 로드 실패:', error) +// return [] +// } +// }