Skip to content
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 @@ -2,6 +2,7 @@

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

import kr.tennispark.activity.common.domain.Activity;
import kr.tennispark.activity.common.domain.ActivityApplication;
import kr.tennispark.activity.common.domain.enums.ActivityType;
Expand All @@ -11,7 +12,9 @@
import kr.tennispark.web.activity.infrastructure.repository.WebAdminActivityRepository;
import kr.tennispark.web.activity.presentation.dto.ActivityApplicationRowDTO;
import kr.tennispark.web.activity.presentation.dto.GetWeeklyActivityApplicationsResponse;
import kr.tennispark.web.activity.presentation.dto.GetActivityApplicationsResponse;
import lombok.RequiredArgsConstructor;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -23,20 +26,47 @@ public class WebActivityApplicationQueryService {
private final WebAdminActivityRepository activityRepository;
private final WebAdminActivityApplicationRepository applicationRepository;

/**
* 기존 기능 — 이번 주 활동 조회
*/
public GetWeeklyActivityApplicationsResponse getThisWeeksApplication(ActivityType type) {

LocalDate fromDate = WeekPeriod.thisWeek().start();

List<Activity> activities = activityRepository.findFromDate(fromDate, type);

List<ActivityApplicationRowDTO> rows = activities.stream()
.map(a -> {
List<ActivityApplication> approved = applicationRepository.findAllByActivityAndStatus(
a, ApplicationStatus.APPROVED
);
List<ActivityApplication> approved =
applicationRepository.findAllByActivityAndStatus(a, ApplicationStatus.APPROVED);
return ActivityApplicationRowDTO.of(a, approved);
})
.toList();

return new GetWeeklyActivityApplicationsResponse(rows);
}

/**
* 신규 기능 — 기간 조회
*/
public GetActivityApplicationsResponse getApplications(
ActivityType type,
LocalDate fromDate,
LocalDate toDate
) {
System.out.println("[DEBUG] type = " + type);
System.out.println("[DEBUG] fromDate = " + fromDate);
System.out.println("[DEBUG] toDate = " + toDate);
List<Activity> activities = activityRepository.findActivities(type, fromDate, toDate);

List<ActivityApplicationRowDTO> rows = activities.stream()
.map(a -> {
List<ActivityApplication> approved =
applicationRepository.findAllByActivityAndStatus(a, ApplicationStatus.APPROVED);
return ActivityApplicationRowDTO.of(a, approved);
})
.toList();

return new GetActivityApplicationsResponse(rows);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

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

import kr.tennispark.activity.common.domain.Activity;
import kr.tennispark.activity.common.domain.enums.ActivityType;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand All @@ -12,14 +14,37 @@
@Repository
public interface WebAdminActivityRepository extends JpaRepository<Activity, Long> {

/**
* 기존 API — 특정 날짜 이후 조회 (이번 주)
*/
@Query("""
SELECT a
FROM Activity a
WHERE a.date >= :fromDate
AND a.type = :type
AND a.type = :type
AND a.status = true
ORDER BY a.date ASC, a.scheduledTime.beginAt ASC, a.id ASC
""")
List<Activity> findFromDate(@Param("fromDate") LocalDate fromDate, ActivityType type);
List<Activity> findFromDate(
@Param("fromDate") LocalDate fromDate,
@Param("type") ActivityType type
);

/**
* 신규 기능 — 날짜 범위 조회
*/
@Query("""
SELECT a
FROM Activity a
WHERE (:fromDate IS NULL OR a.date >= :fromDate)
AND (:toDate IS NULL OR a.date <= :toDate)
AND a.type = :type
AND a.status = true
ORDER BY a.date ASC, a.scheduledTime.beginAt ASC, a.id ASC
""")
List<Activity> findActivities(
@Param("type") ActivityType type,
@Param("fromDate") LocalDate fromDate,
@Param("toDate") LocalDate toDate
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@
import kr.tennispark.common.utils.ApiUtils.ApiResult;
import kr.tennispark.web.activity.application.service.WebActivityApplicationQueryService;
import kr.tennispark.web.activity.presentation.dto.GetWeeklyActivityApplicationsResponse;
import kr.tennispark.web.activity.presentation.dto.GetActivityApplicationsResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;

@RestController
@RequiredArgsConstructor
Expand All @@ -19,11 +20,32 @@ public class WebAdminActivityQueryController {

private final WebActivityApplicationQueryService activityApplicationQueryService;

/**
* 기존 API — 이번 주 활동 조회
*/
@GetMapping("/applications/week")
public ResponseEntity<ApiResult<GetWeeklyActivityApplicationsResponse>> getWeeklyApplications(@RequestParam
ActivityType type) {
GetWeeklyActivityApplicationsResponse response = activityApplicationQueryService.getThisWeeksApplication(type);
public ResponseEntity<ApiResult<GetWeeklyActivityApplicationsResponse>> getWeeklyApplications(
@RequestParam ActivityType type
) {
GetWeeklyActivityApplicationsResponse response =
activityApplicationQueryService.getThisWeeksApplication(type);
return ResponseEntity.ok(ApiUtils.success(response));
}

/**
* 신규 API — 기간 조회 (/applications/search)
* LocalDate 파싱 명확화(@DateTimeFormat)
*/
@GetMapping("/applications/search")
public ResponseEntity<ApiResult<GetActivityApplicationsResponse>> searchApplications(
@RequestParam ActivityType type,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromDate,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toDate
) {
GetActivityApplicationsResponse response =
activityApplicationQueryService.getApplications(type, fromDate, toDate);
return ResponseEntity.ok(ApiUtils.success(response));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package kr.tennispark.web.activity.presentation.dto;

import java.util.List;

public record GetActivityApplicationsResponse(
List<ActivityApplicationRowDTO> rows
) {
}
Loading