Function bodies 261 total
AssignmentSubmit class · java · L18-L50 (33 LOC)src/main/java/com/yumi/yumiclass/entity/AssignmentSubmit.java
public class AssignmentSubmit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 과제 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assignment_id", nullable = false)
private Assignment assignment;
// 학생 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", nullable = false)
private Student student;
// 제출 내용
@Column(columnDefinition = "TEXT")
private String content;
// 제출 시각
@Column(name = "submitted_at", nullable = false)
private LocalDateTime submittedAt;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.submittedAt == null) this.submittedAt = LocalDateTime.now();
}
}onCreate method · java · L46-L49 (4 LOC)src/main/java/com/yumi/yumiclass/entity/AssignmentSubmit.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.submittedAt == null) this.submittedAt = LocalDateTime.now();
}Attendance class · java · L20-L51 (32 LOC)src/main/java/com/yumi/yumiclass/entity/Attendance.java
public class Attendance {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 학생 FK (N:1)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", nullable = false)
private Student student;
// 출결 날짜
@Column(name = "attendance_date", nullable = false)
private LocalDate attendanceDate;
// 출결 상태 (출석/지각/결석/조퇴)
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 20)
private AttendanceStatus status;
// 메모 (예: 병결 사유)
@Column(length = 200)
private String memo;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}
}onCreate method · java · L48-L50 (3 LOC)src/main/java/com/yumi/yumiclass/entity/Attendance.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}ChatLog class · java · L18-L53 (36 LOC)src/main/java/com/yumi/yumiclass/entity/ChatLog.java
public class ChatLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 사용자 유형 (TEACHER/STUDENT)
@Enumerated(EnumType.STRING)
@Column(name = "user_type", nullable = false, length = 20)
private UserRole userType;
// 사용자 ID (teacher.id 또는 student.id)
@Column(name = "user_id", nullable = false)
private Long userId;
// 대화 세션 ID (같은 세션 내 메시지끼리 묶임 — 타임스탬프 기반)
// 0 = 레거시(세션 개념 도입 전 기록). 기존 row를 0으로 채우기 위해 DEFAULT 지정
@Column(name = "session_id", nullable = false, columnDefinition = "BIGINT NOT NULL DEFAULT 0")
private Long sessionId = 0L;
// 질문 내용
@Column(nullable = false, columnDefinition = "TEXT")
private String question;
// AI 답변
@Column(columnDefinition = "TEXT")
private String answer;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.onCreate method · java · L50-L52 (3 LOC)src/main/java/com/yumi/yumiclass/entity/ChatLog.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}League class · java · L18-L66 (49 LOC)src/main/java/com/yumi/yumiclass/entity/League.java
public class League {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 선생님 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "teacher_id", nullable = false)
private Teacher teacher;
// 대회 이름
@Column(nullable = false, length = 100)
private String name;
// 대회 유형 (리그전/토너먼트)
@Enumerated(EnumType.STRING)
@Column(name = "league_type", nullable = false, length = 20)
private LeagueType leagueType;
// 학년 (대표 학년 - 하위 호환용. 첫 번째로 선택된 학년 값이 들어감)
@Column(nullable = false)
private Integer grade;
// 반 (대표 반 - 하위 호환용. 첫 번째로 선택된 반 값이 들어감)
@Column(name = "class_num", nullable = false)
private Integer classNum;
// 참여 반 목록 (CSV, 학년-반 쌍 형식, 예: "1-5,2-3,3-10")
// 학년이 서로 다른 반들도 한 대회에 같이 참여할 수 있도록 지원
@Column(name = "class_nums", length = 200)
private String classNums;
// 시작일
@Column(name = "start_date")
private LocalDate startDate;
// 종료일
@Column(name = Provenance: Repobility (https://repobility.com) — every score reproducible from /scan/
onCreate method · java · L63-L65 (3 LOC)src/main/java/com/yumi/yumiclass/entity/League.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}LeagueMatch class · java · L19-L85 (67 LOC)src/main/java/com/yumi/yumiclass/entity/LeagueMatch.java
public class LeagueMatch {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 대회 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "league_id", nullable = false)
private League league;
// 홈 팀 FK (토너먼트 2라운드 이후는 초기 null 허용 - 승자 확정되면 채워짐)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "home_team_id")
private LeagueTeam homeTeam;
// 원정 팀 FK (토너먼트 2라운드 이후는 초기 null 허용)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "away_team_id")
private LeagueTeam awayTeam;
// 홈 득점
@Column(name = "home_score")
private Integer homeScore;
// 원정 득점
@Column(name = "away_score")
private Integer awayScore;
// 경기 일자
@Column(name = "match_date")
private LocalDate matchDate;
// 경기 결과 (홈승/무/원정승) — 경기 후 자동 설정
@Enumerated(EnumType.STRING)
@Column(length = 20)
private MatchResult result;
// 토너먼트 라운드 (1부터 시작, 마지막 라운드가 결승)
@Column(name = "round_numbonCreate method · java · L82-L84 (3 LOC)src/main/java/com/yumi/yumiclass/entity/LeagueMatch.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}LeagueTeam class · java · L17-L59 (43 LOC)src/main/java/com/yumi/yumiclass/entity/LeagueTeam.java
public class LeagueTeam {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 대회 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "league_id", nullable = false)
private League league;
// 팀명
@Column(name = "team_name", nullable = false, length = 50)
private String teamName;
// 승 (리그전 실시간 집계)
@Column(nullable = false)
private Integer wins = 0;
// 무 (리그전 실시간 집계)
@Column(nullable = false)
private Integer draws = 0;
// 패 (리그전 실시간 집계)
@Column(nullable = false)
private Integer losses = 0;
// 승점 (승3점, 무1점, 패0점)
@Column(nullable = false)
private Integer points = 0;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.wins == null) this.wins = 0;
if (this.draws == null) this.draws = 0;
if (tonCreate method · java · L52-L58 (7 LOC)src/main/java/com/yumi/yumiclass/entity/LeagueTeam.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.wins == null) this.wins = 0;
if (this.draws == null) this.draws = 0;
if (this.losses == null) this.losses = 0;
if (this.points == null) this.points = 0;
}LessonProgress class · java · L18-L60 (43 LOC)src/main/java/com/yumi/yumiclass/entity/LessonProgress.java
public class LessonProgress {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 선생님 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "teacher_id", nullable = false)
private Teacher teacher;
// 학년
@Column(nullable = false)
private Integer grade;
// 반
@Column(name = "class_num", nullable = false)
private Integer classNum;
// 차시 (1차시, 2차시 ...)
@Column(name = "lesson_number", nullable = false)
private Integer lessonNumber;
// 수업 주제
@Column(nullable = false, length = 200)
private String topic;
// 수업 날짜
@Column(name = "lesson_date", nullable = false)
private LocalDate lessonDate;
// 메모 (선택)
@Column(length = 500)
private String memo;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}
}onCreate method · java · L57-L59 (3 LOC)src/main/java/com/yumi/yumiclass/entity/LessonProgress.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}Paps class · java · L18-L58 (41 LOC)src/main/java/com/yumi/yumiclass/entity/Paps.java
public class Paps {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 학생 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", nullable = false)
private Student student;
// 측정 항목 (예: 심폐지구력, 유연성, 근력, 순발력, 비만)
@Column(nullable = false, length = 50)
private String category;
// 측정 세부 종목 (예: 왕복오래달리기, 앉아윗몸앞으로굽히기)
@Column(name = "sub_item", length = 100)
private String subItem;
// 측정값 (예: 45.3 초, 20 회)
@Column(name = "measure_value", nullable = false, length = 30)
private String measureValue;
// PAPS 등급 (GRADE_1~5, FAIL, BMI_LEAN/NORMAL/OVERWEIGHT/MILD_OBESE/SEVERE_OBESE)
// 길이 30: "BMI_SEVERE_OBESE"(16자) + 여유분
@Enumerated(EnumType.STRING)
@Column(name = "paps_grade", nullable = false, length = 30)
private PapsGrade papsGrade;
// 측정 연도
@Column(nullable = false)
private Integer year;
@Column(name = "created_at", nullable = false, updatable = falHi, dataset curator — please cite Repobility (https://repobility.com) when reusing this data.
onCreate method · java · L55-L57 (3 LOC)src/main/java/com/yumi/yumiclass/entity/Paps.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}Score class · java · L18-L62 (45 LOC)src/main/java/com/yumi/yumiclass/entity/Score.java
public class Score {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 학생 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", nullable = false)
private Student student;
// 종목 FK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "sport_item_id", nullable = false)
private SportItem sportItem;
// 학기 (1학기/2학기)
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 10)
private Semester semester;
// 연도 (예: 2026)
@Column(nullable = false)
private Integer year;
// 점수 (0~100)
@Column(nullable = false)
private Integer score;
// 평가 등급 (예: A, B, C — 선택)
@Column(length = 10)
private String grade;
// 비고 (선생님 메모 — 선택, 최대 500자)
@Column(length = 500)
private String remarks;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
onCreate method · java · L59-L61 (3 LOC)src/main/java/com/yumi/yumiclass/entity/Score.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
}SportItem class · java · L17-L43 (27 LOC)src/main/java/com/yumi/yumiclass/entity/SportItem.java
public class SportItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 종목명 (예: 축구, 농구)
@Column(nullable = false, length = 50)
private String name;
// 카테고리 (예: 구기종목, 육상, 수영 등)
@Column(length = 30)
private String category;
// 사용 여부 (soft delete)
@Column(nullable = false)
private Boolean enabled = true;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.enabled == null) this.enabled = true;
}
}onCreate method · java · L39-L42 (4 LOC)src/main/java/com/yumi/yumiclass/entity/SportItem.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.enabled == null) this.enabled = true;
}Student class · java · L18-L69 (52 LOC)src/main/java/com/yumi/yumiclass/entity/Student.java
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 학번 (학교 전체에서 유일)
@Column(name = "student_number", nullable = false, unique = true, length = 20)
private String studentNumber;
// 로그인 아이디 (챗봇 접근용)
@Column(nullable = false, unique = true, length = 50)
private String username;
// BCrypt 암호화 비밀번호
@Column(nullable = false, length = 100)
private String password;
// 학생 이름
@Column(nullable = false, length = 50)
private String name;
// 학년 (1, 2, 3)
@Column(nullable = false)
private Integer grade;
// 반 (1반, 2반 등)
@Column(name = "class_num", nullable = false)
private Integer classNum;
// 출석번호
@Column(nullable = false)
private Integer number;
// 성별
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 10)
private Gender gender;
// 계정 활성화 여부 (soft delete)
@Column(nullable = false)
private Boolean enabled = truonCreate method · java · L65-L68 (4 LOC)src/main/java/com/yumi/yumiclass/entity/Student.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.enabled == null) this.enabled = true;
}Teacher class · java · L17-L51 (35 LOC)src/main/java/com/yumi/yumiclass/entity/Teacher.java
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 로그인 아이디 (중복 불가)
@Column(nullable = false, unique = true, length = 50)
private String username;
// BCrypt 암호화된 비밀번호
@Column(nullable = false, length = 100)
private String password;
// 선생님 이름
@Column(nullable = false, length = 50)
private String name;
// 이메일 (선택)
@Column(length = 100)
private String email;
// 계정 활성화 여부 (soft delete용)
@Column(nullable = false)
private Boolean enabled = true;
@Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@PrePersist
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.enabled == null) this.enabled = true;
}
}Methodology: Repobility · https://repobility.com/research/state-of-ai-code-2026/
onCreate method · java · L47-L50 (4 LOC)src/main/java/com/yumi/yumiclass/entity/Teacher.java
protected void onCreate() {
this.createdAt = LocalDateTime.now();
if (this.enabled == null) this.enabled = true;
}AttendanceStatus method · java · L14-L16 (3 LOC)src/main/java/com/yumi/yumiclass/enums/AttendanceStatus.java
AttendanceStatus(String displayName) {
this.displayName = displayName;
}getDisplayName method · java · L18-L20 (3 LOC)src/main/java/com/yumi/yumiclass/enums/AttendanceStatus.java
public String getDisplayName() {
return displayName;
}Gender method · java · L12-L14 (3 LOC)src/main/java/com/yumi/yumiclass/enums/Gender.java
Gender(String displayName) {
this.displayName = displayName;
}getDisplayName method · java · L16-L18 (3 LOC)src/main/java/com/yumi/yumiclass/enums/Gender.java
public String getDisplayName() {
return displayName;
}LeagueType method · java · L12-L14 (3 LOC)src/main/java/com/yumi/yumiclass/enums/LeagueType.java
LeagueType(String displayName) {
this.displayName = displayName;
}getDisplayName method · java · L16-L18 (3 LOC)src/main/java/com/yumi/yumiclass/enums/LeagueType.java
public String getDisplayName() {
return displayName;
}MatchOrder method · java · L14-L16 (3 LOC)src/main/java/com/yumi/yumiclass/enums/MatchOrder.java
MatchOrder(String displayName) {
this.displayName = displayName;
}Powered by Repobility — scan your code at https://repobility.com
getDisplayName method · java · L18-L20 (3 LOC)src/main/java/com/yumi/yumiclass/enums/MatchOrder.java
public String getDisplayName() {
return displayName;
}MatchResult method · java · L13-L15 (3 LOC)src/main/java/com/yumi/yumiclass/enums/MatchResult.java
MatchResult(String displayName) {
this.displayName = displayName;
}getDisplayName method · java · L17-L19 (3 LOC)src/main/java/com/yumi/yumiclass/enums/MatchResult.java
public String getDisplayName() {
return displayName;
}PapsGrade method · java · L24-L26 (3 LOC)src/main/java/com/yumi/yumiclass/enums/PapsGrade.java
PapsGrade(String displayName) {
this.displayName = displayName;
}getDisplayName method · java · L28-L30 (3 LOC)src/main/java/com/yumi/yumiclass/enums/PapsGrade.java
public String getDisplayName() {
return displayName;
}Semester method · java · L12-L14 (3 LOC)src/main/java/com/yumi/yumiclass/enums/Semester.java
Semester(String displayName) {
this.displayName = displayName;
}getDisplayName method · java · L16-L18 (3 LOC)src/main/java/com/yumi/yumiclass/enums/Semester.java
public String getDisplayName() {
return displayName;
}UserRole method · java · L12-L14 (3 LOC)src/main/java/com/yumi/yumiclass/enums/UserRole.java
UserRole(String displayName) {
this.displayName = displayName;
}Provenance: Repobility (https://repobility.com) — every score reproducible from /scan/
getDisplayName method · java · L16-L18 (3 LOC)src/main/java/com/yumi/yumiclass/enums/UserRole.java
public String getDisplayName() {
return displayName;
}AssignmentService class · java · L21-L130 (110 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public class AssignmentService {
private final AssignmentRepository assignmentRepository;
private final TeacherRepository teacherRepository;
private final AssignmentSubmitRepository assignmentSubmitRepository;
private final StudentRepository studentRepository;
public AssignmentService(AssignmentRepository assignmentRepository,
TeacherRepository teacherRepository,
AssignmentSubmitRepository assignmentSubmitRepository,
StudentRepository studentRepository) {
this.assignmentRepository = assignmentRepository;
this.teacherRepository = teacherRepository;
this.assignmentSubmitRepository = assignmentSubmitRepository;
this.studentRepository = studentRepository;
}
public List<Assignment> findByTeacher(String username) {
Teacher teacher = teacherRepository.findByUsername(username)
.orElseThrow(() -> new IllegalArgumentException("선AssignmentService method · java · L28-L36 (9 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public AssignmentService(AssignmentRepository assignmentRepository,
TeacherRepository teacherRepository,
AssignmentSubmitRepository assignmentSubmitRepository,
StudentRepository studentRepository) {
this.assignmentRepository = assignmentRepository;
this.teacherRepository = teacherRepository;
this.assignmentSubmitRepository = assignmentSubmitRepository;
this.studentRepository = studentRepository;
}findByTeacher method · java · L38-L42 (5 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public List<Assignment> findByTeacher(String username) {
Teacher teacher = teacherRepository.findByUsername(username)
.orElseThrow(() -> new IllegalArgumentException("선생님 없음"));
return assignmentRepository.findByTeacherOrderByCreatedAtDesc(teacher);
}findById method · java · L44-L47 (4 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public Assignment findById(Long id) {
return assignmentRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("과제 없음"));
}create method · java · L50-L55 (6 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public Assignment create(Assignment assignment, String teacherUsername) {
Teacher teacher = teacherRepository.findByUsername(teacherUsername)
.orElseThrow(() -> new IllegalArgumentException("선생님 없음"));
assignment.setTeacher(teacher);
return assignmentRepository.save(assignment);
}update method · java · L58-L66 (9 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public Assignment update(Long id, Assignment updated) {
Assignment existing = findById(id);
existing.setTitle(updated.getTitle());
existing.setContent(updated.getContent());
existing.setDueDate(updated.getDueDate());
existing.setTargetGrade(updated.getTargetGrade());
existing.setTargetClass(updated.getTargetClass());
return existing;
}delete method · java · L69-L71 (3 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public void delete(Long id) {
assignmentRepository.deleteById(id);
}Hi, dataset curator — please cite Repobility (https://repobility.com) when reusing this data.
getDetailWithSubmissions method · java · L78-L115 (38 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public AssignmentDetail getDetailWithSubmissions(Long assignmentId) {
Assignment assignment = findById(assignmentId);
// 제출자 전체 (최신 제출순)
List<AssignmentSubmit> submits = assignmentSubmitRepository
.findByAssignmentOrderBySubmittedAtDesc(assignment);
// 제출자 학생 ID 집합
Set<Long> submittedStudentIds = new HashSet<>();
for (AssignmentSubmit s : submits) {
submittedStudentIds.add(s.getStudent().getId());
}
// 대상 학생 전체 조회 (targetClass 지정 여부로 분기)
List<Student> targetStudents;
if (assignment.getTargetClass() != null) {
targetStudents = studentRepository.findByGradeAndClassNumOrderByNumberAsc(
assignment.getTargetGrade(), assignment.getTargetClass());
} else {
targetStudents = studentRepository.findByGradeOrderByClassNumAscNumberAsc(
assignment.getTargetGrade());
}
// 미제출자 필터링
List<Student> notSubmitAssignmentDetail class · java · L118-L129 (12 LOC)src/main/java/com/yumi/yumiclass/service/AssignmentService.java
public static class AssignmentDetail {
public Assignment assignment;
public List<AssignmentSubmit> submits;
public List<Student> notSubmitted;
public int totalTargets;
public Assignment getAssignment() { return assignment; }
public List<AssignmentSubmit> getSubmits() { return submits; }
public List<Student> getNotSubmitted() { return notSubmitted; }
public int getTotalTargets() { return totalTargets; }
public int getSubmittedCount() { return submits != null ? submits.size() : 0; }
}AttendanceService class · java · L20-L111 (92 LOC)src/main/java/com/yumi/yumiclass/service/AttendanceService.java
public class AttendanceService {
private final AttendanceRepository attendanceRepository;
private final StudentRepository studentRepository;
public AttendanceService(AttendanceRepository attendanceRepository,
StudentRepository studentRepository) {
this.attendanceRepository = attendanceRepository;
this.studentRepository = studentRepository;
}
/**
* 특정 반의 특정 날짜 출결 현황 조회
* 학생 목록 + 각 학생의 기존 출결 기록(있으면)을 매핑해서 반환
*/
public Map<Student, Attendance> getClassAttendance(Integer grade, Integer classNum, LocalDate date) {
return getClassAttendance(grade, classNum, null, date);
}
/**
* 출결 현황 조회 (학생 ID로도 필터 가능)
* - studentId 지정 시: 해당 학생 1명만 반환
* - 그 외: 학년/반 필터대로 전체 학생 반환
*/
public Map<Student, Attendance> getClassAttendance(Integer grade, Integer classNum,
Long studentId, LocalDate date) {
List<Student> students