Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/WooRibound/WooRibound-API
Browse files Browse the repository at this point in the history
…into chore/#77-admin-knowhow
  • Loading branch information
2oo1s committed Nov 14, 2024
2 parents b8bbe53 + 0d288c9 commit 2aad31e
Show file tree
Hide file tree
Showing 12 changed files with 143 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,34 @@
import com.wooribound.api.corporate.dto.ApplicantsDTO;
import com.wooribound.api.corporate.dto.JobPostingReqDTO;
import com.wooribound.api.corporate.facade.EnterpriseJobPostingFacade;
import com.wooribound.domain.jobposting.dto.JobPostingDTO;
import com.wooribound.domain.jobposting.dto.JobPostingDetailDTO;
import com.wooribound.domain.resume.dto.ResumeDTO;
import com.wooribound.domain.userapply.dto.ApplicantResultReqDTO;
import com.wooribound.global.util.AuthenticateUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("coporate/jobposting")
@RequestMapping("corporate/jobposting")
public class EnterpriseJobPostingController {

private final EnterpriseJobPostingFacade enterpriseJobPostingFacade;
private final AuthenticateUtil authenticateUtil;

// 1. 공고 등록
@PostMapping("/register")
public String createJobPosting(@RequestBody JobPostingReqDTO jobPostingReqDTO) {
return enterpriseJobPostingFacade.createJobPosting(jobPostingReqDTO);
public String createJobPosting(Authentication authentication, @RequestBody JobPostingReqDTO jobPostingReqDTO) {
return enterpriseJobPostingFacade.createJobPosting(authentication, jobPostingReqDTO);
}

// 2. 내 기업 공고 목록 조회
@GetMapping()
public List<JobPostingDetailDTO> getJobPostingList(@RequestParam String entId) {
return enterpriseJobPostingFacade.getJobPostingList(entId);
public List<JobPostingDetailDTO> getJobPostingList(Authentication authentication) {
return enterpriseJobPostingFacade.getJobPostingList(authentication);
}

// 3. 공고 조회 - 상세
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@Setter
@AllArgsConstructor
public class JobPostingReqDTO {
private String entId;
// private String entId;
private String postImg;
private String postTitle;
private Date startDate;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
import com.wooribound.domain.resume.ResumeService;
import com.wooribound.domain.resume.dto.ResumeDTO;
import com.wooribound.domain.userapply.dto.ApplicantResultReqDTO;
import com.wooribound.global.util.AuthenticateUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -19,16 +21,20 @@
public class EnterpriseJobPostingFacade {
private final ResumeService resumeService;
private final EntJobPostingService entJobPostingService;
private final AuthenticateUtil authenticateUtil;


// 1. 공고 등록
@Transactional
public String createJobPosting(JobPostingReqDTO jobPostingReqDTO) {
return entJobPostingService.createJobPosting(jobPostingReqDTO);
public String createJobPosting(Authentication authentication, JobPostingReqDTO jobPostingReqDTO) {
String entId = authenticateUtil.CheckEnterpriseAuthAndGetUserId(authentication);
return entJobPostingService.createJobPosting(entId, jobPostingReqDTO);
}

// 2. 내 기업 공고 목록 조회
@Transactional(readOnly = true)
public List<JobPostingDetailDTO> getJobPostingList(String entId) {
public List<JobPostingDetailDTO> getJobPostingList(Authentication authentication) {
String entId = authenticateUtil.CheckEnterpriseAuthAndGetUserId(authentication);
return entJobPostingService.getJobPostingList(entId);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ public String updateUserApply(UserApplyDTO userApplyDTO) {

// 2. 공고 조회 - 검색 (회사명, 직무, 지역)
@PostMapping()
public List<JobPostingDTO> getJobPostings(Authentication authentication,
@RequestBody(required = false) UserJobPostingReqDTO userJobPostingReqDTO) {
public List<JobPostingDTO> getJobPostings(@RequestBody(required = false) UserJobPostingReqDTO userJobPostingReqDTO) {

// RequestBody를 null로 받는 경우 빈 객체 생성
if (userJobPostingReqDTO != null) {
Expand All @@ -42,19 +41,29 @@ public List<JobPostingDTO> getJobPostings(Authentication authentication,
} else {
logger.info("UserJobPostingDTO is null");
}
return wbUserJobPostingFacade.getJobPostings(authentication, userJobPostingReqDTO);
return wbUserJobPostingFacade.getJobPostings(userJobPostingReqDTO);
}

// 2-1. 공고 조회 - 새로운 일 구하기
@PostMapping("/new")
public List<JobPostingDTO> getJobPostingsForNew(Authentication authentication, @RequestBody UserJobPostingReqDTO userJobPostingReqDTO) {
// 로그인하지 않은 경우에도 조회 가능하도록 인증 정보가 null인지 확인
if (authentication == null) {
logger.info("Authentication is null. Processing as guest user.");
}

userJobPostingReqDTO.setViewType("new");
return wbUserJobPostingFacade.getJobPostingsForNew(authentication, userJobPostingReqDTO);
}

// 2-2. 공고 조회 - 경력 살리기
@PostMapping("/career")
public List<JobPostingDTO> getJobPostingsForCareer(Authentication authentication, @RequestBody UserJobPostingReqDTO userJobPostingReqDTO) {
// 로그인하지 않은 경우에도 조회 가능하도록 인증 정보가 null인지 확인
if (authentication == null) {
logger.info("Authentication is null. Processing as guest user.");
}

userJobPostingReqDTO.setViewType("career");
return wbUserJobPostingFacade.getJobPostingsForCareer(authentication, userJobPostingReqDTO);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.wooribound.api.individual.dto;

import com.wooribound.domain.enterprise.Enterprise;
import com.wooribound.domain.jobposting.dto.JobPostingDetailProjection;

import java.util.Date;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import com.wooribound.domain.jobposting.dto.JobPostingDTO;
import com.wooribound.domain.jobposting.dto.JobPostingDetailDTO;
import com.wooribound.domain.userapply.Service.UserApplyService;
import com.wooribound.global.exception.AuthenticationException;
import com.wooribound.global.security.userdetail.admin.AdminUserDetail;
import com.wooribound.global.security.userdetail.enterprise.EnterpriseUserDetail;
import com.wooribound.global.security.userdetail.wbuser.WbUserDetail;
import com.wooribound.global.util.AuthenticateUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.Authentication;
Expand All @@ -31,21 +35,23 @@ public String applyForJob(UserApplyDTO userApplyDTO) {

// 2. 공고 조회 - 검색
@Transactional(readOnly = true)
public List<JobPostingDTO> getJobPostings(Authentication authentication, UserJobPostingReqDTO userJobPostingReqDTO) {
String loginId = authenticateUtil.CheckWbUserAuthAndGetUserId(authentication);
return wbUserJobPostingService.getJobPostings(loginId, userJobPostingReqDTO);
public List<JobPostingDTO> getJobPostings(UserJobPostingReqDTO userJobPostingReqDTO) {
String loginId = null; // 로그인하지 않은 경우 null로 처리

return wbUserJobPostingService.getJobPostings(userJobPostingReqDTO);
}

// 2-1. 공고 조회 - 새로운 일 구하기
@Transactional(readOnly = true)
public List<JobPostingDTO> getJobPostingsForNew(Authentication authentication, UserJobPostingReqDTO userJobPostingReqDTO) {
String loginId = authenticateUtil.CheckWbUserAuthAndGetUserId(authentication);
String loginId = determineLoginId(authentication);
return wbUserJobPostingService.getJobPostingsForNew(loginId, userJobPostingReqDTO);
}

// 2-2. 공고 조회 - 경력 살리기
@Transactional(readOnly = true)
public List<JobPostingDTO> getJobPostingsForCareer(Authentication authentication, UserJobPostingReqDTO userJobPostingReqDTO) {
String loginId = authenticateUtil.CheckWbUserAuthAndGetUserId(authentication);
String loginId = determineLoginId(authentication);
return wbUserJobPostingService.getJobPostingsForCareer(loginId, userJobPostingReqDTO);
}

Expand All @@ -55,4 +61,23 @@ public JobPostingDetailDTO getJobPostingDetail(Long postId) {
return wbUserJobPostingService.getJobPostingDetail(postId);
}

// 사용자 유형에 따라 인증 메서드 호출
private String determineLoginId(Authentication authentication) {
if (authentication == null) {
return null;
}

Object principal = authentication.getPrincipal();
if (principal instanceof WbUserDetail) {
return authenticateUtil.CheckWbUserAuthAndGetUserId(authentication);
} else if (principal instanceof EnterpriseUserDetail) {
return authenticateUtil.CheckEnterpriseAuthAndGetUserId(authentication);
} else if (principal instanceof AdminUserDetail) {
return authenticateUtil.CheckAdminAuthAndGetUserId(authentication);
} else {
throw new AuthenticationException("Invalid user type");
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@
@Repository
public interface JobPostingRepository extends JpaRepository<JobPosting, Long> {

@Query("SELECT jp, " +
"CASE " +
@Query("SELECT jp.enterprise AS enterprise, jp.postId AS postId, jp.enterprise.entName AS entName, jp.postTitle AS postTitle, jp.postImg AS postImg, " +
"jp.startDate AS startDate, jp.endDate AS endDate, jp.job.jobName AS jobName, " +
"(CASE " +
"WHEN jp.startDate > CURRENT_DATE THEN 'PENDING' " +
"WHEN jp.startDate <= CURRENT_DATE AND jp.endDate >= CURRENT_DATE THEN 'ACTIVE' " +
"WHEN jp.endDate < CURRENT_DATE THEN 'CLOSED' " +
"END AS postState " +
"END) AS postState " +
"FROM JobPosting jp")
List<JobPostingProjection> findAllJobPostingProjections();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@
import com.wooribound.api.corporate.dto.ApplicantsDTO;
import com.wooribound.api.corporate.dto.JobPostingReqDTO;
import com.wooribound.domain.jobposting.dto.JobPostingDetailDTO;
import com.wooribound.domain.jobposting.dto.JobPostingDetailProjection;
import com.wooribound.domain.userapply.dto.ApplicantResultReqDTO;

import java.util.List;

public interface EntJobPostingService {

// 1. 공고 등록
String createJobPosting(JobPostingReqDTO jobPostingReqDTO);
String createJobPosting(String entId, JobPostingReqDTO jobPostingReqDTO);

// 2. 내 기업 공고 목록 조회
List<JobPostingDetailDTO> getJobPostingList(String entId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ public class EntJobPostingServiceImpl implements EntJobPostingService {

// 1. 공고 등록
@Override
public String createJobPosting(JobPostingReqDTO jobPostingReqDTO) {
public String createJobPosting(String entId, JobPostingReqDTO jobPostingReqDTO) {

Enterprise enterprise = enterpriseRepository.findById(jobPostingReqDTO.getEntId()).orElse(null);
Enterprise enterprise = enterpriseRepository.findById(entId).orElse(null);
Job job = jobRepository.findByJobName(jobPostingReqDTO.getJobName());

JobPosting jobPosting = JobPosting.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

public interface WbUserJobPostingService {
// 1. 공고 조회 - 검색, 새로운 일 구하기, 경력 살리기
List<JobPostingDTO> getJobPostings(String loginId, UserJobPostingReqDTO userJobPostingReqDTO);
List<JobPostingDTO> getJobPostings(UserJobPostingReqDTO userJobPostingReqDTO);
List<JobPostingDTO> getJobPostingsForNew(String loginId, UserJobPostingReqDTO userJobPostingReqDTO);
List<JobPostingDTO> getJobPostingsForCareer(String loginId, UserJobPostingReqDTO userJobPostingReqDTO);

Expand Down
Loading

0 comments on commit 2aad31e

Please sign in to comment.