From 40a330ff8a791e90d3b1cd93830bb1ea77942aa0 Mon Sep 17 00:00:00 2001 From: lilyyang0077 Date: Thu, 18 Jun 2026 18:10:50 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=EC=9A=94=EC=9D=BC=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=90=98=EB=8A=94=20=EA=B2=83=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?&=20=ED=99=94=EB=AA=A9=ED=86=A0=20=EC=A0=95=EB=A0=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assignment/service/AssignmentService.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/example/Piroin/project/domain/assignment/service/AssignmentService.java b/backend/src/main/java/com/example/Piroin/project/domain/assignment/service/AssignmentService.java index 54505dd..6a7e818 100644 --- a/backend/src/main/java/com/example/Piroin/project/domain/assignment/service/AssignmentService.java +++ b/backend/src/main/java/com/example/Piroin/project/domain/assignment/service/AssignmentService.java @@ -30,6 +30,7 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; @Service @@ -248,17 +249,21 @@ public StudentWeeklyStatusResponse getStudentWeeklyStatus( List sessions = curriculumRepository.findByWeek(week); - List dayResponses = new ArrayList<>(); + List sessionDates = sessions.stream() + .map(StudySession::getSessionDate) + .distinct() + .sorted() + .toList(); - for (StudySession session : sessions) { + List dayResponses = new ArrayList<>(); - LocalDate sessionDate = session.getSessionDate(); + for (LocalDate sessionDate : sessionDates) { - String day = - sessionDate.getDayOfWeek().toString(); + String day = sessionDate.getDayOfWeek().toString(); /* * 과제 조회 + * 과제 date를 요일/sessionDate 기준으로 조회하는 기존 방식 유지 */ List assignments = assignmentRepository.findBySessionDate(sessionDate); @@ -293,12 +298,14 @@ public StudentWeeklyStatusResponse getStudentWeeklyStatus( /* * 출석 조회 + * attendance는 attendance_code의 날짜 기준으로 계산하는 기존 방식 유지 */ List attendanceCodes = attendanceCodeRepository.findByAttendanceDate(sessionDate); List attendanceResponses = attendanceCodes.stream() + .sorted(Comparator.comparing(AttendanceCode::getAttendanceOrder)) .map(code -> { Attendance attendance = From 6b8f37ef92157eae21cacde9fe3d4d7b5240d89d Mon Sep 17 00:00:00 2001 From: lilyyang0077 Date: Thu, 18 Jun 2026 18:20:02 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EC=A3=BC=EC=B0=A8=EB=B3=84=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=ED=8C=8C=EC=8B=B1=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/pirocheck/students/StudentDetail.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/pirocheck/students/StudentDetail.js b/frontend/src/pages/pirocheck/students/StudentDetail.js index d3e5c17..89de711 100644 --- a/frontend/src/pages/pirocheck/students/StudentDetail.js +++ b/frontend/src/pages/pirocheck/students/StudentDetail.js @@ -134,6 +134,7 @@ function StudentDetail() { [1, 2, 3, 4, 5].map(w => authFetch(`/api/admin/admin/student/${userId}/status/${w}`) .then(r => r.json()) + .then(res => res.data ?? { week: w, days: [] }) .catch(() => ({ week: w, days: [] })) ) ); From 8084246bb48098ef7e96fe642f8bffff0d7176b3 Mon Sep 17 00:00:00 2001 From: lilyyang0077 Date: Thu, 18 Jun 2026 18:32:56 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=A3=BC=EC=B0=A8=EB=B3=84=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=ED=8C=8C=EC=8B=B1=20=EB=B0=8F=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=A0=95=ED=95=A9=EC=84=B1=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/pirocheck/students/StudentDetail.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/pirocheck/students/StudentDetail.js b/frontend/src/pages/pirocheck/students/StudentDetail.js index 89de711..9c9e825 100644 --- a/frontend/src/pages/pirocheck/students/StudentDetail.js +++ b/frontend/src/pages/pirocheck/students/StudentDetail.js @@ -10,8 +10,8 @@ import Toggle2 from '../../../assets/images/icon_togle2.svg'; const IS_MOCK = false; const dayLabel = { TUESDAY: 'TUE', THURSDAY: 'THU', SATURDAY: 'SAT' }; -const statusOptions = ['SUBMITTED', 'LATE', 'NOT_SUBMITTED']; -const statusLabel = { SUBMITTED: '성공', LATE: '미달', NOT_SUBMITTED: '실패' }; +const statusOptions = ['PENDING', 'SUCCESS', 'INSUFFICIENT', 'FAILURE']; +const statusLabel = { PENDING: '대기', SUCCESS: '성공', INSUFFICIENT: '미달', FAILURE: '실패' }; function WeekBlock({ weekData, onChange }) { const [isOpen, setIsOpen] = useState(false); @@ -134,7 +134,20 @@ function StudentDetail() { [1, 2, 3, 4, 5].map(w => authFetch(`/api/admin/admin/student/${userId}/status/${w}`) .then(r => r.json()) - .then(res => res.data ?? { week: w, days: [] }) + .then(res => { + const weekData = res.data ?? { week: w, days: [] }; + + const uniqueDays = Array.from( + new Map( + (weekData.days || []).map(day => [day.sessionDate, day]) + ).values() + ).sort((a, b) => new Date(a.sessionDate) - new Date(b.sessionDate)); + + return { + ...weekData, + days: uniqueDays, + }; + }) .catch(() => ({ week: w, days: [] })) ) );