Skip to content

Commit

Permalink
Merge pull request #206 from sopt-makers/sohyeon_#203
Browse files Browse the repository at this point in the history
[ADD] 응답 데이터 총 개수 추가
  • Loading branch information
thguss authored Dec 7, 2023
2 parents 58c4fc2 + 9131e32 commit e36725c
Show file tree
Hide file tree
Showing 14 changed files with 98 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@
import lombok.Builder;

public record AlarmsResponseDTO(
List<AlarmVO> alarms
List<AlarmVO> alarms,
int totalCount
) {
public static AlarmsResponseDTO of(List<Alarm> alarms) {
return new AlarmsResponseDTO(alarms.stream().map(AlarmVO::of).toList());
public static AlarmsResponseDTO of(List<Alarm> alarms, int totalCount) {
return new AlarmsResponseDTO(alarms.stream().map(AlarmVO::of).toList(), totalCount);
}

@Builder
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.sopt.makers.operation.dto.attendance;

import java.util.List;

import org.sopt.makers.operation.entity.Attendance;

public record AttendancesResponseDTO(
List<MemberResponseDTO> attendances,
int totalCount
) {
public static AttendancesResponseDTO of(List<Attendance> attendances, int totalCount) {
return new AttendancesResponseDTO(
attendances.stream().map(MemberResponseDTO::of).toList(),
totalCount);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.sopt.makers.operation.dto.member;

import java.util.List;

public record MembersResponseDTO(
List<MemberListGetResponse> members,
int totalCount
) {
public static MembersResponseDTO of(List<MemberListGetResponse> members, int totalCount) {
return new MembersResponseDTO(members, totalCount);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@

public interface AlarmCustomRepository {
List<Alarm> getAlarms(Integer generation, Part part, Status status, Pageable pageable);
int countByGenerationAndPartAndStatus(int generation, Part part, Status status);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.sopt.makers.operation.repository.alarm;

import static java.util.Objects.*;
import static org.sopt.makers.operation.entity.Part.*;
import static org.sopt.makers.operation.entity.alarm.QAlarm.*;

import java.util.List;
Expand Down Expand Up @@ -37,12 +36,25 @@ public List<Alarm> getAlarms(Integer generation, Part part, Status status, Pagea
.fetch();
}

@Override
public int countByGenerationAndPartAndStatus(int generation, Part part, Status status) {
return Math.toIntExact(queryFactory
.select(alarm.count())
.from(alarm)
.where(
generationEq(generation),
partEq(part),
statusEq(status)
)
.fetchFirst());
}

private BooleanExpression generationEq(Integer generation) {
return nonNull(generation) ? alarm.generation.eq(generation) : null;
}

private BooleanExpression partEq(Part part) {
return (nonNull(part) && !part.equals(ALL)) ? alarm.part.eq(part) : null;
return nonNull(part) ? alarm.part.eq(part) : null;
}

private BooleanExpression statusEq(Status status) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@ public interface AttendanceCustomRepository {
List<Attendance> findByMember(Member member);
List<Attendance> findCurrentAttendanceByMember(Long playGroundId);
List<SubAttendance> findSubAttendanceByAttendanceId(Long attendanceId);
int countByLectureIdAndPart(long lectureId, Part part);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.sopt.makers.operation.repository.attendance;

import static com.querydsl.core.types.dsl.Expressions.*;
import static org.sopt.makers.operation.entity.Part.*;
import static java.util.Objects.*;
import static org.sopt.makers.operation.entity.QAttendance.*;
import static org.sopt.makers.operation.entity.QMember.*;
import static org.sopt.makers.operation.entity.QSubAttendance.*;
Expand Down Expand Up @@ -115,7 +115,20 @@ public List<SubAttendance> findSubAttendanceByAttendanceId(Long attendanceId) {
.fetch();
}

@Override
public int countByLectureIdAndPart(long lectureId, Part part) {
return Math.toIntExact(queryFactory
.select(attendance.count())
.from(attendance)
.where(
attendance.lecture.id.eq(lectureId),
nonNull(part) ? attendance.lecture.part.eq(part) : null
)
.fetchFirst()
);
}

private BooleanExpression partEq(Part part) {
return (part == null || part.equals(ALL)) ? null : member.part.eq(part);
return nonNull(part) ? member.part.eq(part) : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@

import org.sopt.makers.operation.dto.member.MemberSearchCondition;
import org.sopt.makers.operation.entity.Member;
import org.sopt.makers.operation.entity.Part;
import org.springframework.data.domain.Pageable;

public interface MemberCustomRepository {
List<Member> search(MemberSearchCondition condition, Pageable pageable);
List<Member> search(MemberSearchCondition condition);
Optional<Member> find(Long memberId);
int countByGenerationAndPart(int generation, Part part);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.sopt.makers.operation.repository.member;

import static java.util.Objects.*;
import static org.sopt.makers.operation.entity.Part.*;
import static org.sopt.makers.operation.entity.QAttendance.*;
import static org.sopt.makers.operation.entity.QMember.*;
import static org.sopt.makers.operation.entity.lecture.QLecture.*;
Expand Down Expand Up @@ -67,6 +68,18 @@ public Optional<Member> find(Long memberId) {
.stream().findFirst();
}

@Override
public int countByGenerationAndPart(int generation, Part part) {
return Math.toIntExact(queryFactory
.select(member.count())
.from(member)
.where(
member.generation.eq(generation),
(nonNull(part) && !part.equals(ALL)) ? member.part.eq(part) : null
)
.fetchFirst());
}

private BooleanExpression partEq(Part part) {
return nonNull(part) ? member.part.eq(part) : null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,8 @@ public Long createAlarm(AlarmRequestDTO requestDTO) {
@Override
public AlarmsResponseDTO getAlarms(Integer generation, Part part, Status status, Pageable pageable) {
val alarms = alarmRepository.getAlarms(generation, part, status, pageable);
return AlarmsResponseDTO.of(alarms);
val alarmsCount = alarmRepository.countByGenerationAndPartAndStatus(generation, part, status);
return AlarmsResponseDTO.of(alarms, alarmsCount);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ public interface AttendanceService {
SubAttendanceUpdateResponseDTO updateSubAttendance(SubAttendanceUpdateRequestDTO requestDTO);
AttendanceMemberResponseDTO findAttendancesByMember(Long memberId);
float updateMemberScore(Long memberId);
List<MemberResponseDTO> findAttendancesByLecture(Long lectureId, Part part, Pageable pageable);
AttendancesResponseDTO findAttendancesByLecture(Long lectureId, Part part, Pageable pageable);
AttendResponseDTO attend(Long playGroundId, AttendRequestDTO requestDTO);
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,10 @@ public float updateMemberScore(Long memberId) {
}

@Override
public List<MemberResponseDTO> findAttendancesByLecture(Long lectureId, Part part, Pageable pageable) {
public AttendancesResponseDTO findAttendancesByLecture(Long lectureId, Part part, Pageable pageable) {
val attendances = attendanceRepository.findByLecture(lectureId, part, pageable);
return attendances.stream().map(MemberResponseDTO::of).toList();
val attendancesCount = attendanceRepository.countByLectureIdAndPart(lectureId, part);
return AttendancesResponseDTO.of(attendances, attendancesCount);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
import org.sopt.makers.operation.dto.member.MemberListGetResponse;
import org.sopt.makers.operation.dto.member.MemberRequestDTO;
import org.sopt.makers.operation.dto.member.MemberScoreGetResponse;
import org.sopt.makers.operation.dto.member.MembersResponseDTO;
import org.sopt.makers.operation.entity.Part;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface MemberService {
List<MemberListGetResponse> getMemberList(Part part, int generation, Pageable pageable);
MembersResponseDTO getMemberList(Part part, int generation, Pageable pageable);
AttendanceTotalResponseDTO getMemberTotalAttendance(Long playGroundId);
MemberScoreGetResponse getMemberScore(Long playGroundId);
void createMember(MemberRequestDTO requestDTO);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.sopt.makers.operation.dto.member.MemberRequestDTO;
import org.sopt.makers.operation.dto.member.MemberScoreGetResponse;
import org.sopt.makers.operation.dto.member.MemberSearchCondition;
import org.sopt.makers.operation.dto.member.MembersResponseDTO;
import org.sopt.makers.operation.entity.AttendanceStatus;
import org.sopt.makers.operation.entity.Member;
import org.sopt.makers.operation.entity.Part;
Expand All @@ -38,19 +39,21 @@ public class MemberServiceImpl implements MemberService {
private int currentGeneration;

@Override
public List<MemberListGetResponse> getMemberList(Part part, int generation, Pageable pageable) {
if(part.equals(Part.ALL)) {
public MembersResponseDTO getMemberList(Part part, int generation, Pageable pageable) {
if (part.equals(Part.ALL)) {
part = null;
}

val members = memberRepository.search(new MemberSearchCondition(part, generation), pageable);
val members = memberRepository.search(new MemberSearchCondition(part, generation), pageable)
.stream().map(member -> {
val attendances = findAttendances(member);
val countAttendance = countAttendance(attendances);
val total = translateAttendanceStatus(countAttendance);
return MemberListGetResponse.of(member, total);
}).toList();
val membersCount = memberRepository.countByGenerationAndPart(generation, part);

return members.stream().map(member -> {
val attendances = findAttendances(member);
val countAttendance = countAttendance(attendances);
val total = translateAttendanceStatus(countAttendance);
return MemberListGetResponse.of(member, total);
}).toList();
return MembersResponseDTO.of(members, membersCount);
}

@Override
Expand Down

0 comments on commit e36725c

Please sign in to comment.