From b2aefe7ea804e51aa2e8762d13e904693edfb1de Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Fri, 23 May 2025 14:04:01 +0900 Subject: [PATCH] feat: add REPRESENTATIVE_ID STORE_ID column, implement set value of storeId, representativeId for filtering survey List by member role --- src/app/api/survey-sales/route.ts | 17 +++++++++-------- src/components/survey-sale/detail/BasicForm.tsx | 4 ++++ .../survey-sale/detail/DetailForm.tsx | 2 ++ src/components/survey-sale/list/ListTable.tsx | 4 ++-- src/components/survey-sale/list/SearchForm.tsx | 6 +++--- src/hooks/useSurvey.ts | 2 +- src/types/Survey.ts | 6 ++++++ 7 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/app/api/survey-sales/route.ts b/src/app/api/survey-sales/route.ts index a1d818a..d3160b6 100644 --- a/src/app/api/survey-sales/route.ts +++ b/src/app/api/survey-sales/route.ts @@ -75,7 +75,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { where.OR = [ { // 같은 판매점에서 작성한 제출/제출되지 않은 매물 - AND: [{ STORE: { equals: params.store } }], + AND: [{ STORE_ID: { equals: params.store } }], }, { // MUSUBI (시공권한 X) 가 ORDER 에 제출한 매물 @@ -89,7 +89,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { { // MUSUBI (시공권한 X) 같은 판매점에서 작성한 제출/제출되지 않은 매물 AND: [ - { STORE: { equals: params.store } }, + { STORE_ID: { equals: params.store } }, { OR: [{ CONSTRUCTION_POINT: { equals: null } }, { CONSTRUCTION_POINT: { equals: '' } }], }, @@ -109,9 +109,10 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { case 'Builder': // MUSUBI (시공권한 O) case 'Partner': // PARTNER - // 같은 시공ID에서 작성된 매물 + // 시공점이 있고 STORE_ID가 시공ID와 같은 매물 where.AND?.push({ - CONSTRUCTION_POINT: { equals: params.builderNo }, + CONSTRUCTION_POINT: { not: null }, + STORE_ID: { equals: params.builderNo }, }) break @@ -125,7 +126,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { }, }, { - STORE: { + STORE_ID: { equals: params.store, }, }, @@ -149,11 +150,11 @@ export async function GET(request: Request) { const params: SearchParams = { keyword: searchParams.get('keyword'), searchOption: searchParams.get('searchOption'), - isMySurvey: searchParams.get('isMySurvey'), + isMySurvey: searchParams.get('isMySurvey'), //representativeId sort: searchParams.get('sort'), offset: searchParams.get('offset'), role: searchParams.get('role'), - store: searchParams.get('store'), + store: searchParams.get('store'), //storeId builderNo: searchParams.get('builderNo'), } @@ -162,7 +163,7 @@ export async function GET(request: Request) { // 내가 작성한 매물 조건 적용 if (params.isMySurvey) { - where.AND.push({ REPRESENTATIVE: params.isMySurvey }) + where.AND.push({ REPRESENTATIVE_ID: params.isMySurvey }) } // 키워드 검색 조건 적용 diff --git a/src/components/survey-sale/detail/BasicForm.tsx b/src/components/survey-sale/detail/BasicForm.tsx index b984101..52a541f 100644 --- a/src/components/survey-sale/detail/BasicForm.tsx +++ b/src/components/survey-sale/detail/BasicForm.tsx @@ -20,12 +20,16 @@ export default function BasicForm(props: { basicInfo: SurveyBasicRequest; setBas setBasicInfoSelected() }, []) + // 시공권한 user(Builder), Partner 계정은 조사매물 등록 할 때 STORE_ID에 시공점ID가 들어감 + // 권한 별 목록 필터링 시 시공권한 user(Builder), Partner는 시공점ID가 같은 것들만 조회 useEffect(() => { if (session?.isLoggedIn) { setBasicInfo({ ...basicInfo, representative: session.userNm ?? '', + representativeId: session.userId ?? null, store: session.role === 'Partner' ? null : session.storeNm ?? null, + storeId: session.role === 'Partner' || session.role === 'Builder' ? session.builderNo : session.storeId ?? null, constructionPoint: session.builderNo ?? null, }) } diff --git a/src/components/survey-sale/detail/DetailForm.tsx b/src/components/survey-sale/detail/DetailForm.tsx index 2827cf8..340b13d 100644 --- a/src/components/survey-sale/detail/DetailForm.tsx +++ b/src/components/survey-sale/detail/DetailForm.tsx @@ -48,7 +48,9 @@ const roofInfoForm: SurveyDetailRequest = { const basicInfoForm: SurveyBasicRequest = { representative: '', + representativeId: null, store: null, + storeId: null, constructionPoint: null, investigationDate: new Date().toLocaleDateString('en-CA'), buildingName: null, diff --git a/src/components/survey-sale/list/ListTable.tsx b/src/components/survey-sale/list/ListTable.tsx index 8ff5eaf..38e96a9 100644 --- a/src/components/survey-sale/list/ListTable.tsx +++ b/src/components/survey-sale/list/ListTable.tsx @@ -2,7 +2,7 @@ import LoadMoreButton from '@/components/LoadMoreButton' import { useServey } from '@/hooks/useSurvey' -import { useEffect, useState, useMemo, useRef } from 'react' +import { useEffect, useState } from 'react' import { useRouter, usePathname } from 'next/navigation' import SearchForm from './SearchForm' import { useSurveyFilterStore } from '@/store/surveyFilterStore' @@ -47,7 +47,7 @@ export default function ListTable() { return ( <> - +
{heldSurveyList.length > 0 ? (
    diff --git a/src/components/survey-sale/list/SearchForm.tsx b/src/components/survey-sale/list/SearchForm.tsx index 82147ba..f5bb9d8 100644 --- a/src/components/survey-sale/list/SearchForm.tsx +++ b/src/components/survey-sale/list/SearchForm.tsx @@ -4,7 +4,7 @@ import { SEARCH_OPTIONS, SEARCH_OPTIONS_ENUM, SEARCH_OPTIONS_PARTNERS, useSurvey import { useRouter } from 'next/navigation' import { useState } from 'react' -export default function SearchForm({ memberRole, userNm }: { memberRole: string; userNm: string }) { +export default function SearchForm({ memberRole, userId }: { memberRole: string; userId: string }) { const router = useRouter() const { setSearchOption, setSort, setIsMySurvey, setKeyword, reset, isMySurvey, keyword, searchOption, sort } = useSurveyFilterStore() const [searchKeyword, setSearchKeyword] = useState(keyword) @@ -76,9 +76,9 @@ export default function SearchForm({ memberRole, userNm }: { memberRole: string; { - setIsMySurvey(isMySurvey === userNm ? null : userNm) + setIsMySurvey(isMySurvey === userId ? null : userId) }} /> diff --git a/src/hooks/useSurvey.ts b/src/hooks/useSurvey.ts index 6610cea..0f897ff 100644 --- a/src/hooks/useSurvey.ts +++ b/src/hooks/useSurvey.ts @@ -90,7 +90,7 @@ export function useServey(id?: number): { isMySurvey, sort, offset, - store: session?.storeNm, + store: session?.storeId, builderNo: session?.builderNo, role: session?.role, }, diff --git a/src/types/Survey.ts b/src/types/Survey.ts index 8066836..cd2b7d0 100644 --- a/src/types/Survey.ts +++ b/src/types/Survey.ts @@ -1,7 +1,9 @@ export type SurveyBasicInfo = { id: number representative: string + representativeId: string | null store: string | null + storeId: string | null constructionPoint: string | null investigationDate: string | null buildingName: string | null @@ -62,7 +64,9 @@ export type SurveyDetailInfo = { export type SurveyBasicRequest = { representative: string + representativeId: string | null store: string | null + storeId: string | null constructionPoint: string | null investigationDate: string | null buildingName: string | null @@ -120,7 +124,9 @@ export type SurveyDetailCoverRequest = { export type SurveyRegistRequest = { representative: string + representativeId: string | null store: string | null + storeId: string | null constructionPoint: string | null investigationDate: string | null buildingName: string | null