From 3f159457e3aace746770a54166d192d7c1a8d781 Mon Sep 17 00:00:00 2001 From: kimYejin Date: Sun, 24 Sep 2023 21:01:00 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B0=9C=EC=9D=B8=EB=B3=84=20=EC=B6=9C?= =?UTF-8?q?=EA=B3=B5=EA=B2=B0=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AttendanceControllerImpl.java | 2 +- .../whatssue/entity/CheckedListByUser.java | 13 +++-- src/main/java/gdg/whatssue/entity/Club.java | 3 ++ .../whatssue/entity/ClubMemberMapping.java | 3 +- src/main/java/gdg/whatssue/entity/Member.java | 3 +- .../CheckedListByUserRepository.java | 2 + .../ClubMemberMappingRepository.java | 2 +- .../whatssue/service/AttendanceService.java | 49 ++++++++++++++++--- .../service/dto/CheckIdDuplicateDto.java | 1 - 9 files changed, 59 insertions(+), 19 deletions(-) diff --git a/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java b/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java index a3f8dae..a21b4c5 100644 --- a/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java +++ b/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java @@ -34,6 +34,7 @@ public ResponseEntity startAttendance(@PathVariable(name = "scheduleId") Long description = "관리자가 출석을 종료") @DeleteMapping("/{scheduleId}/attendance") public ResponseEntity finishAttendance(Long scheduleId) throws NotImplementedException { + attendanceService.reflectAttendanceByUser(scheduleId); return attendanceService.finishAttendance(scheduleId); } // 출석 재시작 @@ -72,5 +73,4 @@ public ResponseEntity openAttendance(@PathVariable(name = "scheduleId") Long sch public ResponseEntity doAttendance(@PathVariable Long scheduleId, @RequestBody CheckNumDto dto) throws Exception { return attendanceService.doAttendance(scheduleId, dto.getNumber()); } - } \ No newline at end of file diff --git a/src/main/java/gdg/whatssue/entity/CheckedListByUser.java b/src/main/java/gdg/whatssue/entity/CheckedListByUser.java index 53ef6a8..2155211 100644 --- a/src/main/java/gdg/whatssue/entity/CheckedListByUser.java +++ b/src/main/java/gdg/whatssue/entity/CheckedListByUser.java @@ -1,20 +1,17 @@ package gdg.whatssue.entity; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; +import lombok.*; @Entity @Getter -@AllArgsConstructor @Builder +@AllArgsConstructor @NoArgsConstructor +@Setter public class CheckedListByUser { @Id - @GeneratedValue(strategy= GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long checkedListByUserId; private int checkedCount; @@ -24,4 +21,6 @@ public class CheckedListByUser { @OneToOne @JoinColumn(name = "club_member_mapping_id") private ClubMemberMapping club_member_mapping; + + } diff --git a/src/main/java/gdg/whatssue/entity/Club.java b/src/main/java/gdg/whatssue/entity/Club.java index 7fede79..795fafd 100644 --- a/src/main/java/gdg/whatssue/entity/Club.java +++ b/src/main/java/gdg/whatssue/entity/Club.java @@ -42,6 +42,9 @@ public class Club { @OneToOne(mappedBy = "club", cascade = CascadeType.ALL, orphanRemoval = true) private MoneyBook moneyBook; + @OneToMany(mappedBy = "club", cascade = CascadeType.ALL, orphanRemoval = true) + private List clubMemberMappingList = new ArrayList<>(); + @Builder public Club(String clubName, String clubInfo, String clubCategory, List adminList, List memberList, List scheduleList, Link link) { this.clubName = clubName; diff --git a/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java b/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java index 857b92c..cdcc89c 100644 --- a/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java +++ b/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java @@ -16,6 +16,7 @@ @Getter @AllArgsConstructor @Builder +@NoArgsConstructor public class ClubMemberMapping { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -32,6 +33,4 @@ public class ClubMemberMapping { @OneToOne(mappedBy = "club_member_mapping") private CheckedListByUser checkedListByUser; - public ClubMemberMapping() { - } } diff --git a/src/main/java/gdg/whatssue/entity/Member.java b/src/main/java/gdg/whatssue/entity/Member.java index ecd9086..dfc9ecb 100644 --- a/src/main/java/gdg/whatssue/entity/Member.java +++ b/src/main/java/gdg/whatssue/entity/Member.java @@ -39,13 +39,14 @@ public class Member { @JoinColumn(name = "club_id") private Club club; - @OneToOne(mappedBy = "member") private Admin admin; @OneToMany(mappedBy = "member") private List clubList; + @OneToMany(mappedBy = "member") + private List clubMemberMappingList = new ArrayList<>(); @Builder public Member(String memberNickName, String memberPw, String memberName, String memberEmail, String memberPhone) { this.memberNickName = memberNickName; diff --git a/src/main/java/gdg/whatssue/repository/CheckedListByUserRepository.java b/src/main/java/gdg/whatssue/repository/CheckedListByUserRepository.java index 67f7dcb..52a24e8 100644 --- a/src/main/java/gdg/whatssue/repository/CheckedListByUserRepository.java +++ b/src/main/java/gdg/whatssue/repository/CheckedListByUserRepository.java @@ -1,8 +1,10 @@ package gdg.whatssue.repository; +import gdg.whatssue.entity.CheckedListByUser; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface CheckedListByUserRepository extends JpaRepository { + CheckedListByUser findByClubMemberMapping_ClubMemberMappingId(Long clubMemberMappingId); } diff --git a/src/main/java/gdg/whatssue/repository/ClubMemberMappingRepository.java b/src/main/java/gdg/whatssue/repository/ClubMemberMappingRepository.java index 7079e69..ed438d3 100644 --- a/src/main/java/gdg/whatssue/repository/ClubMemberMappingRepository.java +++ b/src/main/java/gdg/whatssue/repository/ClubMemberMappingRepository.java @@ -4,5 +4,5 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface ClubMemberMappingRepository extends JpaRepository { - + ClubMemberMapping findByMember_MemberId(Long memberId); } diff --git a/src/main/java/gdg/whatssue/service/AttendanceService.java b/src/main/java/gdg/whatssue/service/AttendanceService.java index 553a038..509ec0c 100644 --- a/src/main/java/gdg/whatssue/service/AttendanceService.java +++ b/src/main/java/gdg/whatssue/service/AttendanceService.java @@ -1,11 +1,7 @@ package gdg.whatssue.service; -import gdg.whatssue.entity.AttendanceByUserBySchedule; -import gdg.whatssue.entity.Schedule; -import gdg.whatssue.repository.ApplyOfficialAbsentRepository; -import gdg.whatssue.repository.AttendanceByUserByScheduleRepository; -import gdg.whatssue.repository.MemberRepository; -import gdg.whatssue.repository.ScheduleRepository; +import gdg.whatssue.entity.*; +import gdg.whatssue.repository.*; import gdg.whatssue.service.dto.AttendanceStateBySheduleDto; import gdg.whatssue.service.dto.CheckNumDto; import jakarta.annotation.PostConstruct; @@ -29,6 +25,9 @@ public class AttendanceService { private final ScheduleRepository scheduleRepository; private final MemberRepository memberRepository; private final AttendanceByUserByScheduleRepository attendanceByUserByScheduleRepository; + private final CheckedListByUserRepository checkedListByUserRepository; + private final ClubMemberMappingRepository clubMemberMappingRepository; + private final ClubRepository clubRepository; private final Map checkNumMap = new HashMap<>(); //출석 시작 public Integer startAttendance(Long scheduleId){ @@ -103,6 +102,44 @@ public ResponseEntity finishAttendance(Long scheduleId){ return ResponseEntity.ok("출석이 종료되었습니다."); }else return new ResponseEntity("출석이 종료되지 않았습니다.", null, 404); } + + public ResponseEntity reflectAttendanceByUser(Long scheduleId){ + List AScheUserList = attendanceByUserByScheduleRepository.findBySchedule_ScheduleId(scheduleId); + + for(AttendanceByUserBySchedule attendance : AScheUserList){ + Member member = attendance.getMember(); + + Optional clubMemberMappingOptional = Optional.ofNullable(clubMemberMappingRepository.findByMember_MemberId(member.getMemberId())); + ClubMemberMapping clubMemberMapping = clubMemberMappingOptional.orElseGet(() -> { + // 값이 없는 경우 ClubMemberMapping을 빌드하여 생성 + ClubMemberMapping newClubMemberMapping = ClubMemberMapping.builder() + .member(member) + .club(member.getClub()) + .build(); + + // 생성한 ClubMemberMapping 저장 + clubMemberMappingRepository.save(newClubMemberMapping); + return newClubMemberMapping; + }); + + clubMemberMappingOptional.ifPresent(value -> { + CheckedListByUser checkedListByUser = checkedListByUserRepository.findByClubMemberMapping_ClubMemberMappingId(clubMemberMapping.getClubMemberMappingId()); + if(attendance.getAttendanceType().equals("출석")){ + checkedListByUser.setCheckedCount(checkedListByUser.getCheckedCount()+1); + }else if(attendance.getAttendanceType().equals("결석")){ + checkedListByUser.setAbsentCount(checkedListByUser.getAbsentCount()+1); + } else if (attendance.getAttendanceType().equals("공결")) { + checkedListByUser.setOfficialAbsentCount(checkedListByUser.getOfficialAbsentCount()+1); + }else { + return; + } + checkedListByUserRepository.save(checkedListByUser); + }); + + } + return ResponseEntity.ok("출석이 반영되었습니다."); + } + } diff --git a/src/main/java/gdg/whatssue/service/dto/CheckIdDuplicateDto.java b/src/main/java/gdg/whatssue/service/dto/CheckIdDuplicateDto.java index 36569a3..5ebcbe2 100644 --- a/src/main/java/gdg/whatssue/service/dto/CheckIdDuplicateDto.java +++ b/src/main/java/gdg/whatssue/service/dto/CheckIdDuplicateDto.java @@ -7,7 +7,6 @@ @Getter @NoArgsConstructor public class CheckIdDuplicateDto { - @NotBlank String memberNickName; } From afc85cb2919a9f6554c3fe82ebbef14824125883 Mon Sep 17 00:00:00 2001 From: kimYejin Date: Sun, 24 Sep 2023 22:09:00 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:checkedlistbyuser=20findby=20=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gdg/whatssue/entity/CheckedListByUser.java | 2 +- src/main/java/gdg/whatssue/entity/ClubMemberMapping.java | 2 +- src/main/java/gdg/whatssue/service/MemberService.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/gdg/whatssue/entity/CheckedListByUser.java b/src/main/java/gdg/whatssue/entity/CheckedListByUser.java index 2155211..5a513a7 100644 --- a/src/main/java/gdg/whatssue/entity/CheckedListByUser.java +++ b/src/main/java/gdg/whatssue/entity/CheckedListByUser.java @@ -20,7 +20,7 @@ public class CheckedListByUser { @OneToOne @JoinColumn(name = "club_member_mapping_id") - private ClubMemberMapping club_member_mapping; + private ClubMemberMapping clubMemberMapping; } diff --git a/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java b/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java index cdcc89c..18523c3 100644 --- a/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java +++ b/src/main/java/gdg/whatssue/entity/ClubMemberMapping.java @@ -30,7 +30,7 @@ public class ClubMemberMapping { @JoinColumn(name = "member_id") private Member member; - @OneToOne(mappedBy = "club_member_mapping") + @OneToOne(mappedBy = "clubMemberMapping") private CheckedListByUser checkedListByUser; } diff --git a/src/main/java/gdg/whatssue/service/MemberService.java b/src/main/java/gdg/whatssue/service/MemberService.java index 3a273d8..c21055c 100644 --- a/src/main/java/gdg/whatssue/service/MemberService.java +++ b/src/main/java/gdg/whatssue/service/MemberService.java @@ -68,7 +68,7 @@ public boolean acceptJoinRequest(Long joinId){ checkedListByUserRepository.save( CheckedListByUser.builder() - .club_member_mapping(clubMemberMapping) + .clubMemberMapping(clubMemberMapping) .checkedCount(0) .absentCount(0) .officialAbsentCount(0).build()); From aa1c8738c6369877d8662e3189c66e58175ba788 Mon Sep 17 00:00:00 2001 From: kimYejin Date: Mon, 25 Sep 2023 02:38:54 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat=20:=EC=B6=9C=EC=84=9D=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=EC=8B=9C=20=EC=9C=A0=EC=A0=80=EB=B3=84=20=EC=B6=9C?= =?UTF-8?q?=EC=84=B1=20=EC=83=81=ED=99=A9=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/SecurityConfig.java | 2 + .../controller/AttendanceControllerImpl.java | 11 +++- .../controller/MemberControllerImpl.java | 20 +++---- .../controller/inter/MemberController.java | 8 +-- .../AttendanceByUserByScheduleRepository.java | 6 +- .../whatssue/service/AttendanceService.java | 59 ++++++++++++++++--- src/main/resources/application.yml | 1 + 7 files changed, 81 insertions(+), 26 deletions(-) diff --git a/src/main/java/gdg/whatssue/configuration/SecurityConfig.java b/src/main/java/gdg/whatssue/configuration/SecurityConfig.java index a98ed8b..c9e28af 100644 --- a/src/main/java/gdg/whatssue/configuration/SecurityConfig.java +++ b/src/main/java/gdg/whatssue/configuration/SecurityConfig.java @@ -34,7 +34,9 @@ public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws "/api/user/**", "/v3/api-docs/**", "/swagger-ui/**").permitAll() +// .anyRequest().permitAll()) .requestMatchers("/api/**").authenticated()) //전부 권한 필요 + .addFilterBefore(new JwtTokenFilter(userService, secretKey), UsernamePasswordAuthenticationFilter.class) .build(); } diff --git a/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java b/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java index a21b4c5..ea7eb3c 100644 --- a/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java +++ b/src/main/java/gdg/whatssue/controller/AttendanceControllerImpl.java @@ -1,6 +1,7 @@ package gdg.whatssue.controller; import gdg.whatssue.controller.inter.AttendanceController; +import gdg.whatssue.entity.CheckedListByUser; import gdg.whatssue.service.AttendanceService; import gdg.whatssue.service.dto.CheckNumDto; import io.swagger.v3.oas.annotations.Operation; @@ -34,7 +35,6 @@ public ResponseEntity startAttendance(@PathVariable(name = "scheduleId") Long description = "관리자가 출석을 종료") @DeleteMapping("/{scheduleId}/attendance") public ResponseEntity finishAttendance(Long scheduleId) throws NotImplementedException { - attendanceService.reflectAttendanceByUser(scheduleId); return attendanceService.finishAttendance(scheduleId); } // 출석 재시작 @@ -73,4 +73,13 @@ public ResponseEntity openAttendance(@PathVariable(name = "scheduleId") Long sch public ResponseEntity doAttendance(@PathVariable Long scheduleId, @RequestBody CheckNumDto dto) throws Exception { return attendanceService.doAttendance(scheduleId, dto.getNumber()); } + @Operation( + summary = "유저별 출공결 횟수", + description = "유저별로 출석, 공결, 결석 횟수 반환") + @GetMapping("/attendance/check/memeber") + public ResponseEntity getAttendanceByUser(Long memberId) throws Exception { + return attendanceService.attendanceByUser(memberId); + } + + } \ No newline at end of file diff --git a/src/main/java/gdg/whatssue/controller/MemberControllerImpl.java b/src/main/java/gdg/whatssue/controller/MemberControllerImpl.java index f3d607d..7ef796c 100644 --- a/src/main/java/gdg/whatssue/controller/MemberControllerImpl.java +++ b/src/main/java/gdg/whatssue/controller/MemberControllerImpl.java @@ -13,7 +13,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.Authentication; +//import org.springframework.security.core.Authentication; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RestController; @@ -70,15 +70,15 @@ public ResponseEntity refuseJoinRequest(Long joinId) { return ResponseEntity.status(HttpStatus.OK).body("가입요청 거절 완료"); } - @Override - @Operation( - summary = "멤버 클럽 가입 요청 조회 api", - description = "멤버 클럽 가입 요청 조회") - public ResponseEntity getJoinRequestList(Authentication auth) { - System.out.println(auth.getName()); - List joinRequestList = memberService.getJoinRequestList(); - return ResponseEntity.status(HttpStatus.OK).body(joinRequestList); - } +// @Override +// @Operation( +// summary = "멤버 클럽 가입 요청 조회 api", +// description = "멤버 클럽 가입 요청 조회") +// public ResponseEntity getJoinRequestList(Authentication auth) { +// System.out.println(auth.getName()); +// List joinRequestList = memberService.getJoinRequestList(); +// return ResponseEntity.status(HttpStatus.OK).body(joinRequestList); +// } @Override @Operation( diff --git a/src/main/java/gdg/whatssue/controller/inter/MemberController.java b/src/main/java/gdg/whatssue/controller/inter/MemberController.java index 91eeb13..d743f5c 100644 --- a/src/main/java/gdg/whatssue/controller/inter/MemberController.java +++ b/src/main/java/gdg/whatssue/controller/inter/MemberController.java @@ -3,7 +3,7 @@ import io.swagger.v3.oas.annotations.Operation; import jdk.jshell.spi.ExecutionControl.NotImplementedException; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.Authentication; +//import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; @CrossOrigin @@ -21,9 +21,9 @@ public interface MemberController { @PostMapping("/join-refuse/{joinId}") ResponseEntity refuseJoinRequest(@PathVariable Long joinId) throws NotImplementedException; - //멤버 가입요청 리스트 조회 - @GetMapping("/join-list") - ResponseEntity getJoinRequestList(Authentication auth) throws NotImplementedException; +// //멤버 가입요청 리스트 조회 +// @GetMapping("/join-list") +// ResponseEntity getJoinRequestList(Authentication auth) throws NotImplementedException; //멤버 목록 조회 @GetMapping("/manage") diff --git a/src/main/java/gdg/whatssue/repository/AttendanceByUserByScheduleRepository.java b/src/main/java/gdg/whatssue/repository/AttendanceByUserByScheduleRepository.java index 77229c0..e91feae 100644 --- a/src/main/java/gdg/whatssue/repository/AttendanceByUserByScheduleRepository.java +++ b/src/main/java/gdg/whatssue/repository/AttendanceByUserByScheduleRepository.java @@ -7,11 +7,13 @@ import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface AttendanceByUserByScheduleRepository extends JpaRepository { - AttendanceByUserBySchedule findBySchedule_ScheduleIdAndMember_MemberId(Long scheduleId,Long MemberId); + Optional findBySchedule_ScheduleIdAndMember_MemberId(Long scheduleId, Long MemberId); List findBySchedule_ScheduleId(Long scheduleId); AttendanceByUserBySchedule findByMemberAndSchedule(Member member, Schedule schedule); List findBySchedule(Schedule schedule); -} + List findByMember_MemberId(Long memberId); +} \ No newline at end of file diff --git a/src/main/java/gdg/whatssue/service/AttendanceService.java b/src/main/java/gdg/whatssue/service/AttendanceService.java index 509ec0c..6258e94 100644 --- a/src/main/java/gdg/whatssue/service/AttendanceService.java +++ b/src/main/java/gdg/whatssue/service/AttendanceService.java @@ -64,28 +64,32 @@ public ResponseEntity getAttendanceResult(Long scheduleId) throws Exception { .collect(Collectors.toList()); return ResponseEntity.ok(AttendanceStateBySheduleList); } - // 출석 하기 public ResponseEntity doAttendance(Long scheduleId, Integer num) throws Exception { //어떤 클럽의 schedule을 찾을 것인지 모르니 일단 임시로 1번 user가 속한 클럽의 스케줄을 조회 Long memberId = 1L; + Optional checkNum = Optional.ofNullable(checkNumMap.get(scheduleId)); + if(checkNum.isEmpty()){ + return new ResponseEntity("해당 일정에 대한 출석이 시작되지 않았습니다.", null, 404); + } // 이미 해당 스케줄에 대하여 해당 멤버가 출석을 했는지 확인-> 만약 출석을 한 적이 있다면 예외 처리 - if(attendanceByUserByScheduleRepository.findBySchedule_ScheduleIdAndMember_MemberId(scheduleId, memberId) != null) { - throw new ResponseStatusException(BAD_REQUEST, "이미 출석을 하셨습니다."); //404 + AttendanceByUserBySchedule attendance = attendanceByUserByScheduleRepository.findBySchedule_ScheduleIdAndMember_MemberId(scheduleId,memberId).orElseThrow( + () -> new ResponseStatusException(BAD_REQUEST, "해당 스케줄에 대한 출석 정보가 없습니다.")); + if (attendance.getAttendanceType().equals("출석")) { + throw new ResponseStatusException(BAD_REQUEST, "이미 출석을 하셨습니다."); } + //출석 번호가 일치하는지 확인 if (checkNumMap.get(scheduleId).equals(num)) { // AttendanceByUserBySchedule attendance = AttendanceByUserBySchedule.builder() // .attendanceType("출석") // .member(memberRepository.findById(memberId).get()) // .schedule(scheduleRepository.findById(scheduleId).get()) // .build(); - AttendanceByUserBySchedule attendance = attendanceByUserByScheduleRepository.findBySchedule_ScheduleIdAndMember_MemberId(scheduleId,memberId); attendance.setAttendanceType("출석"); attendanceByUserByScheduleRepository.save(attendance); - }else return new ResponseEntity("출석 번호가 일치하지 않습니다.", null, 404); + } else return new ResponseEntity("출석 번호가 일치하지 않습니다.", null, 404); return ResponseEntity.ok("출석 완료."); - } // 출석 열기 (출석 시도) public ResponseEntity openAttendance(Long scheduleId){ @@ -99,11 +103,50 @@ public ResponseEntity finishAttendance(Long scheduleId){ Schedule schedule = scheduleRepository.findById(scheduleId).get(); schedule.setIsChecked(true); scheduleRepository.save(schedule); + reflectAttendanceByUser(scheduleId); // 출석 내용 멤버별 출석 사항에 반영 return ResponseEntity.ok("출석이 종료되었습니다."); }else return new ResponseEntity("출석이 종료되지 않았습니다.", null, 404); } + public ResponseEntity attendanceByUser(Long ScheduleId) { + List attendanceByUser = attendanceByUserByScheduleRepository.findBySchedule_ScheduleId(ScheduleId); + Long memberId = 1L; + int checkedCount = 0; + int absentCount = 0; + int officialAbsentCount = 0; + for(AttendanceByUserBySchedule attendance : attendanceByUser){ + if(attendance.getAttendanceType().equals("출석")){ + checkedCount++; + }else if(attendance.getAttendanceType().equals("결석")){ + absentCount++; + }else if(attendance.getAttendanceType().equals("공결")){ + officialAbsentCount++; + } + } + Optional clubMemberMappingOptional = Optional.ofNullable(clubMemberMappingRepository.findByMember_MemberId(memberId)); + ClubMemberMapping clubMemberMapping = clubMemberMappingOptional.orElseGet(() -> { + // 값이 없는 경우 ClubMemberMapping을 빌드하여 생성 + ClubMemberMapping newClubMemberMapping = ClubMemberMapping.builder() + .member(memberRepository.findById(memberId).get()) + .club(memberRepository.findById(memberId).get().getClub()) + .build(); + + // 생성한 ClubMemberMapping 저장 + clubMemberMappingRepository.save(newClubMemberMapping); + return newClubMemberMapping; + }); + + CheckedListByUser checkedListByUser = CheckedListByUser.builder() + .checkedCount(checkedCount) + .absentCount(absentCount) + .officialAbsentCount(officialAbsentCount) + .clubMemberMapping(clubMemberMapping) + .build(); + + checkedListByUserRepository.save(checkedListByUser); + return ResponseEntity.ok("해당 유저의 출석이 반영되었습니다."); + } - public ResponseEntity reflectAttendanceByUser(Long scheduleId){ + public void reflectAttendanceByUser(Long scheduleId){ List AScheUserList = attendanceByUserByScheduleRepository.findBySchedule_ScheduleId(scheduleId); for(AttendanceByUserBySchedule attendance : AScheUserList){ @@ -135,9 +178,7 @@ public ResponseEntity reflectAttendanceByUser(Long scheduleId){ } checkedListByUserRepository.save(checkedListByUser); }); - } - return ResponseEntity.ok("출석이 반영되었습니다."); } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 13a6a62..517002f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -15,6 +15,7 @@ spring: init: encoding: UTF-8 + server: port: 8090 error: