-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
feat : Recruitment 도메인 CRUD 구현
- Loading branch information
Showing
28 changed files
with
673 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
backend/src/main/java/com/graphy/backend/domain/project/service/TagService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
68 changes: 66 additions & 2 deletions
68
...src/main/java/com/graphy/backend/domain/recruitment/controller/RecruitmentController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,80 @@ | ||
package com.graphy.backend.domain.recruitment.controller; | ||
|
||
import com.graphy.backend.domain.auth.util.annotation.CurrentUser; | ||
import com.graphy.backend.domain.member.domain.Member; | ||
import com.graphy.backend.domain.recruitment.domain.Position; | ||
import com.graphy.backend.domain.recruitment.dto.request.CreateRecruitmentRequest; | ||
import com.graphy.backend.domain.recruitment.dto.request.UpdateRecruitmentRequest; | ||
import com.graphy.backend.domain.recruitment.dto.response.GetRecruitmentDetailResponse; | ||
import com.graphy.backend.domain.recruitment.dto.response.GetRecruitmentResponse; | ||
import com.graphy.backend.domain.recruitment.service.RecruitmentService; | ||
import com.graphy.backend.global.common.PageRequest; | ||
import com.graphy.backend.global.result.ResultCode; | ||
import com.graphy.backend.global.result.ResultResponse; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import lombok.AccessLevel; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
import org.springframework.data.domain.Pageable; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.validation.annotation.Validated; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import java.util.List; | ||
|
||
@Tag(name = "RecruitmentController", description = "프로젝트 구인 게시글 관련 API") | ||
@RestController | ||
@RequestMapping("api/v1/recruitments") | ||
@RequiredArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class RecruitmentController { | ||
private final RecruitmentService recruitmentService; | ||
|
||
@Operation(summary = "createRecruitment", description = "구인 게시글 생성") | ||
@PostMapping | ||
public ResponseEntity<ResultResponse> recruitmentAdd(@Validated @RequestBody CreateRecruitmentRequest request, | ||
@CurrentUser Member loginUser) { | ||
recruitmentService.addRecruitment(request, loginUser); | ||
return ResponseEntity.status(HttpStatus.CREATED) | ||
.body(ResultResponse.of(ResultCode.RECRUITMENT_CREATE_SUCCESS)); | ||
} | ||
|
||
@Operation(summary = "findRecruitment", description = "구인 게시글 상세 조회") | ||
@GetMapping("/{recruitmentId}") | ||
public ResponseEntity<ResultResponse> recruitmentDetails(@PathVariable Long recruitmentId) { | ||
GetRecruitmentDetailResponse result = recruitmentService.findRecruitmentById(recruitmentId); | ||
return ResponseEntity.ok(ResultResponse.of(ResultCode.RECRUITMENT_GET_SUCCESS, result)); | ||
} | ||
|
||
@Operation(summary = "findRecruitmentList", description = "구인 게시글 조회") | ||
@GetMapping | ||
public ResponseEntity<ResultResponse> recruitmentList(@RequestParam(required = false) List<Position> positions, | ||
@RequestParam(required = false) List<String> tags, | ||
@RequestParam(required = false) String keyword, | ||
PageRequest pageRequest) { | ||
Pageable pageable = pageRequest.of(); | ||
List<GetRecruitmentResponse> result = recruitmentService.findRecruitmentList(positions, tags, keyword, pageable); | ||
return ResponseEntity.ok(ResultResponse.of(ResultCode.RECRUITMENT_PAGING_GET_SUCCESS, result)); | ||
} | ||
|
||
@Operation(summary = "updateRecruitment", description = "구인 게시글 수정") | ||
@PutMapping("/{recruitmentId}") | ||
public ResponseEntity<ResultResponse> RecruitmentModify(@PathVariable Long recruitmentId, | ||
@RequestBody @Validated UpdateRecruitmentRequest request, | ||
@CurrentUser Member loginUser) { | ||
recruitmentService.modifyRecruitment(recruitmentId, request, loginUser); | ||
return ResponseEntity.status(HttpStatus.NO_CONTENT) | ||
.body(ResultResponse.of(ResultCode.RECRUITMENT_UPDATE_SUCCESS)); | ||
} | ||
|
||
@Operation(summary = "deleteRecruitment", description = "구인 게시글 삭제(soft delete)") | ||
@DeleteMapping("/{recruitmentId}") | ||
public ResponseEntity<ResultResponse> recruitmentRemove(@PathVariable Long recruitmentId, | ||
@CurrentUser Member loginUser) { | ||
recruitmentService.removeRecruitment(recruitmentId, loginUser); | ||
return ResponseEntity.status(HttpStatus.NO_CONTENT) | ||
.body(ResultResponse.of(ResultCode.RECRUITMENT_DELETE_SUCCESS)); | ||
} | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
62 changes: 62 additions & 0 deletions
62
...main/java/com/graphy/backend/domain/recruitment/dto/request/CreateRecruitmentRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package com.graphy.backend.domain.recruitment.dto.request; | ||
|
||
import com.graphy.backend.domain.member.domain.Member; | ||
import com.graphy.backend.domain.recruitment.domain.Position; | ||
import com.graphy.backend.domain.recruitment.domain.ProcessType; | ||
import com.graphy.backend.domain.recruitment.domain.Recruitment; | ||
import com.graphy.backend.domain.recruitment.domain.RecruitmentTags; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
import javax.validation.constraints.NotBlank; | ||
import javax.validation.constraints.NotNull; | ||
import javax.validation.constraints.Positive; | ||
import java.time.LocalDateTime; | ||
import java.util.List; | ||
|
||
@Getter | ||
@Builder | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class CreateRecruitmentRequest { | ||
|
||
@NotBlank(message = "Recruitment title cannot be blank") | ||
private String title; | ||
|
||
@NotBlank(message = "content cannot be blank") | ||
private String content; | ||
|
||
@NotNull(message = "ProcessType cannot be null") | ||
private ProcessType type; | ||
|
||
@NotNull(message = "endDate cannot be null") | ||
private LocalDateTime endDate; | ||
|
||
@NotNull(message = "period cannot be null") | ||
private LocalDateTime period; | ||
|
||
@NotNull(message = "position cannot be null") | ||
private Position position; | ||
|
||
@Positive(message = "최소 인원은 1명입니다.") | ||
@NotNull(message = "recruitmentCount cannot be null") | ||
private Integer recruitmentCount; | ||
|
||
private List<String> techTags; | ||
|
||
public Recruitment toEntity(Member member) { | ||
return Recruitment.builder() | ||
.member(member) | ||
.title(title) | ||
.content(content) | ||
.type(type) | ||
.endDate(endDate) | ||
.period(period) | ||
.position(position) | ||
.recruitmentCount(recruitmentCount) | ||
.recruitmentTags(new RecruitmentTags()) | ||
.build(); | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
...main/java/com/graphy/backend/domain/recruitment/dto/request/UpdateRecruitmentRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package com.graphy.backend.domain.recruitment.dto.request; | ||
|
||
import com.graphy.backend.domain.recruitment.domain.Position; | ||
import com.graphy.backend.domain.recruitment.domain.ProcessType; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
|
||
import javax.validation.constraints.NotBlank; | ||
import javax.validation.constraints.NotNull; | ||
import javax.validation.constraints.Positive; | ||
import java.time.LocalDateTime; | ||
import java.util.List; | ||
|
||
@Getter | ||
@Builder | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class UpdateRecruitmentRequest { | ||
@NotBlank(message = "Recruitment title cannot be blank") | ||
private String title; | ||
|
||
@NotBlank(message = "content cannot be blank") | ||
private String content; | ||
|
||
@NotNull(message = "ProcessType cannot be null") | ||
private ProcessType type; | ||
|
||
@NotNull(message = "endDate cannot be null") | ||
private LocalDateTime endDate; | ||
|
||
@NotNull(message = "period cannot be null") | ||
private LocalDateTime period; | ||
|
||
@NotNull(message = "position cannot be null") | ||
private Position position; | ||
|
||
@Positive(message = "최소 인원은 1명입니다.") | ||
@NotNull(message = "recruitmentCount cannot be null") | ||
private Integer recruitmentCount; | ||
|
||
private List<String> techTags; | ||
} |
Oops, something went wrong.