Merge pull request 'feature/survey : Session builderId필드 추가' (#59) from feature/survey into dev
Reviewed-on: #59
This commit is contained in:
commit
a7ea7ce4bc
@ -13,7 +13,7 @@ interface Survey {
|
||||
interface SessionParams {
|
||||
role: string | null
|
||||
storeId: string | null
|
||||
builderNo: string | null
|
||||
builderId: string | null
|
||||
isLoggedIn: string | null
|
||||
}
|
||||
|
||||
@ -37,9 +37,9 @@ const checkAdminSubRole = (survey: Survey, storeId: string | null): boolean => {
|
||||
return survey.STORE_ID === storeId && survey.CONSTRUCTION_POINT_ID === null
|
||||
}
|
||||
|
||||
const checkPartnerOrBuilderRole = (survey: Survey, builderNo: string | null): boolean => {
|
||||
if (!builderNo) return false
|
||||
return survey.CONSTRUCTION_POINT_ID === builderNo
|
||||
const checkPartnerOrBuilderRole = (survey: Survey, builderId: string | null): boolean => {
|
||||
if (!builderId) return false
|
||||
return survey.CONSTRUCTION_POINT_ID === builderId
|
||||
}
|
||||
|
||||
const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => {
|
||||
@ -58,7 +58,7 @@ const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => {
|
||||
case 'Partner':
|
||||
// 2차점 시공권한 user
|
||||
case 'Builder':
|
||||
return checkPartnerOrBuilderRole(survey, sessionParams.builderNo)
|
||||
return checkPartnerOrBuilderRole(survey, sessionParams.builderId)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
@ -72,7 +72,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
|
||||
const sessionParams: SessionParams = {
|
||||
role: searchParams.get('role'),
|
||||
storeId: searchParams.get('storeId'),
|
||||
builderNo: searchParams.get('builderNo'),
|
||||
builderId: searchParams.get('builderId'),
|
||||
isLoggedIn: searchParams.get('isLoggedIn'),
|
||||
}
|
||||
// @ts-ignore
|
||||
@ -87,7 +87,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
|
||||
if (checkRole(survey, sessionParams)) {
|
||||
return NextResponse.json(survey)
|
||||
} else {
|
||||
return NextResponse.json({ error: '権限がありません。' }, { status: 403 })
|
||||
return NextResponse.json({ error: '該当物件の照会権限がありません。' }, { status: 403 })
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching survey:', error)
|
||||
|
||||
@ -12,7 +12,7 @@ type SearchParams = {
|
||||
offset?: string | null
|
||||
role?: string | null // 회원권한한
|
||||
storeId?: string | null // 판매점ID
|
||||
builderNo?: string | null // 시공ID
|
||||
builderId?: string | null // 시공ID
|
||||
}
|
||||
|
||||
type WhereCondition = {
|
||||
@ -90,7 +90,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
||||
where.OR = [
|
||||
{
|
||||
// MUSUBI (시공권한 X) 같은 판매점에서 작성한 제출/제출되지 않은 매물
|
||||
AND: [{ STORE_ID: { equals: params.storeId } }, { CONSTRUCTION_POINT_ID: { equals: params.builderNo } }],
|
||||
AND: [{ STORE_ID: { equals: params.storeId } }, { CONSTRUCTION_POINT_ID: { equals: params.builderId } }],
|
||||
},
|
||||
{
|
||||
// MUSUBI (시공권한 O) 가 MUSUBI 에 제출한 매물 + PARTNER 가 제출한 매물
|
||||
@ -108,7 +108,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
||||
case 'Partner': // PARTNER
|
||||
// 시공ID 같은 매물
|
||||
where.AND?.push({
|
||||
CONSTRUCTION_POINT_ID: { equals: params.builderNo },
|
||||
CONSTRUCTION_POINT_ID: { equals: params.builderId },
|
||||
})
|
||||
break
|
||||
|
||||
@ -146,12 +146,12 @@ export async function GET(request: Request) {
|
||||
const params: SearchParams = {
|
||||
keyword: searchParams.get('keyword'),
|
||||
searchOption: searchParams.get('searchOption'),
|
||||
isMySurvey: searchParams.get('isMySurvey'), //representativeId
|
||||
isMySurvey: searchParams.get('isMySurvey'),
|
||||
sort: searchParams.get('sort'),
|
||||
offset: searchParams.get('offset'),
|
||||
role: searchParams.get('role'),
|
||||
storeId: searchParams.get('storeId'), //storeId
|
||||
builderNo: searchParams.get('builderNo'),
|
||||
storeId: searchParams.get('storeId'),
|
||||
builderId: searchParams.get('builderId'),
|
||||
}
|
||||
|
||||
// 검색 조건 구성
|
||||
@ -172,7 +172,6 @@ export async function GET(request: Request) {
|
||||
if (Object.keys(roleCondition).length > 0) {
|
||||
where.AND.push(roleCondition)
|
||||
}
|
||||
|
||||
// 페이지네이션 데이터 조회
|
||||
//@ts-ignore
|
||||
const surveys = await prisma.SD_SURVEY_SALES_BASIC_INFO.findMany({
|
||||
|
||||
@ -38,7 +38,7 @@ export default function Detail() {
|
||||
<tr>
|
||||
<th>顧客名</th>
|
||||
<td>
|
||||
{session?.userNm} {session?.builderNo ? `[${session?.builderNo}]` : ''}
|
||||
{session?.userNm} {session?.builderNm ? `[${session?.builderNm}]` : ''}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@ -10,6 +10,7 @@ import { useSpinnerStore } from '@/store/spinnerStore'
|
||||
export default function SurveySaleDownloadPdf() {
|
||||
const params = useParams()
|
||||
const id = params.id
|
||||
const router = useRouter()
|
||||
|
||||
const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id))
|
||||
const { setIsShow } = useSpinnerStore()
|
||||
@ -49,6 +50,7 @@ export default function SurveySaleDownloadPdf() {
|
||||
|
||||
generatePDF(targetRef, options).then(() => {
|
||||
setIsShow(false)
|
||||
router.replace(`/survey-sale/${id}`)
|
||||
alert('PDFの生成が完了しました。 ポップアップウィンドウからダウンロードしてください。')
|
||||
})
|
||||
}
|
||||
|
||||
@ -78,10 +78,10 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) {
|
||||
return false
|
||||
case 'Admin':
|
||||
case 'Admin_Sub':
|
||||
return session.storeNm === basicData.store && session.builderNo === basicData.constructionPointId
|
||||
return session.storeNm === basicData.store && session.builderId === basicData.constructionPointId
|
||||
case 'Builder':
|
||||
case 'Partner':
|
||||
return session.builderNo === basicData.constructionPointId
|
||||
return session.builderId === basicData.constructionPointId
|
||||
default:
|
||||
return false
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ export default function DetailForm() {
|
||||
store: session?.storeNm ?? null,
|
||||
storeId: session?.storeId ?? null,
|
||||
constructionPoint: session?.builderNm ?? null,
|
||||
constructionPointId: session?.builderNo ?? null,
|
||||
constructionPointId: session?.builderId ?? null,
|
||||
}))
|
||||
const [roofInfoData, setRoofInfoData] = useState<SurveyDetailRequest>(roofInfoForm)
|
||||
|
||||
@ -99,7 +99,7 @@ export default function DetailForm() {
|
||||
store: session.storeNm ?? null,
|
||||
storeId: session.storeId ?? null,
|
||||
constructionPoint: session.builderNm ?? null,
|
||||
constructionPointId: session.builderNo ?? null,
|
||||
constructionPointId: session.builderId ?? null,
|
||||
}))
|
||||
}, [session?.isLoggedIn])
|
||||
|
||||
|
||||
@ -28,6 +28,11 @@ export default function ListTable() {
|
||||
|
||||
useEffect(() => {
|
||||
if (!session.isLoggedIn || isLoadingSurveyList) return
|
||||
// if ('status' in surveyList && surveyList.status === 403) {
|
||||
// alert('権限がありません。')
|
||||
// router.push('/survey-sale')
|
||||
// return
|
||||
// }
|
||||
if ('count' in surveyList && surveyList.count > 0) {
|
||||
if (offset > 0) {
|
||||
setHeldSurveyList((prev) => [...prev, ...surveyList.data])
|
||||
|
||||
@ -78,13 +78,44 @@ export function useSurvey(id?: number): {
|
||||
const { axiosInstance } = useAxios()
|
||||
const router = useRouter()
|
||||
|
||||
const checkSession = () => {
|
||||
if (session?.isLoggedIn) {
|
||||
switch (session?.role) {
|
||||
case 'T01':
|
||||
case 'Admin':
|
||||
case 'Admin_Sub':
|
||||
if (session?.storeId === null) {
|
||||
alert('販売店IDがありません。')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
case 'Builder':
|
||||
case 'Partner':
|
||||
if (session?.builderId === null) {
|
||||
alert('施工店IDがありません。')
|
||||
return false
|
||||
}
|
||||
return true
|
||||
default:
|
||||
alert('権限が間違っています。')
|
||||
return false
|
||||
}
|
||||
}
|
||||
alert('ログインしていません。')
|
||||
return false
|
||||
}
|
||||
|
||||
const {
|
||||
data: surveyListData,
|
||||
isLoading: isLoadingSurveyList,
|
||||
refetch: refetchSurveyList,
|
||||
} = useQuery({
|
||||
queryKey: ['survey', 'list', keyword, searchOption, isMySurvey, sort, offset, session?.storeNm, session?.builderNo, session?.role],
|
||||
queryKey: ['survey', 'list', keyword, searchOption, isMySurvey, sort, offset, session?.storeNm, session?.builderId, session?.role],
|
||||
queryFn: async () => {
|
||||
if (!checkSession()) {
|
||||
router.replace('/')
|
||||
return { data: [], count: 0 }
|
||||
}
|
||||
const resp = await axiosInstance(null).get<{ data: SurveyBasicInfo[]; count: number }>('/api/survey-sales', {
|
||||
params: {
|
||||
keyword,
|
||||
@ -93,7 +124,7 @@ export function useSurvey(id?: number): {
|
||||
sort,
|
||||
offset,
|
||||
storeId: session?.storeId,
|
||||
builderNo: session?.builderNo,
|
||||
builderId: session?.builderId,
|
||||
role: session?.role,
|
||||
},
|
||||
})
|
||||
@ -111,13 +142,17 @@ export function useSurvey(id?: number): {
|
||||
const { data: surveyDetail, isLoading: isLoadingSurveyDetail } = useQuery({
|
||||
queryKey: ['survey', id],
|
||||
queryFn: async () => {
|
||||
if (!session?.isLoggedIn || id === 0 || id === undefined) return null
|
||||
if (!checkSession()) {
|
||||
router.replace('/survey-sale')
|
||||
return null
|
||||
}
|
||||
if (id === 0 || id === undefined) return null
|
||||
try {
|
||||
const resp = await axiosInstance(null).get<SurveyBasicInfo>(`/api/survey-sales/${id}`, {
|
||||
params: {
|
||||
role: session?.role,
|
||||
storeId: session?.storeId,
|
||||
builderNo: session?.builderNo,
|
||||
builderId: session?.builderId,
|
||||
isLoggedIn: session?.isLoggedIn,
|
||||
},
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user