Skip to content

Commit

Permalink
Merge pull request #18 from TravelMate-KU/feat/requests
Browse files Browse the repository at this point in the history
feat: Volunteer 매칭 요청 조회 API 구현
  • Loading branch information
jaeuk520 authored Mar 3, 2024
2 parents e088f03 + 1e4f160 commit 228a421
Show file tree
Hide file tree
Showing 8 changed files with 1,021 additions and 9 deletions.
42 changes: 38 additions & 4 deletions src/main/java/konkuk/travelmate/controller/RequestController.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,32 @@
package konkuk.travelmate.controller;

import konkuk.travelmate.domain.TravelType;
import konkuk.travelmate.form.RequestForm;
import konkuk.travelmate.form.request.RequestsRequest;
import konkuk.travelmate.form.response.RequestsResponse;
import konkuk.travelmate.service.RequestService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@Controller
@RequestMapping("/users/{userId}/courses/{courseId}")
@RequestMapping("")
@RequiredArgsConstructor
public class RequestController {

private final RequestService requestService;

@PostMapping("/request")
@PostMapping("/users/{userId}/courses/{courseId}/request")
public String requestMatching(@PathVariable Long userId, @PathVariable Long courseId,
@RequestParam TravelType type,
@RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate,
Expand All @@ -35,10 +39,40 @@ public String requestMatching(@PathVariable Long userId, @PathVariable Long cour
Timestamp startDateTime = Timestamp.valueOf(LocalDateTime.of(startDate, startTime));
Timestamp endDateTime = Timestamp.valueOf(LocalDateTime.of(endDate, endTime));

requestService.requestMatching(userId, courseId, new RequestForm(type, startDateTime, endDateTime));
requestService.requestMatching(userId, courseId, new RequestsRequest(type, startDateTime, endDateTime));

return "redirect:/users/{userId}/courses";

}

/**
* 봉사자 -> 장애인 조회
*/
@GetMapping("/requests")
public String showRequests(@RequestParam(value = "walk", required = false) Integer walk,
@RequestParam(value = "see", required = false) Integer see,
@RequestParam(value = "talk", required = false) Integer talk,
@RequestParam(value = "listen", required = false) Integer listen,
@RequestParam(value = "iq", required = false) Integer iq,
@RequestParam(value = "depression", required = false) Integer depression,
@RequestParam(value = "bipolar_disorder", required = false) Integer bipolarDisorder,
Model model) {

log.info("[RequestController.showRequests]");

List<RequestsResponse> requestsResponses = new ArrayList<>();

if(isSearchButtonClicked(walk, see, talk, listen, iq, depression, bipolarDisorder)) {
requestsResponses = requestService.showRequests(walk, see, talk, listen, iq, depression, bipolarDisorder);
}

model.addAttribute("requests", requestsResponses);

return "volunteer_matching";
}

private boolean isSearchButtonClicked(Integer walk, Integer see, Integer talk, Integer listen, Integer iq, Integer depression, Integer bipolarDisorder) {
return walk != null && see != null && talk != null && listen != null && iq != null && depression != null && bipolarDisorder != null;
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package konkuk.travelmate.form;
package konkuk.travelmate.form.request;

import konkuk.travelmate.domain.TravelType;
import lombok.AllArgsConstructor;
Expand All @@ -8,7 +8,7 @@

@Getter
@AllArgsConstructor
public class RequestForm {
public class RequestsRequest {

private TravelType type;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package konkuk.travelmate.form.response;

import konkuk.travelmate.domain.TravelType;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.sql.Timestamp;

@Getter
@AllArgsConstructor
public record RequestsResponse(String disabledName, TravelType requestsType, String courseName, Timestamp startTime, Timestamp endTime) {

}
28 changes: 28 additions & 0 deletions src/main/java/konkuk/travelmate/repository/RequestRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,35 @@
package konkuk.travelmate.repository;

import konkuk.travelmate.domain.Request;
import konkuk.travelmate.form.response.RequestsResponse;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface RequestRepository extends JpaRepository<Request, Long> {

@Query("SELECT new konkuk.travelmate.form.response.RequestsResponse(d.name, r.type, c.name, r.startTime, r.endTime)" +
"FROM Request r " +
"join r.course c " +
"join c.health h " +
"join r.disabled d " +
"WHERE r.state = 4 " +
"and h.bipolarDisorder >= :bipolarDisorder " +
"and h.depression >= :depression " +
"and h.iq >= :iq " +
"and h.listen >= :listen " +
"and h.see >= :see " +
"and h.talk >= :talk " +
"and h.walk >= :walk ")
List<RequestsResponse> findRequestsByStateAndHealthLevel(
@Param("bipolarDisorder") int bipolarDisorder,
@Param("depression") int depression,
@Param("iq") int iq,
@Param("listen") int listen,
@Param("see") int see,
@Param("talk") int talk,
@Param("walk") int walk);

}
17 changes: 14 additions & 3 deletions src/main/java/konkuk/travelmate/service/RequestService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@
import konkuk.travelmate.domain.Request;
import konkuk.travelmate.domain.RequestState;
import konkuk.travelmate.domain.User;
import konkuk.travelmate.form.RequestForm;
import konkuk.travelmate.form.request.RequestsRequest;
import konkuk.travelmate.form.response.RequestsResponse;
import konkuk.travelmate.repository.CourseRepository;
import konkuk.travelmate.repository.RequestRepository;
import konkuk.travelmate.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
@RequiredArgsConstructor
Expand All @@ -21,9 +24,9 @@ public class RequestService {
private final UserRepository userRepository;
private final CourseRepository courseRepository;

public void requestMatching(Long disabledId, Long courseId, RequestForm requestForm) {
public void requestMatching(Long disabledId, Long courseId, RequestsRequest requestForm) {

log.info("RequestService.requestMatching");
log.info("[RequestService.requestMatching]");

User disabled = userRepository.findById(disabledId).orElseThrow(() -> new RuntimeException("user not found"));
Course course = courseRepository.findById(courseId).orElseThrow(() -> new RuntimeException("course not found"));
Expand All @@ -38,4 +41,12 @@ public void requestMatching(Long disabledId, Long courseId, RequestForm requestF
course));

}

public List<RequestsResponse> showRequests(int walk, int see, int talk, int listen, int iq, int depression, int bipolarDisorder) {

log.info("[RequestService.showRequests]");

return requestRepository.findRequestsByStateAndHealthLevel(walk, see, talk, listen, iq, depression, bipolarDisorder);

}
}
Loading

0 comments on commit 228a421

Please sign in to comment.