Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[COT-49] Feature: 해당 기수 활동 부원이 아니면 출석 요청 불가능 #203

Merged
merged 2 commits into from
Nov 19, 2024
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 @@ -83,6 +83,7 @@ public enum ErrorCode {
INVALID_ATTEND_TIME(HttpStatus.BAD_REQUEST, "AT-102", "시간 입력 범위가 잘못되었습니다."),
ALREADY_ATTEND(HttpStatus.CONFLICT, "AT-301", "이미 해당 타입으로 출석한 기록이 있습니다."),
ATTENDANCE_NOT_OPEN(HttpStatus.BAD_REQUEST, "AT-401", "출석 시간이 아닙니다."),
ATTENDANCE_PERMISSION(HttpStatus.BAD_REQUEST, "AT-402", "해당 기수의 부원이 아닙니다."),

//프로젝트 관련
LOGO_IMAGE_EXIST(HttpStatus.CONFLICT, "PJ-301", "이미 로고 이미지가 존재합니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.cotato.csquiz.domain.auth.service.component.MemberReader;
import org.cotato.csquiz.domain.generation.entity.Generation;
import org.cotato.csquiz.domain.generation.entity.Session;
import org.cotato.csquiz.domain.generation.repository.GenerationMemberRepository;
import org.cotato.csquiz.domain.generation.repository.SessionRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -47,6 +48,7 @@ public class AttendanceRecordService {
private final RequestAttendanceService requestAttendanceService;
private final SessionRepository sessionRepository;
private final MemberReader memberReader;
private final GenerationMemberRepository generationMemberRepository;

public List<GenerationMemberAttendanceRecordResponse> generateAttendanceResponses(List<Attendance> attendances, Generation generation) {
List<Long> attendanceIds = attendances.stream().map(Attendance::getId).toList();
Expand Down Expand Up @@ -83,6 +85,9 @@ public AttendResponse submitRecord(AttendanceParams request, final Long memberId

Session session = sessionRepository.findById(attendance.getSessionId())
.orElseThrow(() -> new EntityNotFoundException("해당 출석에 대한 세션이 존재하지 않습니다."));
Member member = memberReader.findById(memberId);

checkIsGenerationMember(member, session.getGeneration());

// 해당 출석에 출결 입력이 가능한지 확인하는 과정
if (getAttendanceOpenStatus(session.getSessionDateTime(), attendance, request.requestTime())
Expand All @@ -99,6 +104,12 @@ public AttendResponse submitRecord(AttendanceParams request, final Long memberId
return requestAttendanceService.attend(request, session.getSessionDateTime(), memberId, attendance);
}

private void checkIsGenerationMember(Member member, Generation generation) {
if (!generationMemberRepository.existsByGenerationAndMember(generation, member)) {
throw new AppException(ErrorCode.ATTENDANCE_PERMISSION);
}
}

public MemberAttendanceRecordsResponse findAllRecordsBy(final Long generationId, final Long memberId) {
List<Session> sessions = sessionRepository.findAllByGenerationId(generationId);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.cotato.csquiz.domain.generation.repository;

import java.util.List;
import org.cotato.csquiz.domain.auth.entity.Member;
import org.cotato.csquiz.domain.generation.entity.Generation;
import org.cotato.csquiz.domain.generation.entity.GenerationMember;
import org.springframework.data.jpa.repository.JpaRepository;

public interface GenerationMemberRepository extends JpaRepository<GenerationMember, Long> {
List<GenerationMember> findAllByGeneration(Generation generation);

boolean existsByGenerationAndMember(Generation generation, Member member);
}
Loading