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

[What 135] feat : 출석 종료 시 유저별 출공결 횟수 반영 #76

Merged
merged 6 commits into from
Sep 24, 2023
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 @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
}
// 출석 재시작
Expand Down Expand Up @@ -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);
}


}
20 changes: 10 additions & 10 deletions src/main/java/gdg/whatssue/controller/MemberControllerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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<ClubJoinRequestListDto> 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<ClubJoinRequestListDto> joinRequestList = memberService.getJoinRequestList();
// return ResponseEntity.status(HttpStatus.OK).body(joinRequestList);
// }

@Override
@Operation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface AttendanceByUserByScheduleRepository extends JpaRepository<AttendanceByUserBySchedule, Long> {
AttendanceByUserBySchedule findBySchedule_ScheduleIdAndMember_MemberId(Long scheduleId,Long MemberId);
Optional<AttendanceByUserBySchedule> findBySchedule_ScheduleIdAndMember_MemberId(Long scheduleId, Long MemberId);
List<AttendanceByUserBySchedule> findBySchedule_ScheduleId(Long scheduleId);
AttendanceByUserBySchedule findByMemberAndSchedule(Member member, Schedule schedule);
List<AttendanceByUserBySchedule> findBySchedule(Schedule schedule);
}
List<AttendanceByUserBySchedule> findByMember_MemberId(Long memberId);
}
59 changes: 50 additions & 9 deletions src/main/java/gdg/whatssue/service/AttendanceService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Integer> 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){
Expand All @@ -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<AttendanceByUserBySchedule> 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<ClubMemberMapping> 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<AttendanceByUserBySchedule> AScheUserList = attendanceByUserByScheduleRepository.findBySchedule_ScheduleId(scheduleId);

for(AttendanceByUserBySchedule attendance : AScheUserList){
Expand Down Expand Up @@ -135,9 +178,7 @@ public ResponseEntity<?> reflectAttendanceByUser(Long scheduleId){
}
checkedListByUserRepository.save(checkedListByUser);
});

}
return ResponseEntity.ok("출석이 반영되었습니다.");
}

}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ spring:
init:
encoding: UTF-8


server:
port: 8090
error:
Expand Down
Loading