From e15f62850174c3bd3cebde210fd2393ea282e615 Mon Sep 17 00:00:00 2001 From: soyeong Date: Tue, 8 Sep 2026 21:42:00 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20HostBadge=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20UserProfi?= =?UTF-8?q?le=EC=97=90=20=EC=A3=BC=EC=B5=9C=EC=9E=90=20=EB=B0=B0=EC=A7=80?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/assets/images/host-badge.svg | 4 ++++ .../web/src/components/common/host-badge/index.tsx | 7 +++++++ .../components/user-profile-group/UserProfile.tsx | 14 +++++++++++++- .../user-profile-group/userProfile.types.ts | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 apps/web/src/assets/images/host-badge.svg create mode 100644 apps/web/src/components/common/host-badge/index.tsx diff --git a/apps/web/src/assets/images/host-badge.svg b/apps/web/src/assets/images/host-badge.svg new file mode 100644 index 00000000..95f3e27f --- /dev/null +++ b/apps/web/src/assets/images/host-badge.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/src/components/common/host-badge/index.tsx b/apps/web/src/components/common/host-badge/index.tsx new file mode 100644 index 00000000..0d362606 --- /dev/null +++ b/apps/web/src/components/common/host-badge/index.tsx @@ -0,0 +1,7 @@ +import HostBadgeSvg from '@/assets/images/host-badge.svg'; + +function HostBadge() { + return ; +} + +export default HostBadge; diff --git a/apps/web/src/components/user-profile-group/UserProfile.tsx b/apps/web/src/components/user-profile-group/UserProfile.tsx index 87cddad9..01e1a946 100644 --- a/apps/web/src/components/user-profile-group/UserProfile.tsx +++ b/apps/web/src/components/user-profile-group/UserProfile.tsx @@ -1,5 +1,6 @@ import Image from 'next/image'; +import HostBadge from '@/components/common/host-badge'; import { cn } from '@/utils/cn'; import type { UserT } from './userProfile.types'; @@ -10,7 +11,7 @@ type UserProfileProps = { }; function UserProfile({ user, className }: UserProfileProps) { - return ( + const profileImage = ( ); + + if (!user.isHost) return profileImage; + + return ( + + {profileImage} + + + + + ); } export default UserProfile; diff --git a/apps/web/src/components/user-profile-group/userProfile.types.ts b/apps/web/src/components/user-profile-group/userProfile.types.ts index 9e8016fe..a348feaf 100644 --- a/apps/web/src/components/user-profile-group/userProfile.types.ts +++ b/apps/web/src/components/user-profile-group/userProfile.types.ts @@ -2,4 +2,5 @@ export type UserT = { id: string; name: string; imageUrl: string; + isHost?: boolean; }; From a4d378b2bbf5f1b9cad049b64c59778a3ef28728 Mon Sep 17 00:00:00 2001 From: soyeong Date: Tue, 8 Sep 2026 21:42:18 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EC=B0=B8=EA=B0=80=EC=9E=90=20isHos?= =?UTF-8?q?t=20=ED=83=80=EC=9E=85=20=EB=B0=98=EC=98=81=20=EB=B0=8F=20Tourn?= =?UTF-8?q?amentCreateClient=20=EC=A0=95=EB=A0=AC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/e2e/mocks/tournament.ts | 1 + .../src/app/tournament/[id]/_common/_types/tournamentResponse.ts | 1 + .../[id]/create/_components/TournamentCreateClient.tsx | 1 + apps/web/src/app/tournament/[id]/result/_types/groupResult.ts | 1 + 4 files changed, 4 insertions(+) diff --git a/apps/web/e2e/mocks/tournament.ts b/apps/web/e2e/mocks/tournament.ts index 9285ef7b..2b8d1138 100644 --- a/apps/web/e2e/mocks/tournament.ts +++ b/apps/web/e2e/mocks/tournament.ts @@ -87,6 +87,7 @@ export const MOCK_TOURNAMENT_PENDING: GetTournamentPendingResponseT = { nickname: '피키게스트', itemCount: 0, profileImage: MOCK_IMAGE_URLS.avatar, + isHost: true, }, ], }, diff --git a/apps/web/src/app/tournament/[id]/_common/_types/tournamentResponse.ts b/apps/web/src/app/tournament/[id]/_common/_types/tournamentResponse.ts index f35b56c7..6107042a 100644 --- a/apps/web/src/app/tournament/[id]/_common/_types/tournamentResponse.ts +++ b/apps/web/src/app/tournament/[id]/_common/_types/tournamentResponse.ts @@ -10,6 +10,7 @@ type TournamentParticipantT = { nickname: string; itemCount: number; profileImage: string; + isHost: boolean; }; /** 서버가 브래킷에서 파생해 내려주는 대결 한 판 */ diff --git a/apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx b/apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx index ebfde351..2bdf9f89 100644 --- a/apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx +++ b/apps/web/src/app/tournament/[id]/create/_components/TournamentCreateClient.tsx @@ -97,6 +97,7 @@ function TournamentCreateClient({ tournamentId }: TournamentCreateClientProps) { id: p.userId, name: p.nickname, imageUrl: p.profileImage, + isHost: p.isHost, }, itemCount: p.itemCount, })); diff --git a/apps/web/src/app/tournament/[id]/result/_types/groupResult.ts b/apps/web/src/app/tournament/[id]/result/_types/groupResult.ts index 124f5978..5bd3ddfa 100644 --- a/apps/web/src/app/tournament/[id]/result/_types/groupResult.ts +++ b/apps/web/src/app/tournament/[id]/result/_types/groupResult.ts @@ -2,6 +2,7 @@ type GroupResultParticipantT = { userId: string; nickname: string; profileImage: string; + isHost: boolean; }; export type GroupResultItemT = { From 1d662726b21cbb29dfc9cf4bcc8ac7866868ec9b Mon Sep 17 00:00:00 2001 From: soyeong Date: Tue, 8 Sep 2026 21:42:28 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EB=8B=B4=EA=B8=B0=20=EB=B0=B0?= =?UTF-8?q?=EB=84=88=20=EC=B9=A9=C2=B7=EC=98=81=EC=88=98=EC=A6=9D=20?= =?UTF-8?q?=ED=99=95=EC=9E=A5=20=EB=AA=A9=EB=A1=9D=EC=97=90=20=EC=A3=BC?= =?UTF-8?q?=EC=B5=9C=EC=9E=90=20=EB=B0=B0=EC=A7=80=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../participant-panel/ParticipantChip.tsx | 3 ++- .../group/_components/GroupResultClient.tsx | 26 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/apps/web/src/app/tournament/[id]/create/_components/participant-panel/ParticipantChip.tsx b/apps/web/src/app/tournament/[id]/create/_components/participant-panel/ParticipantChip.tsx index 577bb807..9c6d7d5e 100644 --- a/apps/web/src/app/tournament/[id]/create/_components/participant-panel/ParticipantChip.tsx +++ b/apps/web/src/app/tournament/[id]/create/_components/participant-panel/ParticipantChip.tsx @@ -1,6 +1,7 @@ import UserProfile from '@/components/user-profile-group/UserProfile'; import type { UserT } from '@/components/user-profile-group/userProfile.types'; import { useGetMe } from '@/hooks/useGetMe'; +import { cn } from '@/utils/cn'; type ParticipantChipProps = { user: UserT; @@ -14,7 +15,7 @@ function ParticipantChip({ user, itemCount }: ParticipantChipProps) { return ( - {isMe ? '나' : user.name} + {isMe ? '나' : user.name} {itemCount}개 ); diff --git a/apps/web/src/app/tournament/[id]/result/group/_components/GroupResultClient.tsx b/apps/web/src/app/tournament/[id]/result/group/_components/GroupResultClient.tsx index e9c6e1a2..95960664 100644 --- a/apps/web/src/app/tournament/[id]/result/group/_components/GroupResultClient.tsx +++ b/apps/web/src/app/tournament/[id]/result/group/_components/GroupResultClient.tsx @@ -13,6 +13,7 @@ import { import PikiLogo from '@/assets/images/piki-logo-cart.svg'; import ReceiptZigzag from '@/assets/images/tournament/result/receipt-zigzag.svg'; import TrophyBadge from '@/assets/images/tournament/result/trophy-badge.svg'; +import HostBadge from '@/components/common/host-badge'; import Spinner from '@/components/spinner'; import { ROUTES } from '@/consts/route'; import { useBackWithFallback } from '@/hooks/useBackWithFallback'; @@ -283,15 +284,22 @@ function GroupProductCard({ item, highlight = false }: GroupProductCardProps) { key={chooser.userId} className="flex items-center gap-1.5 rounded-full bg-gray-50 py-1 pr-3 pl-1" > - {chooser.nickname} - + + {chooser.nickname} + {chooser.isHost && ( + + + + )} + + {chooser.nickname}