Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -248,17 +249,21 @@ public StudentWeeklyStatusResponse getStudentWeeklyStatus(
List<StudySession> sessions =
curriculumRepository.findByWeek(week);

List<DayStatusResponse> dayResponses = new ArrayList<>();
List<LocalDate> sessionDates = sessions.stream()
.map(StudySession::getSessionDate)
.distinct()
.sorted()
.toList();

for (StudySession session : sessions) {
List<DayStatusResponse> dayResponses = new ArrayList<>();

LocalDate sessionDate = session.getSessionDate();
for (LocalDate sessionDate : sessionDates) {

String day =
sessionDate.getDayOfWeek().toString();
String day = sessionDate.getDayOfWeek().toString();

/*
* 과제 조회
* 과제 date를 요일/sessionDate 기준으로 조회하는 기존 방식 유지
*/
List<Assignment> assignments =
assignmentRepository.findBySessionDate(sessionDate);
Expand Down Expand Up @@ -293,12 +298,14 @@ public StudentWeeklyStatusResponse getStudentWeeklyStatus(

/*
* 출석 조회
* attendance는 attendance_code의 날짜 기준으로 계산하는 기존 방식 유지
*/
List<AttendanceCode> attendanceCodes =
attendanceCodeRepository.findByAttendanceDate(sessionDate);

List<AttendanceStatusResponse> attendanceResponses =
attendanceCodes.stream()
.sorted(Comparator.comparing(AttendanceCode::getAttendanceOrder))
.map(code -> {

Attendance attendance =
Expand Down
18 changes: 16 additions & 2 deletions frontend/src/pages/pirocheck/students/StudentDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -134,6 +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 => {
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: [] }))
)
);
Expand Down
Loading