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 @@ -101,4 +101,17 @@ public ApiResponse<StudentTodayLectureResponseDTO> getStudentLectures(@RequestPa
return ApiResponse.onSuccess(result);
}

}
// lecture id로 class id 조회
@GetMapping("/classes/{lectureId}")
public ApiResponse<ClassNameResponseDTO> getClassId(@PathVariable("lectureId") UUID lectureId) {
ClassNameResponseDTO result = lectureService.getClassId(lectureId);
return ApiResponse.onSuccess(result);
}

// 학생용 강의 조회
@GetMapping("/student/{lectureId}")
public ApiResponse<LectureResponseDTO> getStudnetLecture(@PathVariable("lectureId") UUID lectureId) {
LectureResponseDTO result = lectureStudentService.getLecture(lectureId);
return ApiResponse.onSuccess(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.example.backend.domain.lecture.dto.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;


@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ClassNameResponseDTO {
private String className;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.example.backend.domain.lecture.service;

import org.example.backend.domain.lecture.dto.request.LectureRequestDTO;
import org.example.backend.domain.lecture.dto.response.ClassNameResponseDTO;
import org.example.backend.domain.lecture.dto.response.LectureRecordingResponseDTO;
import org.example.backend.domain.lecture.dto.response.LectureResponseDTO;
import org.example.backend.domain.lecture.dto.response.TodayLectureResponseDTO;
Expand All @@ -27,4 +28,6 @@ public interface LectureService {
List<UUID> mapNotes(UUID lectureId, List<UUID> lectureNoteIds);

List<TodayLectureResponseDTO> getClassListByProfessor(LocalDate date);

ClassNameResponseDTO getClassId(UUID lectureId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.example.backend.domain.classroom.repository.ClassroomRepository;
import org.example.backend.domain.lecture.converter.LectureConverter;
import org.example.backend.domain.lecture.dto.request.LectureRequestDTO;
import org.example.backend.domain.lecture.dto.response.ClassNameResponseDTO;
import org.example.backend.domain.lecture.dto.response.LectureRecordingResponseDTO;
import org.example.backend.domain.lecture.dto.response.LectureResponseDTO;
import org.example.backend.domain.lecture.dto.response.TodayLectureResponseDTO;
Expand Down Expand Up @@ -303,5 +304,17 @@ public void updateLectureSessions(UUID classId) {
lectureRepository.saveAll(lectures);
}

// 강의 id 기반 클래스 id 조회
@Override
public ClassNameResponseDTO getClassId(UUID lectureId) {
// 1. 강의 조회
Lecture lecture = lectureRepository.findById(lectureId)
.orElseThrow(() -> new LectureException(LectureErrorCode.LECTURE_NOT_FOUND));
// 2. 클래스 조회
Classroom classroom = lecture.getClassroom();

return ClassNameResponseDTO.builder()
.className(classroom.getClassName())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.example.backend.domain.lecture.service;

import org.example.backend.domain.lecture.dto.response.LectureResponseDTO;
import org.example.backend.domain.lecture.dto.response.StudentTodayLectureResponseDTO;

import java.time.LocalDate;
import java.util.UUID;

public interface LectureStudentService {
StudentTodayLectureResponseDTO getClassListByStudent(LocalDate date);
LectureResponseDTO getLecture(UUID lectureId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,27 @@
import org.example.backend.domain.classroom.entity.Classroom;
import org.example.backend.domain.classroom.repository.ClassroomRepository;
import org.example.backend.domain.lecture.converter.LectureStudentConverter;
import org.example.backend.domain.lecture.dto.response.LectureResponseDTO;
import org.example.backend.domain.lecture.dto.response.StudentTodayLectureResponseDTO;
import org.example.backend.domain.lecture.entity.Lecture;
import org.example.backend.domain.lecture.exception.LectureErrorCode;
import org.example.backend.domain.lecture.exception.LectureException;
import org.example.backend.domain.lecture.repository.LectureRepository;
import org.example.backend.domain.quiz.entity.Quiz;
import org.example.backend.domain.quiz.exception.QuizErrorCode;
import org.example.backend.domain.quiz.exception.QuizException;
import org.example.backend.domain.quiz.repository.QuizRepository;
import org.example.backend.domain.quizAnswer.repository.QuizAnswerRepository;
import org.example.backend.domain.studentClass.repository.StudentClassRepository;
import org.example.backend.domain.user.entity.Role;
import org.example.backend.global.security.auth.CustomSecurityUtil;
import org.example.backend.global.security.auth.CustomUserDetails;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
import java.util.Collections;
import java.time.*;
import java.time.format.TextStyle;
import java.util.*;

@Service
@RequiredArgsConstructor
Expand All @@ -30,6 +34,9 @@ public class LectureStudentServiceImpl implements LectureStudentService {
private final LectureRepository lectureRepository;
private final ClassroomRepository classroomRepository;
private final LectureStudentConverter lectureStudentConverter;
private final QuizRepository quizRepository;
private final QuizAnswerRepository quizAnswerRepository;
private final CustomSecurityUtil customSecurityUtil;

// 오늘의 강의 목록
@Override
Expand Down Expand Up @@ -70,4 +77,62 @@ public StudentTodayLectureResponseDTO getClassListByStudent(LocalDate date) {
return lectureStudentConverter.toStudentLectureListDTO(dtoList, done);

}

// lecture 조회
@Override
public LectureResponseDTO getLecture(UUID lectureId) {

Lecture lecture = lectureRepository.findById(lectureId)
.orElseThrow(() -> new LectureException(LectureErrorCode.LECTURE_NOT_FOUND));

UUID userId = customSecurityUtil.getUserId();

// 서울 시간 기준 now
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

ZonedDateTime startDateTime = ZonedDateTime.of(
LocalDateTime.of(lecture.getLectureDate(), lecture.getStartTime()),
ZoneId.of("Asia/Seoul")
);

ZonedDateTime endDateTime = ZonedDateTime.of(
LocalDateTime.of(lecture.getLectureDate(), lecture.getEndTime()),
ZoneId.of("Asia/Seoul")
);

String status;

if (now.isBefore(startDateTime)) {
status = "beforeLecture";
} else if (!now.isBefore(startDateTime) && now.isBefore(endDateTime)) {
status = "onLecture";
} else {
boolean hasQuiz = quizRepository.existsByLectureId(lecture.getId());
if (!hasQuiz) {
status = "afterLectureBeforeQuiz";
} else{
List<Quiz> quizzes = quizRepository.findByLectureId(lecture.getId());

boolean allSubmitted = quizzes.stream()
.allMatch(q -> quizAnswerRepository.existsByUserIdAndQuizId(userId, q.getId()));
status = allSubmitted ? "viewMyQuizResult" : "quizReadyForSubmission";
}
}

String weekDay = lecture.getLectureDate()
.getDayOfWeek()
.getDisplayName(TextStyle.SHORT, Locale.KOREAN);

return LectureResponseDTO.builder()
.lectureId(lecture.getId())
.classId(lecture.getClassroom().getId().toString())
.lectureName(lecture.getLectureName())
.lectureDate(lecture.getLectureDate())
.weekDay(weekDay)
.session(lecture.getSession())
.startTime(lecture.getStartTime())
.endTime(lecture.getEndTime())
.status(status)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ public interface QuizRepository extends JpaRepository<Quiz, UUID> {
List<Quiz> findByLectureId(UUID lectureId);
Optional<Quiz> findByLectureIdAndQuizOrder(UUID lectureId, int quizOrder);
boolean existsByLectureId(UUID lectureId);

}