diff --git a/src/app/api/auth/route.ts b/src/app/api/auth/route.ts
index d5149a9..8205132 100644
--- a/src/app/api/auth/route.ts
+++ b/src/app/api/auth/route.ts
@@ -15,7 +15,9 @@ export async function POST(request: Request) {
})
console.log('๐ ~ result ~ result:', result.data)
- if (result.data.result.code === 200) {
+ let finalResult = {}
+
+ if (result.data.result.resultCode === 'S') {
tracking({
url: `/api/auth/login`,
data: JSON.stringify({
@@ -72,52 +74,64 @@ export async function POST(request: Request) {
console.log('end session edit!')
await session.save()
- }
- const resultForSession = {
- LANG_CD: result.data.data.langCd,
- CURR_PAGE: result.data.data.currPage,
- ROW_COUNT: result.data.data.rowCount,
- START_ROW: result.data.data.startRow,
- END_ROW: result.data.data.endRow,
- COMP_CD: result.data.data.compCd,
- AGENCY_STORE_ID: result.data.data.agencyStoreId,
- STORE_ID: result.data.data.storeId,
- STORE_NM: result.data.data.storeNm,
- USER_ID: result.data.data.userId,
- CATEGORY: result.data.data.category,
- USER_NM: result.data.data.userNm,
- USER_NM_KANA: result.data.data.userNmKana,
- TEL_NO: result.data.data.telNo,
- FAX: result.data.data.fax,
- EMAIL: result.data.data.email,
- LAST_EDIT_USER: result.data.data.lastEditUser,
- STORE_GUBUN: result.data.data.storeGubun,
- PW_CURR: result.data.data.pwCurr,
- PWD_INIT_YN: result.data.data.pwdInitYn,
- APPR_STAT_CD: result.data.data.apprStatCd,
- LOGIN_FAIL_CNT: result.data.data.loginFailCnt,
- LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn,
- PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd,
- GROUP_ID: result.data.data.groupId,
- STORE_LVL: result.data.data.storeLvl,
- CUST_CD: result.data.data.custCd,
- BUILDER_NO: result.data.data.builderNo,
- IS_LOGGED_IN: true,
- ROLE: '',
- }
+ const resultForSession = {
+ LANG_CD: result.data.data.langCd,
+ CURR_PAGE: result.data.data.currPage,
+ ROW_COUNT: result.data.data.rowCount,
+ START_ROW: result.data.data.startRow,
+ END_ROW: result.data.data.endRow,
+ COMP_CD: result.data.data.compCd,
+ AGENCY_STORE_ID: result.data.data.agencyStoreId,
+ STORE_ID: result.data.data.storeId,
+ STORE_NM: result.data.data.storeNm,
+ USER_ID: result.data.data.userId,
+ CATEGORY: result.data.data.category,
+ USER_NM: result.data.data.userNm,
+ USER_NM_KANA: result.data.data.userNmKana,
+ TEL_NO: result.data.data.telNo,
+ FAX: result.data.data.fax,
+ EMAIL: result.data.data.email,
+ LAST_EDIT_USER: result.data.data.lastEditUser,
+ STORE_GUBUN: result.data.data.storeGubun,
+ PW_CURR: result.data.data.pwCurr,
+ PWD_INIT_YN: result.data.data.pwdInitYn,
+ APPR_STAT_CD: result.data.data.apprStatCd,
+ LOGIN_FAIL_CNT: result.data.data.loginFailCnt,
+ LOGIN_FAIL_MIN_YN: result.data.data.loginFailMinYn,
+ PRICE_VIEW_STAT_CD: result.data.data.priceViewStatCd,
+ GROUP_ID: result.data.data.groupId,
+ STORE_LVL: result.data.data.storeLvl,
+ CUST_CD: result.data.data.custCd,
+ BUILDER_NO: result.data.data.builderNo,
+ IS_LOGGED_IN: true,
+ ROLE: '',
+ }
- if (result.data.data.userId === 'T01') {
- resultForSession.ROLE = 'T01'
- } else if (result.data.data.groupId === '60000') {
- resultForSession.ROLE = 'Admin'
- } else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) {
- resultForSession.ROLE = 'Admin_Sub'
- } else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
- resultForSession.ROLE = 'Builder'
+ if (result.data.data.userId === 'T01') {
+ resultForSession.ROLE = 'T01'
+ } else if (result.data.data.groupId === '60000') {
+ resultForSession.ROLE = 'Admin'
+ } else if (result.data.data.groupId === '70000' && result.data.data.builderNo === null) {
+ resultForSession.ROLE = 'Admin_Sub'
+ } else if (result.data.data.groupId === '70000' && result.data.data.builderNo !== null) {
+ resultForSession.ROLE = 'Builder'
+ } else {
+ resultForSession.ROLE = 'User'
+ }
+
+ finalResult = {
+ code: 200,
+ message: 'Login is Succecss!!',
+ result: resultForSession,
+ }
} else {
- resultForSession.ROLE = 'User'
+ finalResult = {
+ code: 400,
+ message: 'Login is Failed!!',
+ result: {},
+ }
}
- return NextResponse.json({ code: 200, message: 'Login is Succecss!!', result: resultForSession })
+ return NextResponse.json(finalResult)
}
diff --git a/src/app/api/suitable/list/route.ts b/src/app/api/suitable/list/route.ts
index 32eac33..005d556 100644
--- a/src/app/api/suitable/list/route.ts
+++ b/src/app/api/suitable/list/route.ts
@@ -1,82 +1,66 @@
import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/libs/prisma'
-import { SUITABLE_HEAD_CODE, type SuitableMain } from '@/types/Suitable'
+import { type Suitable } from '@/types/Suitable'
export async function GET(request: NextRequest) {
try {
const searchParams = request.nextUrl.searchParams
+
+ const pageNumber = parseInt(searchParams.get('pageNumber') || '0')
+ const itemPerPage = parseInt(searchParams.get('itemPerPage') || '0')
+ if (pageNumber === 0 || itemPerPage === 0) {
+ return NextResponse.json({ error: 'ํ์ด์ง ๋ฒํธ์ ํ์ด์ง๋น ์์ดํ
์๊ฐ ํ์ํฉ๋๋ค' }, { status: 400 })
+ }
+
const category = searchParams.get('category')
const keyword = searchParams.get('keyword')
- let MainWhereCondition: any = {}
- const whereCondition: string[] = []
- const params: string[] = []
+ let query = `
+ SELECT
+ msm.id
+ , msm.product_name
+ , details.detail_cnt
+ , details.detail
+ FROM ms_suitable_main msm
+ LEFT JOIN (
+ SELECT
+ msd.main_id
+ , COUNT(msd.id) AS detail_cnt
+ , (
+ SELECT
+ msd_json.id
+ , msd_json.trestle_mfpc_cd
+ , msd_json.trestle_manufacturer_product_name
+ , msd_json.memo
+ FROM ms_suitable_detail msd_json
+ WHERE msd.main_id = msd_json.main_id
+ FOR JSON PATH
+ ) AS detail
+ FROM ms_suitable_detail msd
+ GROUP BY msd.main_id
+ ) AS details
+ ON msm.id = details.main_id
+ WHERE 1=1
+ --roofMtCd AND msm.roof_mt_cd = ':roofMtCd'
+ --productName AND msm.product_name LIKE '%:productName%'
+ ORDER BY msm.product_name
+ OFFSET (@P1 - 1) * @P2 ROWS
+ FETCH NEXT @P2 ROWS ONLY;
+ `
+
+ // ๊ฒ์ ์กฐ๊ฑด ์ค์
if (category) {
- whereCondition.push(`${SUITABLE_HEAD_CODE.ROOF_MT_CD} = @P1`)
- params.push(category)
- MainWhereCondition[SUITABLE_HEAD_CODE.ROOF_MT_CD] = category
+ query = query.replace('--roofMtCd ', '')
+ query = query.replace(':roofMtCd', category)
}
if (keyword) {
- whereCondition.push('PRODUCT_NAME LIKE @P2')
- params.push(`%${keyword}%`)
- MainWhereCondition['PRODUCT_NAME'] = {
- contains: keyword,
- }
+ query = query.replace('--productName ', '')
+ query = query.replace(':productName', keyword)
}
- const startTime = performance.now()
- console.log(`์ฟผ๋ฆฌ (main table) ์์ ์๊ฐ: ${startTime}ms`)
- // @ts-ignore
- const suitable = await prisma.MS_SUITABLE_MAIN.findMany({
- select: {
- ID: true,
- PRODUCT_NAME: true,
- ROOF_MT_CD: true,
- },
- where: MainWhereCondition,
- orderBy: {
- PRODUCT_NAME: 'asc',
- },
- })
+ const suitable: Suitable[] = await prisma.$queryRawUnsafe(query, pageNumber, itemPerPage)
- const endTime = performance.now()
- console.log(`์ฟผ๋ฆฌ (main table) ์ข
๋ฃ ์๊ฐ: ${endTime - startTime}ms`)
-
- const mainIds: number[] = suitable.map((item: SuitableMain) => item.id)
-
-
- const startTime2 = performance.now()
- console.log(`์ฟผ๋ฆฌ (detail table) ์์ ์๊ฐ: ${startTime2}ms`)
- let detailQuery = `
- SELECT
- msd.main_id
- , (
- SELECT
- msd_json.id
- , msd_json.trestle_mfpc_cd
- , msd_json.trestle_manufacturer_product_name
- , msd_json.memo
- FROM ms_suitable_detail msd_json
- WHERE msd.main_id = msd_json.main_id
- FOR JSON PATH
- ) AS detail
- FROM ms_suitable_detail msd
- -- WHERE 1=1
- GROUP BY msd.main_id
- `
- if (whereCondition.length > 0) {
- detailQuery = detailQuery.replace('-- WHERE 1=1', `WHERE msd.main_id IN @P1`)
- }
- // @ts-ignore
- const detail = await prisma.$queryRawUnsafe(detailQuery, ...mainIds)
-
- const endTime2 = performance.now()
- console.log(`์ฟผ๋ฆฌ (detail table) ์ข
๋ฃ ์๊ฐ: ${endTime2 - startTime2}ms`)
-
- const endTime3 = performance.now()
- console.log(`์ฟผ๋ฆฌ ์ด ์คํ ์๊ฐ: ${endTime3 - startTime}ms`)
-
- return NextResponse.json({ suitable, detail })
+ return NextResponse.json(suitable)
} catch (error) {
console.error('โ ๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค:', error)
return NextResponse.json({ error: '๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค' }, { status: 500 })
diff --git a/src/app/api/suitable/list/test/route.ts b/src/app/api/suitable/list/test/route.ts
deleted file mode 100644
index e4688bd..0000000
--- a/src/app/api/suitable/list/test/route.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-import { NextRequest, NextResponse } from 'next/server'
-import { prisma } from '@/libs/prisma'
-import { SUITABLE_HEAD_CODE, type Suitable } from '@/types/Suitable'
-
-export async function GET(request: NextRequest) {
- try {
- const searchParams = request.nextUrl.searchParams
- const category = searchParams.get('category')
- const keyword = searchParams.get('keyword')
-
- const whereCondition: string[] = []
- const params: string[] = []
- if (category) {
- whereCondition.push(`${SUITABLE_HEAD_CODE.ROOF_MT_CD} = @P1`)
- params.push(category)
- }
- if (keyword) {
- whereCondition.push('PRODUCT_NAME LIKE @P2')
- params.push(`%${keyword}%`)
- }
-
- const startTime = performance.now()
- console.log(`์ฟผ๋ฆฌ ์์ ์๊ฐ: ${startTime}ms`)
-
- let query = `
- SELECT
- msm.id
- , msm.product_name
- , msm.manu_ft_cd
- , msm.roof_mt_cd
- , msm.roof_sh_cd
- , details.detail
- FROM ms_suitable_main msm
- LEFT JOIN (
- SELECT
- msd.main_id
- , (
- SELECT
- msd_json.id
- , msd_json.trestle_mfpc_cd
- , msd_json.trestle_manufacturer_product_name
- , msd_json.memo
- FROM ms_suitable_detail msd_json
- WHERE msd.main_id = msd_json.main_id
- FOR JSON PATH
- ) AS detail
- FROM ms_suitable_detail msd
- GROUP BY msd.main_id
- ) AS details
- ON msm.id = details.main_id
- -- AND details.main_id IN (#mainIds)
- -- WHERE 1=1
- ORDER BY msm.product_name`
-
- // ๊ฒ์ ์กฐ๊ฑด ์ถ๊ฐ
- if (whereCondition.length > 0) {
- query = query.replace('-- WHERE 1=1', `WHERE ${whereCondition.join(' AND ')}`)
- }
-
- // @ts-ignore
- const suitable: Suitable[] = await prisma.$queryRawUnsafe(query, ...params)
-
- const endTime = performance.now()
- console.log(`์ฟผ๋ฆฌ ์คํ ์๊ฐ: ${endTime - startTime}ms`)
-
- return NextResponse.json(suitable)
- } catch (error) {
- console.error('โ ๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค:', error)
- return NextResponse.json({ error: '๋ฐ์ดํฐ ์กฐํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค' }, { status: 500 })
- }
-}
diff --git a/src/app/api/survey-sales/[id]/route.ts b/src/app/api/survey-sales/[id]/route.ts
index db5c9df..07ecd6a 100644
--- a/src/app/api/survey-sales/[id]/route.ts
+++ b/src/app/api/survey-sales/[id]/route.ts
@@ -21,7 +21,6 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
const getNewSrlNo = async (srlNo: string, storeId: string) => {
let newSrlNo = srlNo
- console.log('srlNo:: ', srlNo)
if (srlNo.startsWith('ไธๆไฟๅญ')) {
//@ts-ignore
const lastSurvey = await prisma.SD_SURVEY_SALES_BASIC_INFO.findFirst({
@@ -128,7 +127,6 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<
SRL_NO: newSrlNo,
},
})
- console.log(survey)
return NextResponse.json({ message: 'Survey confirmed successfully' })
}
} catch (error) {
diff --git a/src/app/api/survey-sales/route.ts b/src/app/api/survey-sales/route.ts
index 7d51802..a1d818a 100644
--- a/src/app/api/survey-sales/route.ts
+++ b/src/app/api/survey-sales/route.ts
@@ -1,7 +1,6 @@
import { NextResponse } from 'next/server'
import { prisma } from '@/libs/prisma'
import { convertToSnakeCase } from '@/utils/common-utils'
-import { equal } from 'assert'
/**
* ๊ฒ์ ํ๋ผ๋ฏธํฐ
*/
@@ -32,6 +31,7 @@ const SEARCH_OPTIONS = [
'POST_CODE', // ์ฐํธ๋ฒํธ
'ADDRESS', // ์ฃผ์
'ADDRESS_DETAIL', // ์์ธ์ฃผ์
+ 'SRL_NO', // ๋ฑ๋ก๋ฒํธ
] as const
// ํ์ด์ง๋น ํญ๋ชฉ ์
@@ -50,13 +50,6 @@ const createKeywordSearchCondition = (keyword: string, searchOption: string): Wh
// ๋ชจ๋ ํ๋ ๊ฒ์ ์ OR ์กฐ๊ฑด ์ฌ์ฉ
where.OR = []
- // ID๊ฐ ์ซ์์ธ ๊ฒฝ์ฐ ID ๊ฒ์ ์กฐ๊ฑด ์ถ๊ฐ
- if (keyword.match(/^\d+$/) || !isNaN(Number(keyword))) {
- where.OR.push({
- ID: { equals: Number(keyword) },
- })
- }
-
where.OR.push(
...SEARCH_OPTIONS.map((field) => ({
[field]: { contains: keyword },
@@ -65,15 +58,6 @@ const createKeywordSearchCondition = (keyword: string, searchOption: string): Wh
} else if (SEARCH_OPTIONS.includes(searchOption.toUpperCase() as any)) {
// ํน์ ํ๋ ๊ฒ์
where[searchOption.toUpperCase()] = { contains: keyword }
- } else if (searchOption === 'id') {
- // ID ๊ฒ์ (์ซ์ ๋ณํ ํ์)
- const number = Number(keyword)
- if (!isNaN(number)) {
- where.ID = { equals: number }
- } else {
- // ์ ํจํ์ง ์์ ID ๊ฒ์ ์ ๋น ๊ฒฐ๊ณผ ๋ฐํ
- where.ID = { equals: null }
- }
}
return where
}
diff --git a/src/app/suitable-test/layout.tsx b/src/app/suitable-test/layout.tsx
deleted file mode 100644
index e5e7c3f..0000000
--- a/src/app/suitable-test/layout.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import type { ReactNode } from 'react'
-
-interface SuitableLayoutProps {
- children: ReactNode
-}
-
-export default function layout({ children }: SuitableLayoutProps) {
- return (
- <>
-
-
-
-
-
ใใฎ้ฉๅ่กจใฏๅ่่ณๆใจใใฆไฝฟ็จใใฆใใ ใใ.
-
่ฉณ็ดฐใใๅใๅใใใฏ1๏ผ1ใๅใๅใใใใๅฉ็จใใ ใใ.
-
ๅฑๆ นๆใฎ้ธๆorๅฑๆ นๆๅใ็ดๆฅๅ
ฅๅใใฆใใ ใใ.
-
-
- {children}
-
-
- >
- )
-}
diff --git a/src/app/suitable-test/page.tsx b/src/app/suitable-test/page.tsx
deleted file mode 100644
index a5299fe..0000000
--- a/src/app/suitable-test/page.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import SuitableRaw from '@/components/suitable/SuitableRaw'
-
-export default function page() {
- return (
- <>
-
- >
- )
-}
diff --git a/src/components/Login.tsx b/src/components/Login.tsx
index 043fee6..4a77ad6 100644
--- a/src/components/Login.tsx
+++ b/src/components/Login.tsx
@@ -39,6 +39,26 @@ export default function Login() {
return emailRegex.test(email)
}
+ const handleLogin = () => {
+ if (validateLogin()) {
+ setIsLogin(true)
+ }
+ }
+
+ const handleKeyDown = (e: React.KeyboardEvent) => {
+ if (e.key === 'Enter') {
+ handleLogin()
+ }
+ }
+
+ const validateLogin = () => {
+ if (account.loginId === '' || account.pwd === '') {
+ alert('Please enter your ID and password.')
+ return false
+ }
+ return true
+ }
+
interface LoginData {
code: number
message: string | null
@@ -85,6 +105,9 @@ export default function Login() {
...loginData?.result,
})
router.push('/')
+ } else if (loginData?.code === 400) {
+ alert(loginData?.message)
+ setAccount({ loginId: '', pwd: '' })
}
}, [loginData])
@@ -106,6 +129,7 @@ export default function Login() {
className="login-frame"
placeholder="Input Frame ID"
value={account.loginId}
+ onKeyDown={(e) => handleKeyDown(e)}
onChange={(e) => setAccount({ loginId: e.target.value })}
/>