Skip to content

Commit ca6bd8d

Browse files
authored
Merge pull request #69 from Stack-Knowledge/hotfix/QA1
[QA] 1
2 parents 1abec63 + 59363f5 commit ca6bd8d

File tree

15 files changed

+135
-36
lines changed

15 files changed

+135
-36
lines changed

packages/api/common/src/libs/api/instance.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ apiInstance.interceptors.response.use(
3232
async (error) => {
3333
if (
3434
error.config.url === authUrl.auth() &&
35-
(error.response.status === 404 || error.response.status === 403)
35+
[403, 404].includes(error.response.status)
3636
) {
3737
location.replace('/auth/login');
3838

packages/common/src/components/MainContents/style.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ export const Contents = styled.div`
2424
padding: 2.375rem 2.5rem;
2525
gap: 3rem;
2626
overflow-x: scroll;
27-
&::-webkit-scrollbar {
28-
display: none;
29-
}
3027
3128
.medalWrapper:nth-of-type(1n) .medal {
3229
background-color: #ffd79b;

packages/common/src/components/RankingCard/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const RankingCard: React.FC<RankingCardType> = ({
1717
cumulatePoint,
1818
user: { profileImage, name },
1919
}) => (
20-
<S.CardWrapper className='medalWrapper'>
20+
<S.CardWrapper href={'/ranking'} className='medalWrapper'>
2121
{rank <= 3 && <S.Medal className='medal'>{rank}</S.Medal>}
2222
<S.ProfileWrapper>
2323
<Image

packages/common/src/components/RankingCard/style.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import styled from '@emotion/styled';
22

3-
export const CardWrapper = styled.div`
3+
import Link from 'next/link';
4+
5+
export const CardWrapper = styled(Link)`
46
width: 14rem;
57
height: 19rem;
68
border-radius: 1.25rem;

projects/admin/src/components/Modal/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ const Modal: React.FC<ModalProps> = ({ content, onClick }) => (
1212
<S.ModalContent>{content}</S.ModalContent>
1313
</S.ModalContentWrapper>
1414
<S.ModalButtonWrapper method='dialog'>
15-
<S.ModalDeleted>취소</S.ModalDeleted>
16-
<S.ModalConfirm onClick={onClick}>확인</S.ModalConfirm>
15+
<S.ModalButton>취소</S.ModalButton>
16+
<S.ModalButton onClick={onClick}>확인</S.ModalButton>
1717
</S.ModalButtonWrapper>
1818
</S.ModalWrapper>
1919
);

projects/admin/src/components/Modal/style.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,19 @@ export const Button = styled.button`
3232
${({ theme }) => theme.typo.body2};
3333
width: 7.25rem;
3434
border-radius: 0.625rem;
35-
margin-right: 0.5rem;
3635
padding: 0.625rem;
3736
cursor: pointer;
3837
`;
3938

40-
export const ModalDeleted = styled(Button)`
41-
background-color: ${({ theme }) => theme.color.primary};
42-
color: ${({ theme }) => theme.color.white};
43-
border: 0;
44-
cursor: pointer;
45-
`;
46-
47-
export const ModalConfirm = styled(Button)`
39+
export const ModalButton = styled(Button)`
4840
background-color: ${({ theme }) => theme.color.white};
4941
border: 0.0625rem solid ${({ theme }) => theme.color.primary};
5042
color: ${({ theme }) => theme.color.primary};
43+
cursor: pointer;
44+
45+
&:hover {
46+
background-color: ${({ theme }) => theme.color.primary};
47+
color: ${({ theme }) => theme.color.white};
48+
border: 0;
49+
}
5150
`;

projects/client/public/favicon.png

2.11 KB
Loading

projects/client/src/PageContainer/MissionDetailPage/index.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { useEffect, useRef, useState } from 'react';
1313

1414
import { useRouter } from 'next/navigation';
1515

16+
import { toast } from 'react-toastify';
17+
1618
interface MissionDetailProps {
1719
missionId: string;
1820
}
@@ -57,17 +59,25 @@ const MissionDetailPage: React.FC<MissionDetailProps> = ({ missionId }) => {
5759
mutate({
5860
solvation: inputValue,
5961
});
60-
push(`/`);
61-
alert('문제를 제출하였습니다.');
6262
};
6363

64-
const { mutate } = usePostSolve(missionId);
64+
const { mutate, isSuccess, isError } = usePostSolve(missionId);
6565

6666
useEffect(() => {
6767
setMinutes(Math.floor((data?.timeLimit ?? 0) / 60));
6868
setSeconds((data?.timeLimit ?? 0) % 60);
6969
}, [data]);
7070

71+
if (isSuccess) {
72+
push(`/`);
73+
toast.success('문제를 제출하였습니다.');
74+
}
75+
76+
if (isError) {
77+
push(`/`);
78+
toast.error('이미 푼 문제입니다.');
79+
}
80+
7181
return (
7282
<S.PageWrapper>
7383
{data && (

projects/client/src/app/layout.tsx

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,49 @@ import { Header } from 'common';
88
import Providers from './providers';
99

1010
export const metadata: Metadata = {
11-
title: 'Stack Knowledge',
12-
description: 'Stack Knowledge',
11+
applicationName: 'StackKnowledge',
12+
keywords: [
13+
'Stack Knowledge',
14+
'Stack',
15+
'Knowledge',
16+
'광주소프트웨어마이스터고등학교',
17+
'광주소프트웨어마이스터고',
18+
'광소마',
19+
'광주',
20+
'소프트웨어',
21+
'마이스터고',
22+
'마이스터고등학교',
23+
'GSM',
24+
'GwangjuSoftwareMeisterHighSchool',
25+
'SoftWare',
26+
'학습',
27+
],
28+
creator: 'StackKnowledge',
29+
publisher: 'StackKnowledge',
30+
description: '학습 장려 게임화 플랫폼입니다.',
31+
title: {
32+
template: 'StackKnowledge - %s',
33+
default: 'StackKnowledge',
34+
},
35+
openGraph: {
36+
title: 'StackKnowledge',
37+
description: '학습 장려 게임화 플랫폼입니다.',
38+
url: 'https://stack-knowledge-client.vercel.app/',
39+
siteName: 'StackKnowledge',
40+
images: [
41+
{
42+
url: '/favicon.png',
43+
width: 800,
44+
height: 800,
45+
},
46+
],
47+
locale: 'ko',
48+
type: 'website',
49+
},
50+
icons: {
51+
icon: '/favicon.png',
52+
},
1353
};
14-
1554
export default function RootLayout({
1655
children,
1756
}: {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
import { MissionListPage } from 'client/PageContainer';
22

3+
import { Metadata } from 'next';
4+
5+
export const metadata: Metadata = {
6+
description: 'StackKnowledge 문제 목록 페이지입니다.',
7+
title: { absolute: '문제 목록' },
8+
openGraph: {
9+
title: '문제 목록',
10+
description: 'StackKnowledge 문제 목록 페이지입니다.',
11+
url: 'https://stack-knowledge-client.vercel.app/mission/list/',
12+
},
13+
};
14+
315
export default function MissionDetail() {
416
return <MissionListPage />;
517
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
import { MissionDetailPage } from 'client/PageContainer';
22

3+
import { useGetMissionDetail } from 'api/common';
4+
5+
import { Metadata } from 'next';
6+
37
interface SolveProps {
48
params: { missionId: string };
59
}
610

11+
export const generateMetadata = async ({
12+
params: { missionId },
13+
}: SolveProps): Promise<Metadata> => {
14+
return {
15+
title: { absolute: '문제 풀이' },
16+
description: 'StackKnowledge 문제 풀이 페이지입니다.',
17+
openGraph: {
18+
title: '문제 풀이',
19+
description: 'StackKnowledge 문제 풀이 페이지입니다.',
20+
url: `https://stack-knowledge-client.vercel.app/mission/resolve/${missionId}`,
21+
},
22+
};
23+
};
24+
725
export default function SolvePage({ params: { missionId } }: SolveProps) {
826
return <MissionDetailPage missionId={missionId} />;
927
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
import { RankingPage } from 'client/PageContainer';
22

3+
import { Metadata } from 'next';
4+
5+
export const metadata: Metadata = {
6+
description: 'StackKnowledge 랭킹 페이지입니다.',
7+
title: { absolute: '랭킹' },
8+
openGraph: {
9+
title: '랭킹',
10+
description: 'StackKnowledge 랭킹 페이지입니다.',
11+
url: 'https://stack-knowledge-client.vercel.app/ranking/',
12+
},
13+
};
14+
315
export default function Ranking() {
416
return <RankingPage />;
517
}

projects/client/src/app/shop/page.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
import { ShopPage } from 'client/PageContainer';
22

3+
import { Metadata } from 'next';
4+
5+
export const metadata: Metadata = {
6+
description: 'StackKnowledge 상점 페이지입니다.',
7+
title: { absolute: '상점' },
8+
openGraph: {
9+
title: '상점',
10+
description: 'StackKnowledge 상점 페이지입니다.',
11+
url: 'https://stack-knowledge-client.vercel.app/shop/',
12+
},
13+
};
14+
315
export default function Shop() {
416
return <ShopPage />;
517
}

projects/client/src/components/MissionDetailModal/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ const MissionDetailModal: React.FC<MissionDetailModalProps> = ({
1515
<S.ModalContent>문제를 제출하시겠습니까?</S.ModalContent>
1616
</S.ModalContentWrapper>
1717
<S.ModalButtonWrapper method='dialog'>
18-
<S.ModalDeleted onClick={onCancel}>취소</S.ModalDeleted>
19-
<S.ModalConfirm onClick={onConfirm}>확인</S.ModalConfirm>
18+
<S.ModalButton onClick={onCancel}>취소</S.ModalButton>
19+
<S.ModalButton onClick={onConfirm}>확인</S.ModalButton>
2020
</S.ModalButtonWrapper>
2121
</S.ModalWrapper>
2222
);

projects/client/src/components/MissionDetailModal/style.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,23 @@ export const ModalButtonWrapper = styled.form`
2828
gap: 1rem;
2929
`;
3030

31-
export const ModalDeleted = styled.button`
32-
background-color: ${({ theme }) => theme.color.primary};
33-
color: ${({ theme }) => theme.color.white};
31+
export const Button = styled.button`
3432
${({ theme }) => theme.typo.body2};
3533
width: 7.25rem;
3634
border-radius: 0.625rem;
37-
border: 0;
3835
padding: 0.625rem;
39-
margin-left: 0.5rem;
4036
cursor: pointer;
4137
`;
42-
export const ModalConfirm = styled.button`
38+
39+
export const ModalButton = styled(Button)`
4340
background-color: ${({ theme }) => theme.color.white};
4441
border: 0.0625rem solid ${({ theme }) => theme.color.primary};
4542
color: ${({ theme }) => theme.color.primary};
46-
${({ theme }) => theme.typo.body2};
47-
width: 7.25rem;
48-
border-radius: 0.625rem;
49-
padding: 0.625rem;
50-
margin-right: 0.5rem;
5143
cursor: pointer;
44+
45+
&:hover {
46+
background-color: ${({ theme }) => theme.color.primary};
47+
color: ${({ theme }) => theme.color.white};
48+
border: 0;
49+
}
5250
`;

0 commit comments

Comments
 (0)