diff --git a/src/app/api/survey-sales/route.ts b/src/app/api/survey-sales/route.ts index cbcead5..5a34bb8 100644 --- a/src/app/api/survey-sales/route.ts +++ b/src/app/api/survey-sales/route.ts @@ -77,6 +77,33 @@ const createKeywordSearchCondition = (keyword: string, searchOption: string): Wh return where } +const filterTempData = (data: any) => { + const requiredFields = [ + 'INSTALLATION_SYSTEM', + 'CONSTRUCTION_YEAR', + 'RAFTER_SIZE', + 'RAFTER_PITCH', + 'RAFTER_PITH_ETC', + 'WATERPROOF_MATERIAL', + 'INSULATION_PRESENCE', + 'STRUCTURE_ORDER', + ] + + const where: WhereCondition = { AND: [] } + + // 각 필드에 대해 OR 조건을 만들고, 전체를 AND로 묶음 + where.AND.push( + ...requiredFields.map((field: string) => ({ + OR: [ + { [field]: { not: null } }, + { [`${field}_ETC`]: { not: null } } + ] + })) + ) + + return where +} + /** * 회원 역할별 검색 조건 생성 함수 * @param params 검색 파라미터 @@ -128,6 +155,8 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { break case 'T01': + where.AND.push(filterTempData(params)) + break case 'User': // 모든 매물 조회 가능 (추가 조건 없음) break @@ -219,7 +248,7 @@ export async function PUT(request: Request) { } } -export async function POST(request: Request) { +export async function POST(request: Request) { try { const body = await request.json() console.log('body:: ', body) @@ -232,9 +261,9 @@ export async function POST(request: Request) { data: { ...convertToSnakeCase(basicInfo), DETAIL_INFO: { - create: convertToSnakeCase(detailInfo) - } - } + create: convertToSnakeCase(detailInfo), + }, + }, }) console.log('result:: ', result) return NextResponse.json(result) diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index 29652a7..6eae13f 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -10,6 +10,7 @@ export default function ButtonForm(props: { mode: Mode setMode: (mode: Mode) => void data: { basic: SurveyBasicRequest; roof: SurveyDetailRequest } + isTemporarySave: boolean }) { // 라우터 const router = useRouter() @@ -23,7 +24,6 @@ export default function ButtonForm(props: { const routeId = params.id // ------------------------------------------------------------ - const [isSubmitProcess, setIsSubmitProcess] = useState(false) const [saveData, setSaveData] = useState({ ...props.data.basic, detailInfo: props.data.roof, @@ -55,12 +55,14 @@ export default function ButtonForm(props: { const { deleteSurvey, submitSurvey, updateSurvey } = useServey(Number(id)) const { validateSurveyDetail, createSurvey } = useServey() - const handleSave = (isTemporary: boolean, isSubmitProcess?: boolean) => { + const handleSave = (isTemporary: boolean, isSubmitProcess = false) => { const emptyField = validateSurveyDetail(props.data.roof) + const hasEmptyField = emptyField?.trim() !== '' + if (isTemporary) { - tempSaveProcess() + hasEmptyField ? tempSaveProcess() : saveProcess(emptyField, false) } else { - saveProcess(emptyField, isSubmitProcess ?? false) + saveProcess(emptyField, isSubmitProcess) } } @@ -135,6 +137,10 @@ export default function ButtonForm(props: { } const handleSubmit = async () => { + if (props.isTemporarySave) { + alert('一時保存されたデータは提出できません。') + return + } window.neoConfirm('提出しますか?', async () => { if (Number(routeId)) { submitProcess() diff --git a/src/components/survey-sale/detail/DataTable.tsx b/src/components/survey-sale/detail/DataTable.tsx index 210d80d..4fb370f 100644 --- a/src/components/survey-sale/detail/DataTable.tsx +++ b/src/components/survey-sale/detail/DataTable.tsx @@ -4,7 +4,6 @@ import { useServey } from '@/hooks/useSurvey' import { useParams, useSearchParams } from 'next/navigation' import { useEffect, useState } from 'react' import DetailForm from './DetailForm' -import type { SurveyBasicInfo } from '@/types/Survey' export default function DataTable() { const params = useParams() @@ -14,19 +13,22 @@ export default function DataTable() { const isTemp = searchParams.get('isTemporary') const { surveyDetail, isLoadingSurveyDetail } = useServey(Number(id)) - const [isTemporary, setIsTemporary] = useState(isTemp === 'true') + const [isTemporarySave, setIsTemporarySave] = useState(isTemp === 'true') const { validateSurveyDetail } = useServey(Number(id)) useEffect(() => { if (surveyDetail?.detailInfo) { const validate = validateSurveyDetail(surveyDetail.detailInfo) + console.log('validate:: ', validate) if (validate.trim() !== '') { - setIsTemporary(false) + setIsTemporarySave(true) } } }, [surveyDetail]) + console.log('isTemporarySave:: ', isTemporarySave) + if (isLoadingSurveyDetail) { return
Loading...
} @@ -42,7 +44,7 @@ export default function DataTable() { 登録番号 - {isTemporary ? ( + {isTemporarySave ? ( 仮保存 @@ -83,7 +85,7 @@ export default function DataTable() { - + ) } diff --git a/src/components/survey-sale/detail/DetailForm.tsx b/src/components/survey-sale/detail/DetailForm.tsx index f8761bc..71b771e 100644 --- a/src/components/survey-sale/detail/DetailForm.tsx +++ b/src/components/survey-sale/detail/DetailForm.tsx @@ -60,13 +60,14 @@ const basicInfoForm: SurveyBasicRequest = { submissionDate: null, } -export default function DetailForm() { +export default function DetailForm(props: { isTemporarySave: boolean }) { + const { isTemporarySave } = props const idParam = useSearchParams().get('id') const routeId = useParams().id const id = idParam ?? routeId - const { surveyDetail } = useServey(Number(id)) + const { surveyDetail, validateSurveyDetail } = useServey(Number(id)) const [mode, setMode] = useState(idParam ? 'EDIT' : routeId ? 'READ' : 'CREATE') const [basicInfoData, setBasicInfoData] = useState(basicInfoForm) @@ -79,21 +80,18 @@ export default function DetailForm() { if (detailInfo) { const { id, uptDt, regDt, basicInfoId, ...rest } = detailInfo setRoofInfoData(rest) + if (validateSurveyDetail(rest).trim() !== '') { + } } } }, [surveyDetail]) - // console.log('mode:: ', mode) - // console.log('surveyDetail:: ', surveyDetail) - // console.log('basicInfoData:: ', basicInfoData) - console.log('roofInfoData:: ', roofInfoData) - const data = { basic: basicInfoData, roof: roofInfoData, } - const buttonFormProps = { mode, setMode, data } + const buttonFormProps = { mode, setMode, data, isTemporarySave } return ( <>