From 0c1f8a2c7c25b6a66e0d5d88dbbc0ad598546fa5 Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sat, 19 Apr 2025 22:34:39 +0900 Subject: [PATCH 01/13] =?UTF-8?q?chore:#168=20=EC=82=AC=EB=9E=8C=EC=9D=B8?= =?UTF-8?q?=20api=20key=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/env-constants.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/constants/env-constants.ts b/src/constants/env-constants.ts index 58e68cd95..5d00e6c02 100644 --- a/src/constants/env-constants.ts +++ b/src/constants/env-constants.ts @@ -18,4 +18,6 @@ export const ENV = { SENTRY_DSN: process.env.SENTRY_DSN, SENTRY_CLIENT_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN, + + SARAMIN_API_KEY: process.env.SARAMIN_API_KEY, }; From cd209f14f82ac83b3142820246f6b02178fe355b Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sun, 20 Apr 2025 00:50:23 +0900 Subject: [PATCH 02/13] =?UTF-8?q?feat:#168=20admin=20=EB=8C=80=EB=B9=84=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=B0=8F=20path=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/message-constants.ts | 3 +++ src/constants/path-constant.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/constants/message-constants.ts b/src/constants/message-constants.ts index a27edb0fd..3ef601ba9 100644 --- a/src/constants/message-constants.ts +++ b/src/constants/message-constants.ts @@ -100,6 +100,9 @@ export const DB_MESSAGE = { USER_ID_VALIDATION: '유저 아이디가 유효하지 않습니다.', JOB_POSTING_ID_VALIDATION: '채용 공고 아이디가 유효하지 않습니다.', }, + SUCCESS: { + CREATE_SUCCESS: 'DB CREATE SUCCESS', + }, }; export const CHARACTER_MESSAGE = { diff --git a/src/constants/path-constant.ts b/src/constants/path-constant.ts index 6b85f703a..ec8f5c512 100644 --- a/src/constants/path-constant.ts +++ b/src/constants/path-constant.ts @@ -62,6 +62,9 @@ export const ROUTE_HANDLER_PATH = { EXPERIENCE: '/api/character/experience', HISTORY: (id: number) => `/api/character/history/${id}`, }, + ADMIN: { + ROOT: '/api/admin', + }, }; export const QUERY_PARAMS = { From 30ea01da5b86e15d7b6b9936752d789f81ef5cfa Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sun, 20 Apr 2025 00:51:15 +0900 Subject: [PATCH 03/13] =?UTF-8?q?feat:#168=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EC=A0=95=EC=A0=9C=ED=99=94=20=EB=B0=8F=20db=20create?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/admin/route.ts | 109 ++++++++++++++++++++++ src/features/admin/api/client-services.ts | 19 ++++ 2 files changed, 128 insertions(+) create mode 100644 src/app/api/admin/route.ts create mode 100644 src/features/admin/api/client-services.ts diff --git a/src/app/api/admin/route.ts b/src/app/api/admin/route.ts new file mode 100644 index 000000000..c6375ebab --- /dev/null +++ b/src/app/api/admin/route.ts @@ -0,0 +1,109 @@ +import { ENV } from '@/constants/env-constants'; +import { AUTH_MESSAGE, DB_MESSAGE, HISTORY_MESSAGE } from '@/constants/message-constants'; +import { getToken } from 'next-auth/jwt'; +import { NextRequest, NextResponse } from 'next/server'; +import { eduMap, jobMidCdMap, locMcdMap } from '@/constants/saramin-constants'; +import { prisma } from '@/lib/prisma'; +import { JobPosting } from '@prisma/client'; + +const { + VALIDATION: { USER_ID_VALIDATION }, + ERROR: { DB_SERVER_ERROR }, + SUCCESS: { CREATE_SUCCESS }, +} = DB_MESSAGE; +const { + ERROR: { EXPIRED_TOKEN }, +} = AUTH_MESSAGE; +const { NEXTAUTH_SECRET, SARAMIN_API_KEY } = ENV; +const { + VALIDATION: { QUERY_PARAMS_TYPE }, +} = HISTORY_MESSAGE; + +const URL = 'https://oapi.saramin.co.kr/job-search'; +const COUNT = 100; +const PAGE = '0'; +const DEFAULT_EDU_CODE = 6; +const LIMIT_EDU_LEVEL = 5; + +type JobRecord = Omit; + +/** + * POST 요청 함수 + */ + +export const POST = async (request: NextRequest) => { + try { + const token = await getToken({ req: request, secret: NEXTAUTH_SECRET }); + if (!token) return NextResponse.json({ message: EXPIRED_TOKEN }, { status: 401 }); + + const allRecords: JobRecord[] = []; + + for (const [jobCdStr, _] of Object.entries(jobMidCdMap)) { + for (const [_n, locCodes] of Object.entries(locMcdMap)) { + const params = new URLSearchParams({ + 'access-key': SARAMIN_API_KEY, + loc_mcd: locCodes, + job_mid_cd: jobCdStr, + start: PAGE, + count: COUNT.toString(), + }); + const res = await fetch(`${URL}?${params}`); + const data = await res.json(); + const jobs = data.jobs.job; + + jobs.forEach((job: any) => { + const pos = job.position || {}; + const rawEd = pos['required-education-level']?.code; + let eduCode: number = DEFAULT_EDU_CODE; + if (rawEd !== undefined) { + const i = Number(rawEd); + eduCode = i <= LIMIT_EDU_LEVEL ? i : eduMap[i]; + } + + allRecords.push({ + url: job.url as string, + companyName: job.company?.detail?.name as string, + positionTitle: pos.title as string, + locationName: pos.location?.name as string, + jobMidCodeName: pos['job-mid-code']?.name as string, + experienceCode: Number(pos['experience-level']?.code), + experienceName: pos['experience-level']?.name as string, + requiredEducationCode: eduCode, + requiredEducationName: pos['required-education-level']?.name as string, + openingTimestamp: Number(job['opening-timestamp']), + expirationTimestamp: Number(job['expiration-timestamp']), + }); + }); + + await new Promise((_) => setTimeout(_, 300)); + } + } + + await prisma.jobPosting.createMany({ + data: allRecords.map((record) => ({ + url: record.url, + companyName: record.companyName, + positionTitle: record.positionTitle, + locationName: record.locationName, + jobMidCodeName: record.jobMidCodeName, + experienceCode: record.experienceCode, + experienceName: record.experienceName, + requiredEducationCode: record.requiredEducationCode, + requiredEducationName: record.requiredEducationName, + openingTimestamp: Number(record.openingTimestamp), + expirationTimestamp: Number(record.expirationTimestamp), + // TODO: 타입변경 적용 후 삭제 예정 + active: 0, + })), + skipDuplicates: true, + }); + + const response = { + message: CREATE_SUCCESS, + }; + + return NextResponse.json({ response }, { status: 200 }); + } catch (error) { + return NextResponse.json({ message: DB_SERVER_ERROR }, { status: 500 }); + } +}; diff --git a/src/features/admin/api/client-services.ts b/src/features/admin/api/client-services.ts new file mode 100644 index 000000000..d3849c7d8 --- /dev/null +++ b/src/features/admin/api/client-services.ts @@ -0,0 +1,19 @@ +import { API_METHOD } from '@/constants/api-method-constants'; +import { ROUTE_HANDLER_PATH } from '@/constants/path-constant'; +import { fetchWithSentry } from '@/utils/fetch-with-sentry'; + +const { ROOT } = ROUTE_HANDLER_PATH.ADMIN; +const { POST } = API_METHOD; + +/** + * + * @description 사람인 데이터를 정제하여 DB로 보내는 로직 + */ +export const postJobPostingDataToDatabase = async (): Promise => { + const { response } = await fetchWithSentry(ROOT, { + method: POST, + }); + + // TODO: 관리자에게 알리는 alert로 변경 + alert(response.message); +}; From 16fe5cfcfd95131d2ad4390a3270638d692e2abc Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sun, 20 Apr 2025 00:53:05 +0900 Subject: [PATCH 04/13] =?UTF-8?q?feat:#168=20=EC=82=AC=EB=9E=8C=EC=9D=B8?= =?UTF-8?q?=20data=20=EC=A0=95=EC=A0=9C=ED=99=94=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/admin/data/saramin-constants.ts | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/features/admin/data/saramin-constants.ts diff --git a/src/features/admin/data/saramin-constants.ts b/src/features/admin/data/saramin-constants.ts new file mode 100644 index 000000000..3c3858121 --- /dev/null +++ b/src/features/admin/data/saramin-constants.ts @@ -0,0 +1,34 @@ +export const jobMidCdMap: Record = { + 16: '기획·전략', + 14: '마케팅·홍보·조사', + 3: '회계·세무·재무', + 5: '인사·노무·HRD', + 4: '총무·법무·사무', + 2: 'IT개발·데이터', + 15: '디자인', + 8: '영업·판매·무역', + 21: '고객상담·TM', + 18: '구매·자재·물류', + 12: '상품기획·MD', + 7: '운전·운송·배송', + 10: '서비스', + 11: '생산', + 22: '건설·건축', + 6: '의료', + 9: '연구·R&D', + 19: '교육', + 13: '미디어·문화·스포츠', + 17: '금융·보험', + 20: '공공·복지', +}; + +export const locMcdMap: Record = { + '수도권': '101000,102000,108000', + '경상도': '110000,111000,104000,106000,107000', + '전라도': '112000,113000,103000', + '충청도': '115000,114000,105000,118000', + '강원도': '109000', + '제주도': '116000', +}; + +export const eduMap: Record = { 6: 1, 7: 2, 8: 3, 9: 4 }; From 2f70a5e73b49ce6c3ba7229f870770c1849739fa Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sun, 20 Apr 2025 00:53:22 +0900 Subject: [PATCH 05/13] =?UTF-8?q?move:#168=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/admin/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/api/admin/route.ts b/src/app/api/admin/route.ts index c6375ebab..6a9798730 100644 --- a/src/app/api/admin/route.ts +++ b/src/app/api/admin/route.ts @@ -2,7 +2,7 @@ import { ENV } from '@/constants/env-constants'; import { AUTH_MESSAGE, DB_MESSAGE, HISTORY_MESSAGE } from '@/constants/message-constants'; import { getToken } from 'next-auth/jwt'; import { NextRequest, NextResponse } from 'next/server'; -import { eduMap, jobMidCdMap, locMcdMap } from '@/constants/saramin-constants'; +import { eduMap, jobMidCdMap, locMcdMap } from '@/features/admin/data/saramin-constants'; import { prisma } from '@/lib/prisma'; import { JobPosting } from '@prisma/client'; From 21dc0773b63cd33e2e4f82d29ee994e881c91cb1 Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sun, 20 Apr 2025 00:53:38 +0900 Subject: [PATCH 06/13] =?UTF-8?q?feat:#168=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/admin/admin-button.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/features/admin/admin-button.tsx diff --git a/src/features/admin/admin-button.tsx b/src/features/admin/admin-button.tsx new file mode 100644 index 000000000..87f8a032f --- /dev/null +++ b/src/features/admin/admin-button.tsx @@ -0,0 +1,17 @@ +'use client'; + +import Button from '@/components/ui/button'; +import { postJobPostingDataToDatabase } from '@/features/admin/api/client-services'; + +const AdminButton = () => { + const handleOnClick = async () => { + await postJobPostingDataToDatabase(); + }; + return ( +
+ +
+ ); +}; + +export default AdminButton; From 23fa41614be39360a719cff5bca6a6387621282b Mon Sep 17 00:00:00 2001 From: choichangyeon Date: Sun, 20 Apr 2025 10:12:24 +0900 Subject: [PATCH 07/13] =?UTF-8?q?refactor:#168=20method=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/admin/route.ts | 16 +++++----------- src/features/admin/api/client-services.ts | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/app/api/admin/route.ts b/src/app/api/admin/route.ts index 6a9798730..50bdff6db 100644 --- a/src/app/api/admin/route.ts +++ b/src/app/api/admin/route.ts @@ -1,5 +1,5 @@ import { ENV } from '@/constants/env-constants'; -import { AUTH_MESSAGE, DB_MESSAGE, HISTORY_MESSAGE } from '@/constants/message-constants'; +import { AUTH_MESSAGE, DB_MESSAGE } from '@/constants/message-constants'; import { getToken } from 'next-auth/jwt'; import { NextRequest, NextResponse } from 'next/server'; import { eduMap, jobMidCdMap, locMcdMap } from '@/features/admin/data/saramin-constants'; @@ -7,7 +7,6 @@ import { prisma } from '@/lib/prisma'; import { JobPosting } from '@prisma/client'; const { - VALIDATION: { USER_ID_VALIDATION }, ERROR: { DB_SERVER_ERROR }, SUCCESS: { CREATE_SUCCESS }, } = DB_MESSAGE; @@ -15,9 +14,6 @@ const { ERROR: { EXPIRED_TOKEN }, } = AUTH_MESSAGE; const { NEXTAUTH_SECRET, SARAMIN_API_KEY } = ENV; -const { - VALIDATION: { QUERY_PARAMS_TYPE }, -} = HISTORY_MESSAGE; const URL = 'https://oapi.saramin.co.kr/job-search'; const COUNT = 100; @@ -25,13 +21,13 @@ const PAGE = '0'; const DEFAULT_EDU_CODE = 6; const LIMIT_EDU_LEVEL = 5; -type JobRecord = Omit; +type JobRecord = Omit; /** - * POST 요청 함수 + * PATCH 요청 함수 */ -export const POST = async (request: NextRequest) => { +export const PATCH = async (request: NextRequest) => { try { const token = await getToken({ req: request, secret: NEXTAUTH_SECRET }); if (!token) return NextResponse.json({ message: EXPIRED_TOKEN }, { status: 401 }); @@ -78,7 +74,7 @@ export const POST = async (request: NextRequest) => { await new Promise((_) => setTimeout(_, 300)); } } - + // TODO: DB 업데이트 로직 수정 await prisma.jobPosting.createMany({ data: allRecords.map((record) => ({ url: record.url, @@ -92,8 +88,6 @@ export const POST = async (request: NextRequest) => { requiredEducationName: record.requiredEducationName, openingTimestamp: Number(record.openingTimestamp), expirationTimestamp: Number(record.expirationTimestamp), - // TODO: 타입변경 적용 후 삭제 예정 - active: 0, })), skipDuplicates: true, }); diff --git a/src/features/admin/api/client-services.ts b/src/features/admin/api/client-services.ts index d3849c7d8..1d41418fe 100644 --- a/src/features/admin/api/client-services.ts +++ b/src/features/admin/api/client-services.ts @@ -3,7 +3,7 @@ import { ROUTE_HANDLER_PATH } from '@/constants/path-constant'; import { fetchWithSentry } from '@/utils/fetch-with-sentry'; const { ROOT } = ROUTE_HANDLER_PATH.ADMIN; -const { POST } = API_METHOD; +const { PATCH } = API_METHOD; /** * @@ -11,7 +11,7 @@ const { POST } = API_METHOD; */ export const postJobPostingDataToDatabase = async (): Promise => { const { response } = await fetchWithSentry(ROOT, { - method: POST, + method: PATCH, }); // TODO: 관리자에게 알리는 alert로 변경 From 7d049c854a4c72442dff822218f244bf1524df9e Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 25 Apr 2025 16:45:03 +0900 Subject: [PATCH 08/13] refactor:#168 prisma update --- prisma/schema.prisma | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a7d2c547e..6200af0a1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -147,6 +147,8 @@ model JobPosting { positionTitle String @map("position_title") companyName String @map("company_name") locationName String @map("location_name") + industryName String? @map("industry_name") + keyword String? @map("keyword") experienceCode Int @map("experience_code") experienceName String @map("experience_name") requiredEducationCode Int @map("required_education_code") @@ -157,7 +159,7 @@ model JobPosting { expirationTimestamp Int @map("expiration_timestamp") createdAt DateTime @default(now()) @map("created_at") - userSelectedJobs UserSelectedJob[] + userSelectedJobs UserSelectedJob[] @@map("job_posting") } From 7d34829f2bec539fa2fa7deaa8f11ac31011d770 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 25 Apr 2025 16:45:47 +0900 Subject: [PATCH 09/13] =?UTF-8?q?refactor:#168=20column=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/admin/route.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app/api/admin/route.ts b/src/app/api/admin/route.ts index 50bdff6db..1d628a440 100644 --- a/src/app/api/admin/route.ts +++ b/src/app/api/admin/route.ts @@ -37,7 +37,7 @@ export const PATCH = async (request: NextRequest) => { for (const [jobCdStr, _] of Object.entries(jobMidCdMap)) { for (const [_n, locCodes] of Object.entries(locMcdMap)) { const params = new URLSearchParams({ - 'access-key': SARAMIN_API_KEY, + 'access-key': SARAMIN_API_KEY as string, loc_mcd: locCodes, job_mid_cd: jobCdStr, start: PAGE, @@ -61,6 +61,8 @@ export const PATCH = async (request: NextRequest) => { companyName: job.company?.detail?.name as string, positionTitle: pos.title as string, locationName: pos.location?.name as string, + industryName: pos.industry?.name as string, + keyword: job.keyword as string, jobMidCodeName: pos['job-mid-code']?.name as string, experienceCode: Number(pos['experience-level']?.code), experienceName: pos['experience-level']?.name as string, @@ -74,13 +76,19 @@ export const PATCH = async (request: NextRequest) => { await new Promise((_) => setTimeout(_, 300)); } } - // TODO: DB 업데이트 로직 수정 + + // 기존 jobPosting 데이터 전부 삭제 + await prisma.jobPosting.deleteMany({}); + + // 새 데이터 삽입 await prisma.jobPosting.createMany({ data: allRecords.map((record) => ({ url: record.url, companyName: record.companyName, positionTitle: record.positionTitle, locationName: record.locationName, + industryName: record.industryName, + keyword: record.keyword, jobMidCodeName: record.jobMidCodeName, experienceCode: record.experienceCode, experienceName: record.experienceName, From 6f3be0f945af5fdf54859f64510bdd7ea4ea6f37 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 25 Apr 2025 16:46:32 +0900 Subject: [PATCH 10/13] =?UTF-8?q?feat:#168=20admin=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(with-nav)/(with-header)/admin/page.tsx | 13 +++++++++++++ src/features/admin/admin-button.tsx | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/app/(with-nav)/(with-header)/admin/page.tsx diff --git a/src/app/(with-nav)/(with-header)/admin/page.tsx b/src/app/(with-nav)/(with-header)/admin/page.tsx new file mode 100644 index 000000000..9319f1ffb --- /dev/null +++ b/src/app/(with-nav)/(with-header)/admin/page.tsx @@ -0,0 +1,13 @@ +import AdminButton from '@/features/admin/admin-button'; +import React from 'react'; + +const AdminPage = () => { + return ( + <> +
AdminPage
+ + + ); +}; + +export default AdminPage; diff --git a/src/features/admin/admin-button.tsx b/src/features/admin/admin-button.tsx index 87f8a032f..ff6cf2647 100644 --- a/src/features/admin/admin-button.tsx +++ b/src/features/admin/admin-button.tsx @@ -9,7 +9,7 @@ const AdminButton = () => { }; return (
- +
); }; From c66af01940e856ff5e68fa0b3cb0c6d70cd777ce Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 25 Apr 2025 16:47:30 +0900 Subject: [PATCH 11/13] =?UTF-8?q?chore:#168=20admin=20character=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/character/card/admin-character.png | Bin 0 -> 53607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/assets/character/card/admin-character.png diff --git a/public/assets/character/card/admin-character.png b/public/assets/character/card/admin-character.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7e71559284becabfa9943db894a3caa2cd0236 GIT binary patch literal 53607 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­w?ODm${HT#c4z`yz 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
szch7&yA)S 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%0D@wKdm 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 Q?f?J)07*qoM6N<$f`CYAj{pDw literal 0 HcmV?d00001 From 8dd94b289596f10cc227b5aeefb54bdf091f098b Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 25 Apr 2025 17:50:22 +0900 Subject: [PATCH 12/13] =?UTF-8?q?refactor:#168=20alert=20->=20notify?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/admin/api/client-services.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/admin/api/client-services.ts b/src/features/admin/api/client-services.ts index 1d41418fe..e0ee373a9 100644 --- a/src/features/admin/api/client-services.ts +++ b/src/features/admin/api/client-services.ts @@ -1,6 +1,7 @@ import { API_METHOD } from '@/constants/api-method-constants'; import { ROUTE_HANDLER_PATH } from '@/constants/path-constant'; import { fetchWithSentry } from '@/utils/fetch-with-sentry'; +import { Notify } from 'notiflix'; const { ROOT } = ROUTE_HANDLER_PATH.ADMIN; const { PATCH } = API_METHOD; @@ -14,6 +15,5 @@ export const postJobPostingDataToDatabase = async (): Promise => { method: PATCH, }); - // TODO: 관리자에게 알리는 alert로 변경 - alert(response.message); + Notify.success(response.message); }; From b0f4092c67ae84333cae3b595966c42439d9fa7b Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 25 Apr 2025 17:54:24 +0900 Subject: [PATCH 13/13] =?UTF-8?q?refactor:#168=20=EA=B2=BD=EA=B3=A0=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(with-nav)/(with-header)/admin/page.tsx | 56 +++++++++++++++++-- src/features/admin/admin-button.tsx | 10 +++- 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/app/(with-nav)/(with-header)/admin/page.tsx b/src/app/(with-nav)/(with-header)/admin/page.tsx index 9319f1ffb..7391ee3e8 100644 --- a/src/app/(with-nav)/(with-header)/admin/page.tsx +++ b/src/app/(with-nav)/(with-header)/admin/page.tsx @@ -1,12 +1,58 @@ +'use client'; + import AdminButton from '@/features/admin/admin-button'; -import React from 'react'; +import Image from 'next/image'; +import { useState } from 'react'; const AdminPage = () => { + const [hovered, setHovered] = useState(false); + return ( - <> -
AdminPage
- - +
+
setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + +
+ 레옹병아리 +
+
+
+ +
+

일주일에 한번만 눌러라 마!

+

안 그럼 총 맞는다!

+
+
); }; diff --git a/src/features/admin/admin-button.tsx b/src/features/admin/admin-button.tsx index ff6cf2647..992afee8a 100644 --- a/src/features/admin/admin-button.tsx +++ b/src/features/admin/admin-button.tsx @@ -2,10 +2,16 @@ import Button from '@/components/ui/button'; import { postJobPostingDataToDatabase } from '@/features/admin/api/client-services'; +import { showNotiflixConfirm } from '@/utils/show-notiflix-confirm'; const AdminButton = () => { - const handleOnClick = async () => { - await postJobPostingDataToDatabase(); + const handleOnClick = () => { + showNotiflixConfirm({ + message: '이번 업데이트 차례가 당신이 맞습니까? 진짜로??', + okFunction: async () => { + await postJobPostingDataToDatabase(); + }, + }); }; return (