diff --git a/eeos/src/main/java/com/blackcompany/eeos/config/security/SecurityFilterChainConfig.java b/eeos/src/main/java/com/blackcompany/eeos/config/security/SecurityFilterChainConfig.java index 9d292940..891f53ce 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/config/security/SecurityFilterChainConfig.java +++ b/eeos/src/main/java/com/blackcompany/eeos/config/security/SecurityFilterChainConfig.java @@ -108,6 +108,7 @@ SecurityFilterChain authenticated(HttpSecurity httpSecurity) throws Exception { requests .requestMatchers(HttpMethod.PUT, "/api/members/{memberId}/department") .hasAnyRole(ADMIN); + requests.requestMatchers(HttpMethod.GET, "/api/attend/statistic").hasAnyRole(ADMIN); requests.anyRequest().authenticated(); }); diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/dto/AttendStatisticsResponse.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/dto/AttendStatisticsResponse.java new file mode 100644 index 00000000..0a32ea90 --- /dev/null +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/dto/AttendStatisticsResponse.java @@ -0,0 +1,16 @@ +package com.blackcompany.eeos.target.application.dto; + +import com.blackcompany.eeos.common.support.dto.AbstractResponseDto; +import java.util.List; + +public record AttendStatisticsResponse(List members) + implements AbstractResponseDto { + + public record MemberStatistics( + Long id, + String name, + String activeStatus, + int lateCount, + int absentCount, + int penaltyPoint) {} +} diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/model/TeamBuildingTargetModel.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/model/TeamBuildingTargetModel.java index dd2d828a..22c778af 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/model/TeamBuildingTargetModel.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/model/TeamBuildingTargetModel.java @@ -2,7 +2,7 @@ import com.blackcompany.eeos.common.application.model.MemberIdModel; import com.blackcompany.eeos.common.support.AbstractModel; -import com.blackcompany.eeos.target.persistence.TeamBuildingInputStatus; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingInputStatus; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/model/converter/TeamBuildingTargetEntityConverter.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/model/converter/TeamBuildingTargetEntityConverter.java index 27503ad0..144b53d8 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/model/converter/TeamBuildingTargetEntityConverter.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/model/converter/TeamBuildingTargetEntityConverter.java @@ -2,9 +2,9 @@ import com.blackcompany.eeos.common.support.converter.AbstractEntityConverter; import com.blackcompany.eeos.target.application.model.TeamBuildingTargetModel; -import com.blackcompany.eeos.target.persistence.TeamBuildingInputDataEntity; -import com.blackcompany.eeos.target.persistence.TeamBuildingInputStatus; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetEntity; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingInputDataEntity; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingInputStatus; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetEntity; import org.springframework.stereotype.Component; @Component diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendWeightPolicyRepository.java similarity index 89% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyRepository.java rename to eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendWeightPolicyRepository.java index b55c1030..1b03fcee 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/repository/AttendWeightPolicyRepository.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.application.repository; import com.blackcompany.eeos.target.application.model.AttendStatus; import com.blackcompany.eeos.target.application.model.AttendWeightPolicyModel; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java index a261e12a..933d5c22 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendService.java @@ -4,7 +4,6 @@ import com.blackcompany.eeos.common.utils.RequestScope; import com.blackcompany.eeos.member.application.model.ActiveStatus; import com.blackcompany.eeos.member.application.model.MemberModel; -import com.blackcompany.eeos.member.application.model.converter.MemberEntityConverter; import com.blackcompany.eeos.member.application.repository.MemberRepository; import com.blackcompany.eeos.member.application.service.QueryMemberService; import com.blackcompany.eeos.program.application.exception.NotFoundProgramException; @@ -19,6 +18,7 @@ import com.blackcompany.eeos.target.application.dto.AttendInfoWithProgramResponse; import com.blackcompany.eeos.target.application.dto.AttendPenaltyRankingResponse; import com.blackcompany.eeos.target.application.dto.AttendPenaltyResponse; +import com.blackcompany.eeos.target.application.dto.AttendStatisticsResponse.MemberStatistics; import com.blackcompany.eeos.target.application.dto.AttendSummaryInfoResponse; import com.blackcompany.eeos.target.application.dto.ChangeAttendStatusResponse; import com.blackcompany.eeos.target.application.dto.QueryAttendActiveStatusResponse; @@ -45,8 +45,8 @@ import com.blackcompany.eeos.target.persistence.AttendEntity; import com.blackcompany.eeos.target.persistence.AttendRepository; import com.blackcompany.eeos.target.persistence.PenaltyPointRepository; -import com.blackcompany.eeos.target.persistence.ProgramRankCounterEntity; -import com.blackcompany.eeos.target.persistence.ProgramRankCounterRepository; +import com.blackcompany.eeos.target.persistence.rank.ProgramRankCounterEntity; +import com.blackcompany.eeos.target.persistence.rank.ProgramRankCounterRepository; import java.sql.Timestamp; import java.util.List; import java.util.Map; @@ -76,7 +76,6 @@ public class AttendService private final AttendEntityConverter attendEntityConverter; private final QueryMemberService queryMemberService; private final ChangeAttendStatusConverter changeAttendStatusConverter; - private final MemberEntityConverter memberEntityConverter; private final AttendInfoConverter attendInfoConverter; private final QueryAttendStatusResponseConverter attendStatusResponseConverter; private final AttendInfoActiveStatusConverter attendInfoActiveStatusConverter; @@ -348,6 +347,62 @@ public AttendPenaltyRankingResponse getMyPenaltyRanking(int rankOffset) { return new AttendPenaltyRankingResponse(myPenaltyRank < rankOffset, (int) myPenaltyRank); } + @Override + public PageResponse getStatistics( + int page, int size, String activeStatus, Long startDate, Long endDate) { + + Sort.Order penaltyScore = Sort.Order.desc("penaltyScore"); + Sort.Order absent = Sort.Order.desc("absent"); + Sort.Order late = Sort.Order.desc("late"); + + Pageable pageable = PageRequest.of(page - 1, size, Sort.by(penaltyScore, absent, late)); + + Timestamp startTimestamp = + startDate == null + ? semesterPeriodProvider.getSemesterPeriod().getStartDate() + : new Timestamp(startDate); + Timestamp endTimestamp = + endDate == null + ? semesterPeriodProvider.getSemesterPeriod().getEndDate() + : new Timestamp(endDate); + + Page pages; + + if (activeStatus == null || activeStatus.equalsIgnoreCase("all")) + pages = + attendRepository.getStatistics( + startTimestamp, endTimestamp, AttendStatus.LATE, AttendStatus.ABSENT, pageable); + else + pages = + attendRepository.getStatistics( + startTimestamp, + endTimestamp, + AttendStatus.LATE, + AttendStatus.ABSENT, + ActiveStatus.find(activeStatus), + pageable); + + if (pages.getTotalElements() != 0) { + List statistics = + pages + .get() + .map( + obj -> + new MemberStatistics( + (Long) obj[0], + (String) obj[1], + ((ActiveStatus) obj[2]).getStatus(), + ((Long) obj[3]).intValue(), + ((Long) obj[4]).intValue(), + ((Long) obj[5]).intValue())) + .toList(); + + return new PageResponse<>(new PageImpl<>(statistics, pageable, pages.getTotalElements())); + } + + return new PageResponse<>(Page.empty(PageRequest.of(page - 1, size))); + } + private List findMyAttends(List programs) { Long memberId = RequestScope.getMemberId(); return attendRepository diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendTeamBuildingService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendTeamBuildingService.java index 77152f1c..26395430 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendTeamBuildingService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendTeamBuildingService.java @@ -8,8 +8,8 @@ import com.blackcompany.eeos.target.application.usecase.AttendTeamBuildingUsecase; import com.blackcompany.eeos.target.application.usecase.GetTargetInfoUsecase; import com.blackcompany.eeos.target.application.usecase.UpdateAttendTeamBuildingUsecase; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetEntity; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetRepository; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetEntity; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetRepository; import com.blackcompany.eeos.teamBuilding.application.model.TeamBuildingModel; import com.blackcompany.eeos.teamBuilding.application.model.converter.TeamBuildingEntityConverter; import com.blackcompany.eeos.teamBuilding.application.service.QueryTeamBuildingService; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightCalculator.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightCalculator.java index 4b5d2162..af1a071a 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightCalculator.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightCalculator.java @@ -3,7 +3,7 @@ import com.blackcompany.eeos.target.application.model.AttendStatus; import com.blackcompany.eeos.target.application.model.AttendWeightPolicyModel; import com.blackcompany.eeos.target.application.model.SignType; -import com.blackcompany.eeos.target.persistence.AttendWeightPolicyRepository; +import com.blackcompany.eeos.target.application.repository.AttendWeightPolicyRepository; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyService.java index 152d44f3..b786f0ed 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyService.java @@ -4,9 +4,9 @@ import com.blackcompany.eeos.target.application.model.AttendStatus; import com.blackcompany.eeos.target.application.model.AttendWeightPolicyModel; import com.blackcompany.eeos.target.application.model.SignType; +import com.blackcompany.eeos.target.application.repository.AttendWeightPolicyRepository; import com.blackcompany.eeos.target.application.usecase.CommandAttendWeightPolicyUsecase; import com.blackcompany.eeos.target.application.usecase.GetAttendWeightPolicyUsecase; -import com.blackcompany.eeos.target.persistence.AttendWeightPolicyRepository; import java.util.List; import java.util.Set; import java.util.stream.Collectors; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/QueryTeamBuildingTargetService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/QueryTeamBuildingTargetService.java index a807401d..b7e98a89 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/QueryTeamBuildingTargetService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/QueryTeamBuildingTargetService.java @@ -3,7 +3,7 @@ import com.blackcompany.eeos.target.application.exception.NotFoundTargetTeamBuildingException; import com.blackcompany.eeos.target.application.model.TeamBuildingTargetModel; import com.blackcompany.eeos.target.application.model.converter.TeamBuildingTargetEntityConverter; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetRepository; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetRepository; import java.util.List; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/TeamPresentService.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/TeamPresentService.java index 2f6c4a53..7e12ef47 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/service/TeamPresentService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/service/TeamPresentService.java @@ -1,9 +1,9 @@ package com.blackcompany.eeos.target.application.service; import com.blackcompany.eeos.target.application.usecase.PresentTeamUsecase; -import com.blackcompany.eeos.target.persistence.PresentationEntity; -import com.blackcompany.eeos.target.persistence.PresentationRepository; import com.blackcompany.eeos.target.persistence.converter.PresentationConverter; +import com.blackcompany.eeos.target.persistence.presentation.PresentationEntity; +import com.blackcompany.eeos.target.persistence.presentation.PresentationRepository; import com.blackcompany.eeos.team.application.exception.NotFoundTeamException; import com.blackcompany.eeos.team.application.model.converter.TeamEntityConverter; import com.blackcompany.eeos.team.persistence.TeamRepository; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/application/usecase/GetAttendantInfoUsecase.java b/eeos/src/main/java/com/blackcompany/eeos/target/application/usecase/GetAttendantInfoUsecase.java index 727bc8ee..cf8a0898 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/application/usecase/GetAttendantInfoUsecase.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/application/usecase/GetAttendantInfoUsecase.java @@ -5,6 +5,7 @@ import com.blackcompany.eeos.target.application.dto.AttendInfoWithProgramResponse; import com.blackcompany.eeos.target.application.dto.AttendPenaltyRankingResponse; import com.blackcompany.eeos.target.application.dto.AttendPenaltyResponse; +import com.blackcompany.eeos.target.application.dto.AttendStatisticsResponse.MemberStatistics; import com.blackcompany.eeos.target.application.dto.AttendSummaryInfoResponse; import com.blackcompany.eeos.target.application.dto.QueryAttendStatusResponse; import java.util.List; @@ -32,4 +33,7 @@ PageResponse getPenaltyInfos( AttendSummaryInfoResponse getMyAttendSummary(Long startDate, Long endDate); AttendPenaltyRankingResponse getMyPenaltyRanking(int rankOffset); + + PageResponse getStatistics( + int page, int size, String activeStatus, Long startDate, Long endDate); } diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java index 6fcc21b1..edfdd9ae 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendRepository.java @@ -1,5 +1,6 @@ package com.blackcompany.eeos.target.persistence; +import com.blackcompany.eeos.member.application.model.ActiveStatus; import com.blackcompany.eeos.target.application.model.AttendStatus; import jakarta.persistence.LockModeType; import java.sql.Timestamp; @@ -65,4 +66,39 @@ Page findAllByMemberIdAndCreatedDateGreaterThan( @Param("startDate") Timestamp startDate, @Param("endDate") Timestamp endDate, Pageable pageable); + + @Query( + "SELECT" + + " m.id," + + " m.name," + + " m.activeStatus," + + " SUM(CASE WHEN a.status = :late THEN 1 ELSE 0 END) as late," + + " SUM (CASE WHEN a.status = :absent THEN 1 ELSE 0 END ) as absent," + + " COALESCE(SUM (a.penaltyScore), 0) as penaltyScore " + + "FROM AttendEntity a JOIN MemberEntity m ON a.memberId=m.id WHERE a.createdDate >= :startDate AND a.createdDate <= :endDate " + + "GROUP BY m.id, m.name") + Page getStatistics( + @Param("startDate") Timestamp startDate, + @Param("endDate") Timestamp endDate, + @Param("late") AttendStatus late, + @Param("absent") AttendStatus absent, + Pageable pageable); + + @Query( + "SELECT" + + " m.id," + + " m.name," + + " m.activeStatus," + + " SUM(CASE WHEN a.status = :late THEN 1 ELSE 0 END) as late," + + " SUM (CASE WHEN a.status = :absent THEN 1 ELSE 0 END ) as absent," + + " COALESCE(SUM (a.penaltyScore), 0) as penaltyScore " + + "FROM AttendEntity a JOIN MemberEntity m ON a.memberId=m.id WHERE a.isDeleted=false AND a.createdDate >= :startDate AND a.createdDate <= :endDate AND m.activeStatus=:activeStatus " + + "GROUP BY m.id, m.name, m.activeStatus") + Page getStatistics( + @Param("startDate") Timestamp startDate, + @Param("endDate") Timestamp endDate, + @Param("late") AttendStatus late, + @Param("absent") AttendStatus absent, + @Param("activeStatus") ActiveStatus activeStatus, + Pageable pageable); } diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/converter/PresentationConverter.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/converter/PresentationConverter.java index 19c21fb9..0e66ae17 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/converter/PresentationConverter.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/converter/PresentationConverter.java @@ -1,6 +1,6 @@ package com.blackcompany.eeos.target.persistence.converter; -import com.blackcompany.eeos.target.persistence.PresentationEntity; +import com.blackcompany.eeos.target.persistence.presentation.PresentationEntity; import org.springframework.stereotype.Component; @Component diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyEntity.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyEntity.java similarity index 96% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyEntity.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyEntity.java index b6e3a6d8..32d25d3e 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyEntity.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyEntity.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.policy; import com.blackcompany.eeos.common.persistence.BaseEntity; import com.blackcompany.eeos.target.application.model.AttendStatus; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyRepositoryImpl.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyRepositoryImpl.java similarity index 92% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyRepositoryImpl.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyRepositoryImpl.java index ec75ee35..33ddcd99 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/AttendWeightPolicyRepositoryImpl.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/AttendWeightPolicyRepositoryImpl.java @@ -1,7 +1,8 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.policy; import com.blackcompany.eeos.target.application.model.AttendStatus; import com.blackcompany.eeos.target.application.model.AttendWeightPolicyModel; +import com.blackcompany.eeos.target.application.repository.AttendWeightPolicyRepository; import java.util.Collection; import java.util.List; import java.util.Set; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/JpaWeightPolicyRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/JpaWeightPolicyRepository.java similarity index 88% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/JpaWeightPolicyRepository.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/JpaWeightPolicyRepository.java index 0aad821b..f7b790e6 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/JpaWeightPolicyRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/policy/JpaWeightPolicyRepository.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.policy; import com.blackcompany.eeos.target.application.model.AttendStatus; import java.util.Collection; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/PresentationEntity.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationEntity.java similarity index 95% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/PresentationEntity.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationEntity.java index 2091150c..027ed5ba 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/PresentationEntity.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationEntity.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.presentation; import com.blackcompany.eeos.common.persistence.BaseEntity; import jakarta.persistence.Column; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/PresentationRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationRepository.java similarity index 89% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/PresentationRepository.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationRepository.java index 2fd18a5c..a582dc60 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/PresentationRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/presentation/PresentationRepository.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.presentation; import com.blackcompany.eeos.team.persistence.TeamEntity; import java.util.List; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/ProgramRankCounterEntity.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterEntity.java similarity index 95% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/ProgramRankCounterEntity.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterEntity.java index 3f2abe90..551a3a3c 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/ProgramRankCounterEntity.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterEntity.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.rank; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/ProgramRankCounterRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterRepository.java similarity index 92% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/ProgramRankCounterRepository.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterRepository.java index b8073c54..bdb960fb 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/ProgramRankCounterRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/rank/ProgramRankCounterRepository.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.rank; import jakarta.persistence.LockModeType; import java.util.Optional; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingInputDataEntity.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputDataEntity.java similarity index 94% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingInputDataEntity.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputDataEntity.java index dfe45d2a..58080181 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingInputDataEntity.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputDataEntity.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.teambuilding; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingInputStatus.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputStatus.java similarity index 90% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingInputStatus.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputStatus.java index 0c21d571..c3320806 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingInputStatus.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingInputStatus.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.teambuilding; import com.blackcompany.eeos.target.application.exception.NotFoundTeamBuildingInputStatus; import java.util.Arrays; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingTargetEntity.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetEntity.java similarity index 96% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingTargetEntity.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetEntity.java index a683e8ab..633ec5e4 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingTargetEntity.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetEntity.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.teambuilding; import com.blackcompany.eeos.common.persistence.BaseEntity; import jakarta.persistence.Column; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingTargetRepository.java b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetRepository.java similarity index 87% rename from eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingTargetRepository.java rename to eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetRepository.java index f93e7e51..e46ce8fb 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/persistence/TeamBuildingTargetRepository.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/persistence/teambuilding/TeamBuildingTargetRepository.java @@ -1,4 +1,4 @@ -package com.blackcompany.eeos.target.persistence; +package com.blackcompany.eeos.target.persistence.teambuilding; import java.util.List; import java.util.Optional; diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/presentation/controller/AttendController.java b/eeos/src/main/java/com/blackcompany/eeos/target/presentation/controller/AttendController.java index 1de162d1..e150daa2 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/presentation/controller/AttendController.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/presentation/controller/AttendController.java @@ -11,6 +11,7 @@ import com.blackcompany.eeos.target.application.dto.AttendInfosSearchRequest; import com.blackcompany.eeos.target.application.dto.AttendPenaltyRankingResponse; import com.blackcompany.eeos.target.application.dto.AttendPenaltyResponse; +import com.blackcompany.eeos.target.application.dto.AttendStatisticsResponse.MemberStatistics; import com.blackcompany.eeos.target.application.dto.AttendSummaryInfoResponse; import com.blackcompany.eeos.target.application.dto.ChangeAttendStatusResponse; import com.blackcompany.eeos.target.application.dto.PenaltyInfoRequest; @@ -139,4 +140,18 @@ public ApiResponse> getMyPenaltyRankin AttendPenaltyRankingResponse response = getAttendantInfoUsecase.getMyPenaltyRanking(rankOffset); return ApiResponseGenerator.success(response, HttpStatus.OK, MessageCode.GET); } + + @Override + @GetMapping("/attend/statistic") + public ApiResponse>> getStatistics( + @RequestParam("size") int size, + @RequestParam("page") int page, + @RequestParam("activeStatus") String activeStatus, + @RequestParam(value = "startDate", required = false) Long startDate, + @RequestParam(value = "endDate", required = false) Long endDate) { + PageResponse response = + getAttendantInfoUsecase.getStatistics(page, size, activeStatus, startDate, endDate); + + return ApiResponseGenerator.success(response, HttpStatus.OK, MessageCode.CREATE); + } } diff --git a/eeos/src/main/java/com/blackcompany/eeos/target/presentation/docs/AttendApi.java b/eeos/src/main/java/com/blackcompany/eeos/target/presentation/docs/AttendApi.java index 9e38ba99..482e8ca2 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/target/presentation/docs/AttendApi.java +++ b/eeos/src/main/java/com/blackcompany/eeos/target/presentation/docs/AttendApi.java @@ -8,6 +8,7 @@ import com.blackcompany.eeos.target.application.dto.AttendInfosSearchRequest; import com.blackcompany.eeos.target.application.dto.AttendPenaltyRankingResponse; import com.blackcompany.eeos.target.application.dto.AttendPenaltyResponse; +import com.blackcompany.eeos.target.application.dto.AttendStatisticsResponse.MemberStatistics; import com.blackcompany.eeos.target.application.dto.AttendSummaryInfoResponse; import com.blackcompany.eeos.target.application.dto.ChangeAttendStatusResponse; import com.blackcompany.eeos.target.application.dto.PenaltyInfoRequest; @@ -73,4 +74,8 @@ ApiResponse> getMyAttendSummaryInfo( @Operation(summary = "나의 벌점 순위 조회", description = "나의 벌점 순위를 조회합니다.") ApiResponse> getMyPenaltyRankingInfo(int rankOffset); + + @Operation(summary = "전체 출석 통계 조회", description = "전체 회원의 출석 통계를 조회합니다.") + ApiResponse>> getStatistics( + int size, int page, String memberStatus, Long startDate, Long endDate); } diff --git a/eeos/src/main/java/com/blackcompany/eeos/team/application/Service/TeamService.java b/eeos/src/main/java/com/blackcompany/eeos/team/application/Service/TeamService.java index 70f65aa3..0e9bafe8 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/team/application/Service/TeamService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/team/application/Service/TeamService.java @@ -1,7 +1,7 @@ package com.blackcompany.eeos.team.application.Service; import com.blackcompany.eeos.member.application.service.QueryMemberService; -import com.blackcompany.eeos.target.persistence.PresentationRepository; +import com.blackcompany.eeos.target.persistence.presentation.PresentationRepository; import com.blackcompany.eeos.team.application.dto.CreateTeamRequest; import com.blackcompany.eeos.team.application.dto.CreateTeamResponse; import com.blackcompany.eeos.team.application.dto.QueryTeamsResponse; diff --git a/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/event/DeletedTeamBuildingEventListener.java b/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/event/DeletedTeamBuildingEventListener.java index 02d2a2de..294b0852 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/event/DeletedTeamBuildingEventListener.java +++ b/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/event/DeletedTeamBuildingEventListener.java @@ -1,6 +1,6 @@ package com.blackcompany.eeos.teamBuilding.application.event; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetRepository; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; diff --git a/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/service/CommandTeamBuildingTargetMemberService.java b/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/service/CommandTeamBuildingTargetMemberService.java index 20bce62d..d8d08eaf 100644 --- a/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/service/CommandTeamBuildingTargetMemberService.java +++ b/eeos/src/main/java/com/blackcompany/eeos/teamBuilding/application/service/CommandTeamBuildingTargetMemberService.java @@ -6,8 +6,8 @@ import com.blackcompany.eeos.target.application.model.converter.TeamBuildingTargetEntityConverter; import com.blackcompany.eeos.target.application.service.CommandTargetMemberService; import com.blackcompany.eeos.target.application.service.SelectTargetMemberService; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetEntity; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetRepository; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetEntity; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetRepository; import java.util.List; import java.util.stream.Collectors; import org.springframework.stereotype.Service; diff --git a/eeos/src/test/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyServiceTest.java b/eeos/src/test/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyServiceTest.java index 0a3f13e2..045c5acb 100644 --- a/eeos/src/test/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyServiceTest.java +++ b/eeos/src/test/java/com/blackcompany/eeos/target/application/service/AttendWeightPolicyServiceTest.java @@ -9,7 +9,7 @@ import com.blackcompany.eeos.target.application.model.AttendStatus; import com.blackcompany.eeos.target.application.model.AttendWeightPolicyModel; import com.blackcompany.eeos.target.application.model.SignType; -import com.blackcompany.eeos.target.persistence.AttendWeightPolicyRepository; +import com.blackcompany.eeos.target.application.repository.AttendWeightPolicyRepository; import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/eeos/src/test/java/com/blackcompany/eeos/target/application/service/SelectTeamBuildingCommandTargetMemberServiceTest.java b/eeos/src/test/java/com/blackcompany/eeos/target/application/service/SelectTeamBuildingCommandTargetMemberServiceTest.java index af769f9c..33c3dc1c 100644 --- a/eeos/src/test/java/com/blackcompany/eeos/target/application/service/SelectTeamBuildingCommandTargetMemberServiceTest.java +++ b/eeos/src/test/java/com/blackcompany/eeos/target/application/service/SelectTeamBuildingCommandTargetMemberServiceTest.java @@ -11,7 +11,7 @@ import com.blackcompany.eeos.target.application.dto.TargetMember; import com.blackcompany.eeos.target.application.model.converter.TeamBuildingTargetEntityConverter; import com.blackcompany.eeos.target.fixture.TargetMemberFixture; -import com.blackcompany.eeos.target.persistence.TeamBuildingTargetRepository; +import com.blackcompany.eeos.target.persistence.teambuilding.TeamBuildingTargetRepository; import com.blackcompany.eeos.teamBuilding.application.dto.TeamBuildingMember; import com.blackcompany.eeos.teamBuilding.application.service.CommandTeamBuildingTargetMemberService; import java.util.List;