@@ -57,15 +57,16 @@ type TeamMatchingResponse = {
5757 matchedCount : number
5858 unmatchedCount : number
5959 teamSize : number
60- teamCount : number
61- teams : Array < {
62- teamNumber : number
63- members : Array < {
64- name : string
65- studentId : string
66- mbtiType : string
60+ teamCount : number
61+ teams : Array < {
62+ teamNumber : number
63+ members : Array < {
64+ name : string
65+ studentId : string
66+ mbtiType : string | null
67+ hasMbtiResult : boolean
68+ } >
6769 } >
68- } >
6970 unmatchedCandidates : Array < {
7071 name : string
7172 studentId : string
@@ -160,7 +161,7 @@ export default function DashboardMbtiPage() {
160161
161162 const [ typeCounts , setTypeCounts ] = useState < Array < { mbtiType : string ; count : number } > > ( [ ] )
162163
163- const [ teamSize , setTeamSize ] = useState ( 4 )
164+ const teamSize = 6
164165 const [ csvCandidates , setCsvCandidates ] = useState < CsvCandidate [ ] > ( [ ] )
165166 const [ csvFileName , setCsvFileName ] = useState ( '' )
166167 const [ matchingLoading , setMatchingLoading ] = useState ( false )
@@ -426,7 +427,7 @@ export default function DashboardMbtiPage() {
426427 < div className = "rounded-xl border border-white/10 bg-black p-4" >
427428 < h2 className = "typo-pc-h4" > CSV 기반 팀 매칭</ h2 >
428429 < p className = "mt-1 typo-pc-c2 text-gray-700" >
429- 이름, 학번 CSV를 업로드하면 저장된 MBTI 결과와 매칭해 팀을 자동 분배합니다.
430+ 이름, 입학년도 2자리 CSV를 업로드하면 저장된 MBTI 결과와 매칭해 팀을 자동 분배합니다.
430431 </ p >
431432
432433 < div className = "mt-4 grid gap-3 pc:grid-cols-[1fr_auto_auto] pc:items-center" >
@@ -444,21 +445,9 @@ export default function DashboardMbtiPage() {
444445 { csvFileName || 'CSV 파일 선택' }
445446 </ label >
446447
447- < label className = "flex items-center gap-2 typo-pc-c2" >
448- 팀 인원
449- < input
450- type = "number"
451- min = { 2 }
452- max = { 10 }
453- value = { teamSize }
454- onChange = { ( event ) => {
455- const value = Number ( event . target . value )
456- if ( Number . isNaN ( value ) ) return
457- setTeamSize ( Math . min ( 10 , Math . max ( 2 , value ) ) )
458- } }
459- className = "h-11 w-20 rounded-lg border border-gray-300 bg-gray-100 px-3 text-white outline-none focus:border-white"
460- />
461- </ label >
448+ < div className = "flex h-11 items-center rounded-lg border border-white/10 bg-gray-100/30 px-4 typo-pc-c2 text-gray-700" >
449+ 팀 인원 6명 고정
450+ </ div >
462451
463452 < button
464453 type = "button"
@@ -471,6 +460,10 @@ export default function DashboardMbtiPage() {
471460
472461 < div className = "mt-3 rounded-lg border border-white/10 bg-gray-100/30 p-3 typo-pc-c2 text-gray-700" >
473462 CSV 후보 인원: { csvCandidates . length } 명
463+ < br />
464+ 학번은 `22`, `23`처럼 입학년도 2자리 기준으로 비교합니다.
465+ < br />
466+ MBTI 참여자와 미참여자가 팀마다 최대한 고르게 섞이도록 6명씩 편성합니다.
474467 </ div >
475468
476469 { matchingError ? (
@@ -491,11 +484,11 @@ export default function DashboardMbtiPage() {
491484 < p className = "typo-pc-h4 text-white" > { matchingResult . uniqueCandidates } </ p >
492485 </ div >
493486 < div className = "rounded-lg border border-white/10 bg-gray-100/30 p-3" >
494- < p className = "typo-pc-c2 text-gray-700" > 매칭 성공 </ p >
487+ < p className = "typo-pc-c2 text-gray-700" > 팀 편성 인원 </ p >
495488 < p className = "typo-pc-h4 text-white" > { matchingResult . matchedCount } </ p >
496489 </ div >
497490 < div className = "rounded-lg border border-white/10 bg-gray-100/30 p-3" >
498- < p className = "typo-pc-c2 text-gray-700" > 결과 없음 </ p >
491+ < p className = "typo-pc-c2 text-gray-700" > 편성 제외 </ p >
499492 < p className = "typo-pc-h4 text-white" > { matchingResult . unmatchedCount } </ p >
500493 </ div >
501494 </ div >
@@ -514,7 +507,7 @@ export default function DashboardMbtiPage() {
514507 { member . name } ({ member . studentId } )
515508 </ span >
516509 < span className = "rounded-full border border-white/20 px-2 py-1 typo-pc-c2" >
517- { member . mbtiType }
510+ { member . hasMbtiResult ? member . mbtiType : 'MBTI 미참여' }
518511 </ span >
519512 </ li >
520513 ) ) }
0 commit comments