Skip to content

Commit

Permalink
Merge pull request #74 from teamterning/fix/#66
Browse files Browse the repository at this point in the history
[✨fix/#66] 캘린더 관련 로직 & 홈화면 > 맞춤공고 추가 수정
  • Loading branch information
junggyo1020 authored Jul 17, 2024
2 parents 6e0aa2e + 029fb58 commit 2a19e26
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@

@Builder(access = PRIVATE)
public record SignUpFilterRequestDto(
@NonNull int grade,
@NonNull int workingPeriod,
@NonNull int startYear,
@NonNull int startMonth
int grade,
int workingPeriod,
int startYear,
int startMonth

) {
public static SignUpFilterRequestDto of(int grade, int workingPeriod, int startYear, int startMonth) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
@Builder(access = PRIVATE)
public record SignUpRequestDto(
@NonNull String name,
@NonNull int profileImage,
int profileImage,
@NonNull AuthType authType
) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,19 @@

@Builder
public record HomeResponseDto(
Long scrapId,
Long intershipAnnouncementId,
String title,
String dDay,
String workingPeriod,
String companyImage,
boolean isScrapped
) {
public static HomeResponseDto of(final InternshipAnnouncement internshipAnnouncement, final boolean isScrapped){
public static HomeResponseDto of(final Long scrapId, final InternshipAnnouncement internshipAnnouncement, final boolean isScrapped){
String dDay = DateUtil.convert(internshipAnnouncement.getDeadline()); // dDay 계산 로직 추가

return HomeResponseDto.builder()
.scrapId(scrapId)
.intershipAnnouncementId(internshipAnnouncement.getId())
.title(internshipAnnouncement.getTitle())
.dDay(dDay)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,16 @@
import org.terning.terningserver.domain.InternshipAnnouncement;
import org.terning.terningserver.domain.Scrap;

import java.time.LocalDate;
import java.util.List;

public interface ScrapRepositoryCustom {
Long findScrapIdByInternshipAnnouncementIdAndUserId(Long internshipAnnouncementId, Long userId);

List<Scrap> findAllByInternshipAndUserId(List<InternshipAnnouncement> internshipAnnouncements, Long userId);

List<Scrap> findScrapsByUserIdAndDeadlineBetweenOrderByDeadline(Long userId, LocalDate start, LocalDate end);

List<Scrap> findScrapsByUserIdAndDeadlineOrderByDeadline(Long userId, LocalDate deadline);

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.terning.terningserver.domain.InternshipAnnouncement;
import org.terning.terningserver.domain.Scrap;

import java.time.LocalDate;
import java.util.List;

import static org.terning.terningserver.domain.QScrap.scrap;
Expand All @@ -22,4 +23,34 @@ public List<Scrap> findAllByInternshipAndUserId(List<InternshipAnnouncement> int
.where(scrap.internshipAnnouncement.in(internshipAnnouncements), scrap.user.id.eq(userId))
.fetch();
}

@Override
public Long findScrapIdByInternshipAnnouncementIdAndUserId(Long internshipAnnouncementId, Long userId) {
return jpaQueryFactory
.select(scrap.id)
.from(scrap)
.where(scrap.internshipAnnouncement.id.eq(internshipAnnouncementId)
.and(scrap.user.id.eq(userId)))
.fetchOne();
}

@Override
public List<Scrap> findScrapsByUserIdAndDeadlineBetweenOrderByDeadline(Long userId, LocalDate start, LocalDate end){
return jpaQueryFactory
.selectFrom(scrap)
.where(scrap.user.id.eq(userId)
.and(scrap.internshipAnnouncement.deadline.between(start, end)))
.orderBy(scrap.internshipAnnouncement.deadline.asc())
.fetch();
}

@Override
public List<Scrap> findScrapsByUserIdAndDeadlineOrderByDeadline(Long userId, LocalDate deadline){
return jpaQueryFactory
.selectFrom(scrap)
.where(scrap.user.id.eq(userId)
.and(scrap.internshipAnnouncement.deadline.eq(deadline)))
.orderBy(scrap.internshipAnnouncement.deadline.asc())
.fetch();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.terning.terningserver.domain.InternshipAnnouncement;
import org.terning.terningserver.domain.Scrap;
import org.terning.terningserver.domain.User;
import org.terning.terningserver.dto.user.response.HomeResponseDto;
import org.terning.terningserver.exception.CustomException;
Expand Down Expand Up @@ -32,8 +33,9 @@ public List<HomeResponseDto> getAnnouncements(Long userId, String sortBy, int st
return announcements.stream()
.map(announcement -> {
boolean isScrapped = scrapRepository.existsByInternshipAnnouncementIdAndUserId(announcement.getId(), userId);
return HomeResponseDto.of(announcement, isScrapped);
Long scrapId = isScrapped ? scrapRepository.findScrapIdByInternshipAnnouncementIdAndUserId(announcement.getId(), userId) : null;
return HomeResponseDto.of(scrapId, announcement, isScrapped);
})
.collect(Collectors.toList());
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,14 @@ public List<MonthlyDefaultResponseDto> getMonthlyScraps(Long userId, int year, i
LocalDate start = LocalDate.of(year, month, 1);
LocalDate end = start.plusMonths(1).minusDays(1);

List<Scrap> scraps = scrapRepository.findByUserIdAndInternshipAnnouncement_DeadlineBetween(userId, start, end);
List<Scrap> scraps = scrapRepository.findScrapsByUserIdAndDeadlineBetweenOrderByDeadline(userId, start, end);

//deadline 별로 그룹화
Map<LocalDate, List<Scrap>> scrapsByDeadline = scraps.stream()
.collect(Collectors.groupingBy(s -> s.getInternshipAnnouncement().getDeadline()));

return scrapsByDeadline.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.map(entry -> MonthlyDefaultResponseDto.of(
entry.getKey().toString(),
entry.getValue().stream()
Expand All @@ -79,13 +80,14 @@ public List<MonthlyListResponseDto> getMonthlyScrapsAsList(Long userId, int year
LocalDate start = LocalDate.of(year, month, 1);
LocalDate end = start.plusMonths(1).minusDays(1);

List<Scrap> scraps = scrapRepository.findByUserIdAndInternshipAnnouncement_DeadlineBetween(userId, start, end);
List<Scrap> scraps = scrapRepository.findScrapsByUserIdAndDeadlineBetweenOrderByDeadline(userId, start, end);

//deadline 별로 그룹화
Map<LocalDate, List<Scrap>> scrapsByDeadline = scraps.stream()
.collect(Collectors.groupingBy(s -> s.getInternshipAnnouncement().getDeadline()));

return scrapsByDeadline.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.map(entry -> MonthlyListResponseDto.of(
entry.getKey().toString(),
entry.getValue().stream()
Expand All @@ -107,7 +109,7 @@ public List<MonthlyListResponseDto> getMonthlyScrapsAsList(Long userId, int year

@Override
public List<DailyScrapResponseDto> getDailyScraps(Long userId, LocalDate date) {
return scrapRepository.findByUserIdAndInternshipAnnouncement_Deadline(userId, date).stream()
return scrapRepository.findScrapsByUserIdAndDeadlineOrderByDeadline(userId, date).stream()
.map(DailyScrapResponseDto::of)
.toList();
}
Expand Down

0 comments on commit 2a19e26

Please sign in to comment.