From e19541e086532651e49612968e40bbfe1fc3f1b5 Mon Sep 17 00:00:00 2001 From: whitecity01 Date: Wed, 26 Nov 2025 17:12:00 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20=EB=8B=B9=EA=B7=BC=20=EC=9D=B4?= =?UTF-8?q?=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 --- src/assets/commons/carrot.png | Bin 0 -> 9150 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/commons/carrot.png diff --git a/src/assets/commons/carrot.png b/src/assets/commons/carrot.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1c5522c9ceaf1b8539fe033101d799cb3be8bd GIT binary patch literal 9150 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 IM6N<$g84-_ Date: Wed, 26 Nov 2025 17:12:18 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=EC=97=90=20=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/home/Profile.jsx | 23 ++++++++++++--- src/constants/api.js | 3 +- src/services/auth/auth.js | 5 ++++ src/styles/components/home/Profile.scss | 38 +++++++++++++++++++------ 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/src/components/home/Profile.jsx b/src/components/home/Profile.jsx index ec6f3677..0b89777e 100644 --- a/src/components/home/Profile.jsx +++ b/src/components/home/Profile.jsx @@ -1,10 +1,21 @@ -import rabbit from "assets/rabbit-sample.png"; -import useUserInformationStore from "store/userInformation"; -import "styles/components/home/Profile.scss"; +import carrot from 'assets/commons/carrot.png'; +import { signOutAPI } from 'services/auth/auth'; +import useUserInformationStore from 'store/userInformation'; +import 'styles/components/home/Profile.scss'; const Profile = () => { const profile = useUserInformationStore((state) => state.profile); const experience = useUserInformationStore((state) => state.experience); + + const signOutHandler = async () => { + try { + await signOutAPI(); + window.location.reload(); + } catch (e) { + console.error(e); + } + }; + return (
@@ -20,7 +31,7 @@ const Profile = () => {
- 프로필 사진 + 프로필 사진
@@ -32,6 +43,10 @@ const Profile = () => {
+ +
); }; diff --git a/src/constants/api.js b/src/constants/api.js index 56be9cc4..4f4903ac 100644 --- a/src/constants/api.js +++ b/src/constants/api.js @@ -9,6 +9,7 @@ export const GUEST_SIGN_IN_API = process.env.REACT_APP_GUEST_SIGN_IN_API; export const GUEST_SIGN_UP_API = process.env.REACT_APP_GUEST_SIGN_UP_API; export const TOKEN_REISSUE_API = process.env.REACT_APP_TOKEN_REISSUE_API; export const CSRF_TOKEN_API = process.env.REACT_APP_CSRF_TOKEN_API; +export const SIGN_OUT_API = process.env.REACT_APP_SIGN_OUT_API; export const EMAIL_SEND_API = process.env.REACT_APP_EMAIL_SEND_API; export const EMAIL_VERIFY_API = process.env.REACT_APP_EMAIL_VERIFY_API; @@ -78,4 +79,4 @@ export const SERVICE_QNA_API = process.env.REACT_APP_SERVICE_QNA; export const RANKING_API = process.env.REACT_APP_RANKING_API; export const RANkING_MY_API = process.env.REACT_APP_MY_RANKING_API; -export const AI_SERVER_IP = process.env.REACT_APP_AI_SERVER_IP; \ No newline at end of file +export const AI_SERVER_IP = process.env.REACT_APP_AI_SERVER_IP; diff --git a/src/services/auth/auth.js b/src/services/auth/auth.js index 582a806b..fe7421fe 100644 --- a/src/services/auth/auth.js +++ b/src/services/auth/auth.js @@ -4,6 +4,7 @@ import { EMAIL_VERIFY_API, GUEST_SIGN_IN_API, SIGN_IN_API, + SIGN_OUT_API, SIGN_UP_API, TOKEN_REISSUE_API, } from 'constants/api'; @@ -17,6 +18,10 @@ export const signInAPI = async (authForm) => { return await apiInterface('post', SIGN_IN_API, authForm, {}, false); }; +export const signOutAPI = async () => { + return await apiInterface('get', SIGN_OUT_API, {}, {}, true); +}; + export const guestSignInAPI = async () => { return await apiInterface('post', GUEST_SIGN_IN_API, {}, {}, false); }; diff --git a/src/styles/components/home/Profile.scss b/src/styles/components/home/Profile.scss index 1a48ac80..09dd6ce1 100644 --- a/src/styles/components/home/Profile.scss +++ b/src/styles/components/home/Profile.scss @@ -1,4 +1,5 @@ .profile-container { + position: relative; width: 255px; height: 122px; @@ -46,7 +47,7 @@ left: 50%; top: 50%; transform: translate(-50%, -50%); - font-family: "SUIT-Regular"; + font-family: 'SUIT-Regular'; font-size: 13px; } } @@ -58,15 +59,20 @@ .profile-img-container { position: relative; + display: flex; + align-items: center; + justify-content: center; width: 67px; height: 67px; - border: solid 1px; - background-color: #d9d9d9; + //border: solid 1px; + border-radius: 8px; + + background-color: #f28110; overflow: hidden; img { - width: 67px; - height: 67px; + width: 30.67px; + height: 35.21px; } } @@ -76,14 +82,14 @@ align-items: center; justify-content: center; - width: 149px; + width: 129px; - font-family: "YoonChild"; + font-family: 'YoonChild'; .profile-detail { display: flex; flex-direction: column; - align-items: center; + align-items: start; justify-content: center; width: 92px; @@ -103,7 +109,7 @@ align-items: center; font-size: 15px; font-weight: 600; - font-family: "YoonChild"; + font-family: 'YoonChild'; } .left-strip { @@ -117,4 +123,18 @@ } } } + + .sign-out-btn { + position: absolute; + bottom: 5px; + right: 10px; + background: none; + border: none; + + font-size: 10.5px; + + &:hover { + color: red; + } + } }