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

[#133] feat: 선택 한 날짜의 실패 기록을 카테고리별로 조회 #135

Merged
merged 1 commit into from
Oct 26, 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 @@ -4,6 +4,7 @@
import com.todaysfail.domains.failure.domain.Failure;
import com.todaysfail.domains.failure.port.FailureQueryPort;
import com.todaysfail.domains.failure.repository.FailureRepository;
import java.time.LocalDate;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
Expand All @@ -30,4 +31,9 @@ public List<Failure> queryFailureByUserId(Long userId) {
public List<Integer> queryDailyStatusByYearMonth(int year, int month) {
return failureRepository.findDailyStatusByYearMonth(year, month);
}

@Override
public List<Failure> queryFailureByUserIdAndDate(Long userId, LocalDate date) {
return failureRepository.findAllByUserIdAndFailureDate(userId, date);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.todaysfail.domains.failure.port;

import com.todaysfail.domains.failure.domain.Failure;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
Expand All @@ -11,4 +12,6 @@ public interface FailureQueryPort {
List<Failure> queryFailureByUserId(Long userId);

List<Integer> queryDailyStatusByYearMonth(int year, int month);

List<Failure> queryFailureByUserIdAndDate(Long userId, LocalDate date);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.todaysfail.domains.failure.repository;

import com.todaysfail.domains.failure.domain.Failure;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
Expand All @@ -18,4 +19,6 @@ public interface FailureRepository extends JpaRepository<Failure, Long> {
+ "and month(f.failureDate) = :month "
+ "group by DAY(f.failureDate)")
List<Integer> findDailyStatusByYearMonth(int year, int month);

List<Failure> findAllByUserIdAndFailureDate(Long userId, LocalDate date);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,25 @@

import com.todaysfail.api.web.common.SliceResponse;
import com.todaysfail.api.web.failure.dto.request.FailureRegisterRequest;
import com.todaysfail.api.web.failure.dto.response.FailureByCategoryResponse;
import com.todaysfail.api.web.failure.dto.response.FailureMonthlyDailyStatusResponse;
import com.todaysfail.api.web.failure.dto.response.FailureResponse;
import com.todaysfail.api.web.failure.usecase.FailureByCategoryQueryUseCase;
import com.todaysfail.api.web.failure.usecase.FailureFeedQueryUseCase;
import com.todaysfail.api.web.failure.usecase.FailureLikeUseCase;
import com.todaysfail.api.web.failure.usecase.FailureMonthlyDailyStatusUseCase;
import com.todaysfail.api.web.failure.usecase.FailureRegisterUseCase;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.time.LocalDate;
import java.time.YearMonth;
import javax.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springdoc.api.annotations.ParameterObject;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
Expand All @@ -35,6 +39,7 @@ public class FailureController {
private final FailureFeedQueryUseCase failureFeedQueryUseCase;
private final FailureLikeUseCase failureLikeUseCase;
private final FailureMonthlyDailyStatusUseCase failureMonthlyDailyStatusUseCase;
private final FailureByCategoryQueryUseCase failureByCategoryQueryUseCase;

@Operation(summary = "실패 등록")
@PostMapping
Expand All @@ -60,4 +65,11 @@ public void likeFailure(@PathVariable Long failureId) {
public FailureMonthlyDailyStatusResponse checkMonthFailures(@RequestParam YearMonth yearMonth) {
return failureMonthlyDailyStatusUseCase.execute(yearMonth);
}

@Operation(summary = "선택 한 날짜의 실패 기록을 카테고리별로 조회")
@GetMapping("/{date}")
public FailureByCategoryResponse getFailures(
@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) {
return failureByCategoryQueryUseCase.execute(date);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.todaysfail.api.web.failure.dto.response;

import java.util.List;
import java.util.Map;

public record FailureByCategoryResponse(Map<Long, List<FailureResponse>> response) {}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.todaysfail.domains.user.domain.User;
import com.todaysfail.domains.user.port.UserQueryPort;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Slice;

Expand All @@ -34,4 +35,10 @@ public FailureResponse toFailureResponse(Failure failure) {
public SliceResponse<FailureResponse> toFailureSliceResponse(Slice<Failure> failureSlice) {
return SliceResponse.of(failureSlice.map(failure -> toFailureResponse(failure)));
}

public List<FailureResponse> toFailureListResponse(List<Failure> failures) {
return failures.stream()
.map(failure -> toFailureResponse(failure))
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.todaysfail.api.web.failure.usecase;

import com.todaysfail.api.web.failure.dto.response.FailureByCategoryResponse;
import com.todaysfail.api.web.failure.dto.response.FailureResponse;
import com.todaysfail.api.web.failure.mapper.FailureMapper;
import com.todaysfail.common.annotation.UseCase;
import com.todaysfail.config.security.SecurityUtils;
import com.todaysfail.domains.failure.domain.Failure;
import com.todaysfail.domains.failure.port.FailureQueryPort;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;

@UseCase
@RequiredArgsConstructor
public class FailureByCategoryQueryUseCase {
private final FailureMapper failureMapper;
private final FailureQueryPort failureQueryPort;

public FailureByCategoryResponse execute(final LocalDate date) {
final Long userId = SecurityUtils.getCurrentUserId();
List<Failure> failures = failureQueryPort.queryFailureByUserIdAndDate(userId, date);
Map<Long, List<FailureResponse>> map =
failureMapper.toFailureListResponse(failures).stream()
.collect(
Collectors.groupingBy(
failureResponse ->
failureResponse.category().categoryId()));
return new FailureByCategoryResponse(map);
}
}
Loading