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 @@ -70,16 +70,75 @@ public ResponseEntity<List<Request>> getRequestsByAccountId(
return ResponseEntity.ok(requests);
}

@Operation(summary = "특정 기간 내의 의뢰 목록 조회", description = "시작과 끝 날짜 사이의 모든 의뢰를 조회합니다.")
@Operation(summary = "업무 범위별 의뢰 목록 조회", description = "특정 업무 범위에 대한 모든 의뢰를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨")
})
@GetMapping("/work-scope")
public ResponseEntity<List<Request>> getRequestsByWorkScope(@RequestParam String workScope) {

List<Request> requests = requestService.findRequestsByWorkScope(workScope);
return ResponseEntity.ok(requests);
}

@Operation(summary = "근무 형태별 의뢰 목록 조회", description = "근무 형태 범위에 대한 모든 의뢰를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨")
})
@GetMapping("/work-type")
public ResponseEntity<List<Request>> getRequestsByWorkType(@RequestParam String workType) {

List<Request> requests = requestService.findRequestsByWorkType(workType);
return ResponseEntity.ok(requests);
}

@Operation(summary = "진행 분류별 의뢰 목록 조회", description = "진행 분류 범위에 대한 모든 의뢰를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨")
})
@GetMapping("/progress-classfication")
public ResponseEntity<List<Request>> getRequestsByProgressClassification(@RequestParam String progressClassification) {

List<Request> requests = requestService.findRequestsByProgressClassification(progressClassification);
return ResponseEntity.ok(requests);
}

@Operation(summary = "프로젝트 주제(제목)별 의뢰 목록 조회", description = "프로젝트 주제(제목) 범위에 대한 모든 의뢰를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨")
})
@GetMapping("/title")
public ResponseEntity<List<Request>> getRequestsByTitleContainingIgnoreCase(@RequestParam String title) {

List<Request> requests = requestService.findRequestsByTitleContainingIgnoreCase(title);
return ResponseEntity.ok(requests);
}

@Operation(summary = "특정 기간 내의 의뢰 목록 조회", description = "시작날짜 또는 끝 날짜를 포함하는 모든 의뢰를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨")
})
@GetMapping("/date-range")
public ResponseEntity<List<Request>> getRequestsBetweenDates(
@RequestParam LocalDateTime startDateTime, @RequestParam LocalDateTime endDateTime) {

List<Request> requests =
requestService.findAllRequestsBetweenStarDateTimeAndEndDateTime(startDateTime, endDateTime);
List<Request> requests = requestService.findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual(
startDateTime, endDateTime);
return ResponseEntity.ok(requests);
}

@Operation(summary = "원하는 직군별 의뢰 목록 조회", description = "원하는 직군 숫자보다 많이 모집하는 모든 의뢰를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "의뢰 목록이 성공적으로 조회됨")
})
@GetMapping("/required")
public ResponseEntity<List<Request>> getRequestsByTitleContainingIgnoreCase(
@RequestParam int requiredClient, @RequestParam int requiredServer, @RequestParam int requiredDesign,
@RequestParam int requiredPlanner, @RequestParam int requiredAIEngineer) {

List<Request> requests = requestService.findRequestsWithLargerRequirements(
requiredClient, requiredServer, requiredDesign, requiredPlanner, requiredAIEngineer
);
return ResponseEntity.ok(requests);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package com.mtvs.devlinkbackend.request.dto;

import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.time.LocalDateTime;

Expand All @@ -9,8 +15,18 @@
@NoArgsConstructor
@ToString
public class RequestRegistRequestDTO {
private String workScope;
private String workType;
private String progressClassification;
private String companyName;
private String title;
private String content;
private Integer requiredClient;
private Integer requiredServer;
private Integer requiredDesign;
private Integer requiredPlanner;
private Integer requiredAIEngineer;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
}
private Integer estimatedCost;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,18 @@
@ToString
public class RequestUpdateRequestDTO {
private Long requestId;
private String workScope;
private String workType;
private String progressClassification;
private String companyName;
private String title;
private String content;
private Integer requiredClient;
private Integer requiredServer;
private Integer requiredDesign;
private Integer requiredPlanner;
private Integer requiredAIEngineer;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
private Integer estimatedCost;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,48 @@ public class Request {
@Column(name = "REQUEST_ID")
private Long requestId;

@Column(name = "WORK_SCOPE")
private String workScope;

@Column(name = "WORK_TYPE")
private String workType;

@Column(name = "PROGRESS_CLASSIFICATION")
private String progressClassification;

@Column(name = "COMPANY_NAME")
private String companyName;

@Column(name = "TITLE", nullable = false)
private String title;

@Column(name = "CONTENT", nullable = false)
private String content;

@Column(name = "REQUIRED_CLIENT")
private Integer requiredClient;

@Column(name = "REQUIRED_SERVER")
private Integer requiredServer;

@Column(name = "REQUIRED_DESIGN")
private Integer requiredDesign;

@Column(name = "REQUIRED_PLANNER")
private Integer requiredPlanner;

@Column(name = "REQUIRED_AIENGINEER")
private Integer requiredAIEngineer;

@Column(name = "START_DATETIME")
private LocalDateTime startDateTime;

@Column(name = "END_DATETIME")
private LocalDateTime endDateTime;

@Column(name = "ESTIMATED_COST")
private Integer estimatedCost;

@Column(name = "ACCOUNT_ID", nullable = false)
private String accountId;

Expand All @@ -59,6 +89,60 @@ public Request(String title, String content, LocalDateTime startDateTime, LocalD
this.accountId = accountId;
}

public Request(String workScope, String workType, String progressClassification, String companyName, String title, String content, Integer requiredClient, Integer requiredServer, Integer requiredDesign, Integer requiredPlanner, Integer requiredAIEngineer, LocalDateTime startDateTime, LocalDateTime endDateTime, Integer estimatedCost, String accountId) {
this.workScope = workScope;
this.workType = workType;
this.progressClassification = progressClassification;
this.companyName = companyName;
this.title = title;
this.content = content;
this.requiredClient = requiredClient;
this.requiredServer = requiredServer;
this.requiredDesign = requiredDesign;
this.requiredPlanner = requiredPlanner;
this.requiredAIEngineer = requiredAIEngineer;
this.startDateTime = startDateTime;
this.endDateTime = endDateTime;
this.estimatedCost = estimatedCost;
this.accountId = accountId;
}

public void setWorkScope(String workScope) {
this.workScope = workScope;
}

public void setWorkType(String workType) {
this.workType = workType;
}

public void setProgressClassification(String progressClassification) {
this.progressClassification = progressClassification;
}

public void setRequiredClient(Integer requiredClient) {
this.requiredClient = requiredClient;
}

public void setRequiredServer(Integer requiredServer) {
this.requiredServer = requiredServer;
}

public void setRequiredDesign(Integer requiredDesign) {
this.requiredDesign = requiredDesign;
}

public void setRequiredPlanner(Integer requiredPlanner) {
this.requiredPlanner = requiredPlanner;
}

public void setRequiredAIEngineer(Integer requiredAIEngineer) {
this.requiredAIEngineer = requiredAIEngineer;
}

public void setEstimatedCost(Integer estimatedCost) {
this.estimatedCost = estimatedCost;
}

public void setTitle(String title) {
this.title = title;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,28 @@
public interface RequestRepository extends JpaRepository<Request, Long> {
List<Request> findRequestsByAccountId(String accountId);

@Query("SELECT r FROM Request r WHERE r.startDateTime BETWEEN :startDateTime AND :endDateTime " +
"AND r.endDateTime BETWEEN :startDateTime AND :endDateTime")
List<Request> findRequestsWithinDateRange(
@Param("startDateTime") LocalDateTime startDateTime,
@Param("endDateTime") LocalDateTime endDateTime);
List<Request> findRequestsByWorkScope(String workScope);

List<Request> findRequestsByWorkType(String workType);

List<Request> findRequestsByProgressClassification(String progressClassification);

List<Request> findRequestsByTitleContainingIgnoreCase(String title);

List<Request> findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual(LocalDateTime startDateTime, LocalDateTime endDateTime);

// required 값들이 넘겨준 값보다 큰 row를 조회하는 쿼리
@Query("SELECT r FROM Request r WHERE " +
"(:requiredClient IS NULL OR r.requiredClient > :requiredClient) AND " +
"(:requiredServer IS NULL OR r.requiredServer > :requiredServer) AND " +
"(:requiredDesign IS NULL OR r.requiredDesign > :requiredDesign) AND " +
"(:requiredPlanner IS NULL OR r.requiredPlanner > :requiredPlanner) AND " +
"(:requiredAIEngineer IS NULL OR r.requiredAIEngineer > :requiredAIEngineer)")
List<Request> findRequestsWithLargerRequirements(
@Param("requiredClient") Integer requiredClient,
@Param("requiredServer") Integer requiredServer,
@Param("requiredDesign") Integer requiredDesign,
@Param("requiredPlanner") Integer requiredPlanner,
@Param("requiredAIEngineer") Integer requiredAIEngineer
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,20 @@ public RequestService(RequestRepository requestRepository) {
@Transactional
public Request registRequest(RequestRegistRequestDTO requestRegistRequestDTO, String accountId) {
return requestRepository.save(new Request(
requestRegistRequestDTO.getWorkScope(),
requestRegistRequestDTO.getWorkType(),
requestRegistRequestDTO.getProgressClassification(),
requestRegistRequestDTO.getCompanyName(),
requestRegistRequestDTO.getTitle(),
requestRegistRequestDTO.getContent(),
requestRegistRequestDTO.getRequiredClient(),
requestRegistRequestDTO.getRequiredServer(),
requestRegistRequestDTO.getRequiredDesign(),
requestRegistRequestDTO.getRequiredPlanner(),
requestRegistRequestDTO.getRequiredAIEngineer(),
requestRegistRequestDTO.getStartDateTime(),
requestRegistRequestDTO.getEndDateTime(),
requestRegistRequestDTO.getEstimatedCost(),
accountId
));
}
Expand All @@ -38,8 +48,33 @@ public List<Request> findRequestsByAccountId(String accountId) {
return requestRepository.findRequestsByAccountId(accountId);
}

public List<Request> findAllRequestsBetweenStarDateTimeAndEndDateTime(LocalDateTime starDateTime, LocalDateTime endDateTime) {
return requestRepository.findRequestsWithinDateRange(starDateTime, endDateTime);
public List<Request> findRequestsByWorkScope(String workScope) {
return requestRepository.findRequestsByWorkScope(workScope);
}

public List<Request> findRequestsByWorkType(String workType) {
return requestRepository.findRequestsByWorkType(workType);
}

public List<Request> findRequestsByProgressClassification(String progressClassification) {
return requestRepository.findRequestsByProgressClassification(progressClassification);
}

public List<Request> findRequestsByTitleContainingIgnoreCase(String title) {
return requestRepository.findRequestsByTitleContainingIgnoreCase(title);
}

public List<Request> findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual(
LocalDateTime starDateTime, LocalDateTime endDateTime) {
return requestRepository.findRequestsByStartDateTimeLessThanEqualOrEndDateTimeGreaterThanEqual(starDateTime, endDateTime);
}

public List<Request> findRequestsWithLargerRequirements(
Integer requiredClient, Integer requiredServer, Integer requiredDesign,
Integer requiredPlanner, Integer requiredAIEngineer) {

return requestRepository.findRequestsWithLargerRequirements(
requiredClient, requiredServer, requiredDesign, requiredPlanner, requiredAIEngineer);
}

@Transactional
Expand All @@ -48,10 +83,19 @@ public Request updateRequest(RequestUpdateRequestDTO requestUpdateRequestDTO, St
if (request.isPresent()) {
Request foundRequest = request.get();
if(foundRequest.getAccountId().equals(accountId)) {
foundRequest.setWorkScope(requestUpdateRequestDTO.getWorkScope());
foundRequest.setWorkType(requestUpdateRequestDTO.getWorkType());
foundRequest.setProgressClassification(requestUpdateRequestDTO.getProgressClassification());
foundRequest.setTitle(requestUpdateRequestDTO.getTitle());
foundRequest.setContent(requestUpdateRequestDTO.getContent());
foundRequest.setRequiredClient(requestUpdateRequestDTO.getRequiredClient());
foundRequest.setRequiredServer(requestUpdateRequestDTO.getRequiredServer());
foundRequest.setRequiredDesign(requestUpdateRequestDTO.getRequiredDesign());
foundRequest.setRequiredPlanner(requestUpdateRequestDTO.getRequiredPlanner());
foundRequest.setRequiredAIEngineer(requestUpdateRequestDTO.getRequiredAIEngineer());
foundRequest.setStartDateTime(requestUpdateRequestDTO.getStartDateTime());
foundRequest.setEndDateTime(requestUpdateRequestDTO.getEndDateTime());
foundRequest.setEstimatedCost(requestUpdateRequestDTO.getEstimatedCost());
return foundRequest;
}
else throw new IllegalArgumentException("잘못된 accountId로 Request ID : "
Expand Down
Loading