diff --git a/src/main/java/com/parentsgowork/server/apiPayload/code/status/ErrorStatus.java b/src/main/java/com/parentsgowork/server/apiPayload/code/status/ErrorStatus.java index cc6b103..dc3fa6d 100644 --- a/src/main/java/com/parentsgowork/server/apiPayload/code/status/ErrorStatus.java +++ b/src/main/java/com/parentsgowork/server/apiPayload/code/status/ErrorStatus.java @@ -17,7 +17,7 @@ public enum ErrorStatus implements BaseErrorCode { _FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403", "금지된 요청입니다."), //멤버 관련 에러 - USER_NOT_FOUND(HttpStatus.UNAUTHORIZED, "USER4001", "이메일 또는 패스워드가 일치하지 않습니다."), + USER_NOT_FOUND(HttpStatus.NOT_FOUND, "USER4001", "회원을 찾을 수 없습니다."), EMAIL_ALREADY_EXISTS(HttpStatus.CONFLICT, "USER4002", "이미 존재하는 이메일입니다."), USER_STATUS_INACTIVE(HttpStatus.FORBIDDEN, "USER4003", "탈퇴한 회원입니다."), @@ -45,18 +45,10 @@ public enum ErrorStatus implements BaseErrorCode { EMAIL_SEND_FAIL(HttpStatus.INTERNAL_SERVER_ERROR, "AUTH5001", "이메일 전송에 실패했습니다."), EMAIL_ENCODING_FAIL(HttpStatus.INTERNAL_SERVER_ERROR, "AUTH5002", "이메일 내용 인코딩에 실패했습니다."), - // 크롤링 관련 에러 - CRAWLING_DRIVER_NOT_FOUND(HttpStatus.INTERNAL_SERVER_ERROR, "CRAWLING4001", "크롬 드라이버 경로가 설정되지 않았습니다."), - CRAWLING_PAGE_LOAD_FAIL(HttpStatus.INTERNAL_SERVER_ERROR,"CRAWLING4002", "페이지 로딩 중 오류가 발생했습니다."), - CRAWLING_ELEMENT_NOT_FOUND(HttpStatus.NOT_FOUND,"CRAWLING4003", "요소를 찾을 수 없습니다."), - CRAWLING_TIMEOUT(HttpStatus.INTERNAL_SERVER_ERROR,"CRAWLING4004", "페이지 로딩 시간이 초과되었습니다."), - CRAWLING_SESSION_FAIL(HttpStatus.INTERNAL_SERVER_ERROR,"CRAWLING4005", "크롬 드라이버 세션을 시작할 수 없습니다."), - CRAWLING_INVALID_SELECTOR(HttpStatus.BAD_REQUEST,"CRAWLING4006", "유효하지 않은 셀렉터입니다."), - CRAWLING_NO_RESULTS(HttpStatus.NOT_FOUND,"CRAWLING4007", "크롤링 결과가 존재하지 않습니다."), - CRAWLING_UNKNOWN_ERROR(HttpStatus.INTERNAL_SERVER_ERROR,"CRAWLING4008", "알 수 없는 크롤링 오류가 발생했습니다."), - // 북마크 관련 에러 - BOOKMARK_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4001", "북마크가 존재하지 않습니다."); + EDUCATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4001", "북마크한 교육정보가 존재하지 않습니다."), + POLICY_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4002", "북마크한 정책정보가 존재하지 않습니다."); + diff --git a/src/main/java/com/parentsgowork/server/apiPayload/exception/EducationInfoHandler.java b/src/main/java/com/parentsgowork/server/apiPayload/exception/EducationInfoHandler.java new file mode 100644 index 0000000..45be984 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/apiPayload/exception/EducationInfoHandler.java @@ -0,0 +1,9 @@ +package com.parentsgowork.server.apiPayload.exception; + +import com.parentsgowork.server.apiPayload.code.BaseErrorCode; + +public class EducationInfoHandler extends GeneralException { + public EducationInfoHandler(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/com/parentsgowork/server/apiPayload/exception/BookmarkHandler.java b/src/main/java/com/parentsgowork/server/apiPayload/exception/PolicyInfoHandler.java similarity index 55% rename from src/main/java/com/parentsgowork/server/apiPayload/exception/BookmarkHandler.java rename to src/main/java/com/parentsgowork/server/apiPayload/exception/PolicyInfoHandler.java index cce4d2a..6e4fbd3 100644 --- a/src/main/java/com/parentsgowork/server/apiPayload/exception/BookmarkHandler.java +++ b/src/main/java/com/parentsgowork/server/apiPayload/exception/PolicyInfoHandler.java @@ -2,9 +2,8 @@ import com.parentsgowork.server.apiPayload.code.BaseErrorCode; -public class BookmarkHandler extends GeneralException { - public BookmarkHandler(BaseErrorCode code) { +public class PolicyInfoHandler extends GeneralException { + public PolicyInfoHandler(BaseErrorCode code) { super(code); } - } diff --git a/src/main/java/com/parentsgowork/server/converter/BookmarkConverter.java b/src/main/java/com/parentsgowork/server/converter/BookmarkConverter.java deleted file mode 100644 index 33a48b8..0000000 --- a/src/main/java/com/parentsgowork/server/converter/BookmarkConverter.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.parentsgowork.server.converter; - -import com.parentsgowork.server.domain.Bookmark; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; - -import java.util.List; -import java.util.stream.Collectors; - -public class BookmarkConverter { - - public static BookmarkRequestDTO.SaveBookmarkDTO toSaveBookmarkDTO(Bookmark bookmark) { - return BookmarkRequestDTO.SaveBookmarkDTO.builder() - .id(bookmark.getId()) - .jobId(bookmark.getJobId()) - .companyName(bookmark.getCompanyName()) - .jobTitle(bookmark.getJobTitle()) - .pay(bookmark.getPay()) - .time(bookmark.getTime()) - .location(bookmark.getLocation()) - .deadline(bookmark.getDeadline()) - .registrationDate(bookmark.getRegistrationDate()) - .detailUrl(bookmark.getDetailUrl()) - .build(); - } - - public static BookmarkResponseDTO.BookmarkDetailInfoDTO toDetailDTO(Bookmark bookmark) { - return BookmarkResponseDTO.BookmarkDetailInfoDTO.builder() - .id(bookmark.getId()) - .jobTitle(bookmark.getJobTitle()) - .companyName(bookmark.getCompanyName()) - .pay(bookmark.getPay()) - .time(bookmark.getTime()) - .location(bookmark.getLocation()) - .deadline(bookmark.getDeadline()) - .registrationDate(bookmark.getRegistrationDate()) - .detailUrl(bookmark.getDetailUrl()) - .build(); - } - - - public static List getBookmarkListDTO(List bookmarks) { - return bookmarks.stream() - .map(bookmark -> BookmarkResponseDTO.BookmarkListDTO.builder() - .id(bookmark.getId()) - .jobId(bookmark.getJobId()) - .companyName(bookmark.getCompanyName()) - .jobTitle(bookmark.getJobTitle()) - .pay(bookmark.getPay()) - .time(bookmark.getTime()) - .location(bookmark.getLocation()) - .deadline(bookmark.getDeadline()) - .registrationDate(bookmark.getRegistrationDate()) - .detailUrl(bookmark.getDetailUrl()) - .build()) - .collect(Collectors.toList()); - } - - public static BookmarkResponseDTO.DeleteBookmarkDTO toDeletedBookmark(Bookmark bookmark) { - return BookmarkResponseDTO.DeleteBookmarkDTO.builder() - .id(bookmark.getId()) - .message("북마크를 삭제했습니다.") - .build(); - } -} diff --git a/src/main/java/com/parentsgowork/server/converter/EducationInfoConverter.java b/src/main/java/com/parentsgowork/server/converter/EducationInfoConverter.java new file mode 100644 index 0000000..bed2075 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/converter/EducationInfoConverter.java @@ -0,0 +1,36 @@ +package com.parentsgowork.server.converter; + +import com.parentsgowork.server.domain.EducationInfo; +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; + +import java.util.List; +import java.util.stream.Collectors; + +public class EducationInfoConverter { + + public static List getEducationInfoListDTO(List educationInfos) { + return educationInfos.stream() + .map(education -> EducationInfoResponseDTO.EducationInfoListDTO.builder() + .id(education.getId()) + .title(education.getTitle()) + .url(education.getUrl()) + .build()) + .collect(Collectors.toList()); + } + + public static EducationInfoResponseDTO.EducationInfoDetailDTO getEducationInfoDetailDTO(EducationInfo educationInfo) { + return EducationInfoResponseDTO.EducationInfoDetailDTO.builder() + .id(educationInfo.getId()) + .title(educationInfo.getTitle()) + .url(educationInfo.getUrl()) + .build(); + } + + + public static EducationInfoResponseDTO.DeleteEducationInfoDTO DeleteEducationInfoDTO(EducationInfo educationInfo) { + return EducationInfoResponseDTO.DeleteEducationInfoDTO.builder() + .id(educationInfo.getId()) + .message("저장한 교육정보를 삭제하였습니다.") + .build(); + } +} diff --git a/src/main/java/com/parentsgowork/server/converter/PolicyInfoConverter.java b/src/main/java/com/parentsgowork/server/converter/PolicyInfoConverter.java new file mode 100644 index 0000000..6dfcf8f --- /dev/null +++ b/src/main/java/com/parentsgowork/server/converter/PolicyInfoConverter.java @@ -0,0 +1,35 @@ +package com.parentsgowork.server.converter; + +import com.parentsgowork.server.domain.PolicyInfo; +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; + +import java.util.List; +import java.util.stream.Collectors; + +public class PolicyInfoConverter { + public static List getPolicyInfoListDTO(List policyInfos) { + return policyInfos.stream() + .map(policy -> PolicyInfoResponseDTO.PolicyInfoListDTO.builder() + .id(policy.getId()) + .title(policy.getTitle()) + .url(policy.getUrl()) + .build()) + .collect(Collectors.toList()); + } + + public static PolicyInfoResponseDTO.PolicyInfoDetailDTO getPolicyInfoDetailDTO(PolicyInfo policyInfo) { + return PolicyInfoResponseDTO.PolicyInfoDetailDTO.builder() + .id(policyInfo.getId()) + .title(policyInfo.getTitle()) + .url(policyInfo.getUrl()) + .build(); + } + + + public static PolicyInfoResponseDTO.DeletePolicyInfoDTO DeletePolicyInfoDTO(PolicyInfo policyInfo) { + return PolicyInfoResponseDTO.DeletePolicyInfoDTO.builder() + .id(policyInfo.getId()) + .message("저장한 정책정보를 삭제하였습니다.") + .build(); + } +} diff --git a/src/main/java/com/parentsgowork/server/crawling/JobInfoCrawling.java b/src/main/java/com/parentsgowork/server/crawling/JobInfoCrawling.java deleted file mode 100644 index b5bf38d..0000000 --- a/src/main/java/com/parentsgowork/server/crawling/JobInfoCrawling.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.parentsgowork.server.crawling; - -import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; -import com.parentsgowork.server.apiPayload.exception.JobInfoCrawlingHandler; -import com.parentsgowork.server.util.WebDriverUtil; -import com.parentsgowork.server.web.dto.JobCrawlingDTO.JobCrawlingDTO; -import org.openqa.selenium.*; -import org.springframework.stereotype.Component; - -import java.time.Duration; -import java.util.ArrayList; -import java.util.List; - -@Component -public class JobInfoCrawling { - - public List crawlJobs(int page) { - WebDriver driver = WebDriverUtil.getChromeDriver(); - List jobs = new ArrayList<>(); - - try { - String url = "https://www.work24.go.kr/wk/a/b/1200/retriveDtlEmpSrchList.do?" + - "basicSetupYn=&careerTo=&keywordJobCd=&occupation=&seqNo=&cloDateEndtParam=&payGbn=&templateInfo=&rot2WorkYn=&shsyWorkSecd=&resultCnt=10" + - "&keywordJobCont=" + (page > 1 ? "N" : "") + - "&cert=&moreButtonYn=Y&minPay=&codeDepth2Info=11000¤tPageNo=1&eventNo=&mode=&major=&resrDutyExcYn=&eodwYn=&sortField=DATE&staArea=&sortOrderBy=DESC&keyword=&termSearchGbn=&carrEssYns=&benefitSrchAndOr=O&disableEmpHopeGbn=&actServExcYn=" + - "&keywordStaAreaNm=" + (page > 1 ? "N" : "") + - "&maxPay=&emailApplyYn=&codeDepth1Info=11000&keywordEtcYn=®DateStdtParam=&publDutyExcYn=&keywordJobCdSeqNo=&viewType=&exJobsCd=&templateDepthNmInfo=®ion=&employGbn=&empTpGbcd=1&computerPreferential=&infaYn=&cloDateStdtParam=&siteClcd=all&searchMode=Y" + - "&birthFromYY=&indArea=&careerTypes=&subEmpHopeYn=&tlmgYn=&academicGbn=&templateDepthNoInfo=&foriegn=&entryRoute=&mealOfferClcd=&basicSetupYnChk=&station=&holidayGbn=&srcKeyword=&academicGbnoEdu=noEdu&enterPriseGbn=&cloTermSearchGbn=&birthToYY=" + - "&keywordWantedTitle=" + (page > 1 ? "N" : "") + - "&stationNm=&benefitGbn=&keywordFlag=¬SrcKeyword=&essCertChk=&depth2SelCode=" + - "&keywordBusiNm=" + (page > 1 ? "N" : "") + - "&preferentialGbn=&rot3WorkYn=®DateEndtParam=&pfMatterPreferential=B" + - "&pageIndex=" + page + - "&termContractMmcnt=&careerFrom=&laborHrShortYn=#scrollLoc"; - - - driver.get(url); - driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5)); - - List jobCards = driver.findElements(By.cssSelector("tr[id^='list']")); - - for (WebElement card : jobCards) { - WebElement titleElement = card.findElement(By.cssSelector("a.t3_sb")); - String title = titleElement.getText(); - String detailUrl = titleElement.getAttribute("href"); - String company = card.findElement(By.cssSelector("a.cp_name")).getText(); - String pay = card.findElement(By.cssSelector("li.dollar span.item")).getText(); - String time = card.findElement(By.cssSelector("li.time span.item.sm:nth-of-type(1)")).getText(); - String location = card.findElement(By.cssSelector("li.site p")).getText(); - - String deadline = "", registrationDate = ""; - - List dateElements = card.findElements(By.cssSelector("p[class='s1_r']")); - if (dateElements.size() >= 2) { - deadline = dateElements.get(0).getText(); - registrationDate = dateElements.get(1).getText(); - } - - jobs.add( - JobCrawlingDTO.JobInfoDTO.builder() - .companyName(company) - .jobTitle(title) - .pay(pay) - .workTime(time) - .location(location) - .deadline(deadline) - .registrationDate(registrationDate) - .detailUrl(detailUrl) - .build() - ); - } - } catch (NoSuchElementException e) { - throw new JobInfoCrawlingHandler(ErrorStatus.CRAWLING_ELEMENT_NOT_FOUND); - } catch (TimeoutException e) { - throw new JobInfoCrawlingHandler(ErrorStatus.CRAWLING_TIMEOUT); - } catch (SessionNotCreatedException e) { - throw new JobInfoCrawlingHandler(ErrorStatus.CRAWLING_SESSION_FAIL); - } catch (Exception e) { - throw new JobInfoCrawlingHandler(ErrorStatus.CRAWLING_UNKNOWN_ERROR); - } finally { - WebDriverUtil.quit(driver); - } - - return jobs; - } -} diff --git a/src/main/java/com/parentsgowork/server/repository/BookmarkRepository.java b/src/main/java/com/parentsgowork/server/repository/BookmarkRepository.java deleted file mode 100644 index 0eb9b92..0000000 --- a/src/main/java/com/parentsgowork/server/repository/BookmarkRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.parentsgowork.server.repository; - -import com.parentsgowork.server.domain.Bookmark; -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; -import java.util.Optional; - -public interface BookmarkRepository extends JpaRepository { - - @Query("SELECT b FROM Bookmark b " + - "WHERE b. user.id = :userId") - List findBookmarkList(@Param("userId") Long userId); - - Optional findByIdAndUserId(@Param("bookmarkId") Long bookmarkId, @Param("userId") Long userId); -} diff --git a/src/main/java/com/parentsgowork/server/repository/EducationInfoRepository.java b/src/main/java/com/parentsgowork/server/repository/EducationInfoRepository.java new file mode 100644 index 0000000..dbb383b --- /dev/null +++ b/src/main/java/com/parentsgowork/server/repository/EducationInfoRepository.java @@ -0,0 +1,17 @@ +package com.parentsgowork.server.repository; + +import com.parentsgowork.server.domain.EducationInfo; +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; +import java.util.Optional; + +public interface EducationInfoRepository extends JpaRepository { + @Query("SELECT ei FROM EducationInfo ei " + + "WHERE ei. user.id = :userId") + List findEducationInfoList(@Param("userId") Long userId); + + Optional findByIdAndUserId(@Param("educationInfoId") Long educationInfoId, @Param("userId") Long userId); +} diff --git a/src/main/java/com/parentsgowork/server/repository/PolicyInfoRepository.java b/src/main/java/com/parentsgowork/server/repository/PolicyInfoRepository.java new file mode 100644 index 0000000..1ea18cb --- /dev/null +++ b/src/main/java/com/parentsgowork/server/repository/PolicyInfoRepository.java @@ -0,0 +1,18 @@ +package com.parentsgowork.server.repository; + +import com.parentsgowork.server.domain.PolicyInfo; +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; +import java.util.Optional; + +public interface PolicyInfoRepository extends JpaRepository { + + @Query("SELECT pi FROM PolicyInfo pi " + + "WHERE pi. user.id = :userId") + List findPolicyInfoList(@Param("userId") Long userId); + + Optional findByIdAndUserId(@Param("policyInfoId") Long policyInfoId, @Param("userId") Long userId); +} diff --git a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkCommandService.java b/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkCommandService.java deleted file mode 100644 index 09c4cea..0000000 --- a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkCommandService.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.parentsgowork.server.service.bookmarkService; - -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; - -public interface BookmarkCommandService { - BookmarkRequestDTO.SaveBookmarkDTO bookmarkJob(Long userId, Long jobId, int page); - - BookmarkResponseDTO.DeleteBookmarkDTO delete(Long userId, Long bookmarkId); -} diff --git a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkCommandServiceImpl.java b/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkCommandServiceImpl.java deleted file mode 100644 index d024fa3..0000000 --- a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkCommandServiceImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.parentsgowork.server.service.bookmarkService; - -import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; -import com.parentsgowork.server.apiPayload.exception.BookmarkHandler; -import com.parentsgowork.server.apiPayload.exception.UserHandler; -import com.parentsgowork.server.converter.BookmarkConverter; -import com.parentsgowork.server.domain.Bookmark; -import com.parentsgowork.server.domain.User; -import com.parentsgowork.server.repository.BookmarkRepository; -import com.parentsgowork.server.repository.UserRepository; -import com.parentsgowork.server.service.crawlingService.CrawlingService; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; -import com.parentsgowork.server.web.dto.JobCrawlingDTO.JobCrawlingDTO.JobInfoDTO; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class BookmarkCommandServiceImpl implements BookmarkCommandService { - - private final BookmarkRepository bookmarkRepository; - private final CrawlingService crawlingService; - private final UserRepository userRepository; - - @Override - public BookmarkRequestDTO.SaveBookmarkDTO bookmarkJob(Long userId, Long jobId, int page) { - - // 해당 페이지의 크롤링 결과 불러오기 - List crawledJobs = crawlingService.getSeniorJobs(page); - - // 해당 ID의 채용 정보 찾기 - JobInfoDTO job = crawledJobs.stream() - .filter(j -> j.getId().equals(jobId)) - .findFirst() - .orElseThrow(() -> new BookmarkHandler(ErrorStatus.CRAWLING_NO_RESULTS)); - - User user = userRepository.findById(userId) - .orElseThrow(() -> new UserHandler(ErrorStatus.USER_NOT_FOUND)); - - Bookmark bookmark = Bookmark.builder() - .user(user) - .jobId(jobId) - .companyName(job.getCompanyName()) - .jobTitle(job.getJobTitle()) - .pay(job.getPay()) - .time(job.getWorkTime()) - .location(job.getLocation()) - .deadline(job.getDeadline()) - .registrationDate(job.getRegistrationDate()) - .detailUrl(job.getDetailUrl()) - .build(); - - Bookmark savedBookmark = bookmarkRepository.save(bookmark); - return BookmarkConverter.toSaveBookmarkDTO(savedBookmark); - } - - @Override - public BookmarkResponseDTO.DeleteBookmarkDTO delete(Long userId, Long bookmarkId) { - - userRepository.findById(userId) - .orElseThrow(() -> new UserHandler(ErrorStatus.USER_NOT_FOUND)); - - Bookmark bookmark = bookmarkRepository.findByIdAndUserId(bookmarkId, userId) - .orElseThrow(() -> new BookmarkHandler(ErrorStatus.BOOKMARK_NOT_FOUND)); - - bookmarkRepository.deleteById(bookmarkId); - - return BookmarkConverter.toDeletedBookmark(bookmark); - } -} diff --git a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkQueryService.java b/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkQueryService.java deleted file mode 100644 index d601c64..0000000 --- a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkQueryService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.parentsgowork.server.service.bookmarkService; - -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; - -import java.util.List; - -public interface BookmarkQueryService { - List getBookmarkList(Long userId); - - BookmarkResponseDTO.BookmarkDetailInfoDTO getBookmarkDetails(Long userId, Long bookmarkId); -} diff --git a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkQueryServiceImpl.java b/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkQueryServiceImpl.java deleted file mode 100644 index 0d39790..0000000 --- a/src/main/java/com/parentsgowork/server/service/bookmarkService/BookmarkQueryServiceImpl.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.parentsgowork.server.service.bookmarkService; - -import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; -import com.parentsgowork.server.apiPayload.exception.BookmarkHandler; -import com.parentsgowork.server.converter.BookmarkConverter; -import com.parentsgowork.server.domain.Bookmark; -import com.parentsgowork.server.repository.BookmarkRepository; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class BookmarkQueryServiceImpl implements BookmarkQueryService { - - private final BookmarkRepository bookmarkRepository; - - @Override - public List getBookmarkList(Long userId) { - - List bookmarks = bookmarkRepository.findBookmarkList(userId); - - return BookmarkConverter.getBookmarkListDTO(bookmarks); - } - - @Override - public BookmarkResponseDTO.BookmarkDetailInfoDTO getBookmarkDetails(Long userId, Long bookmarkId) { - - Bookmark bookmark = bookmarkRepository.findByIdAndUserId(bookmarkId, userId) - .orElseThrow(() -> new BookmarkHandler(ErrorStatus.BOOKMARK_NOT_FOUND)); - - return BookmarkConverter.toDetailDTO(bookmark); - } -} diff --git a/src/main/java/com/parentsgowork/server/service/crawlingService/CrawlingService.java b/src/main/java/com/parentsgowork/server/service/crawlingService/CrawlingService.java deleted file mode 100644 index 78befab..0000000 --- a/src/main/java/com/parentsgowork/server/service/crawlingService/CrawlingService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.parentsgowork.server.service.crawlingService; - -import com.parentsgowork.server.web.dto.JobCrawlingDTO.JobCrawlingDTO; -import java.util.List; - -public interface CrawlingService { - List getSeniorJobs(int page); -} diff --git a/src/main/java/com/parentsgowork/server/service/crawlingService/CrawlingServiceImpl.java b/src/main/java/com/parentsgowork/server/service/crawlingService/CrawlingServiceImpl.java deleted file mode 100644 index b4decca..0000000 --- a/src/main/java/com/parentsgowork/server/service/crawlingService/CrawlingServiceImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.parentsgowork.server.service.crawlingService; - -import com.parentsgowork.server.crawling.JobInfoCrawling; -import com.parentsgowork.server.web.dto.JobCrawlingDTO.JobCrawlingDTO; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class CrawlingServiceImpl implements CrawlingService { - - private final JobInfoCrawling jobPageCrawling; - - @Override - public List getSeniorJobs(int page) { - List jobs = jobPageCrawling.crawlJobs(page); - - long startId = (long) (page - 1) * jobs.size() + 1; - - for (int i = 0; i < jobs.size(); i++) { - jobs.get(i).setId(startId + i); - } - - return jobs; - } - -} diff --git a/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoCommandService.java b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoCommandService.java new file mode 100644 index 0000000..9f41423 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoCommandService.java @@ -0,0 +1,8 @@ +package com.parentsgowork.server.service.educationInfoService; + +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; + +public interface EducationInfoCommandService { + EducationInfoResponseDTO.DeleteEducationInfoDTO delete(Long userId, Long educationInfoId); + +} diff --git a/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoCommandServiceImpl.java b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoCommandServiceImpl.java new file mode 100644 index 0000000..a6653c6 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoCommandServiceImpl.java @@ -0,0 +1,34 @@ +package com.parentsgowork.server.service.educationInfoService; + +import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; +import com.parentsgowork.server.apiPayload.exception.EducationInfoHandler; +import com.parentsgowork.server.apiPayload.exception.UserHandler; +import com.parentsgowork.server.converter.EducationInfoConverter; +import com.parentsgowork.server.domain.EducationInfo; +import com.parentsgowork.server.repository.EducationInfoRepository; +import com.parentsgowork.server.repository.UserRepository; +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class EducationInfoCommandServiceImpl implements EducationInfoCommandService { + + private final EducationInfoRepository educationInfoRepository; + private final UserRepository userRepository; + + @Override + public EducationInfoResponseDTO.DeleteEducationInfoDTO delete(Long userId, Long educationInfoId) { + + userRepository.findById(userId) + .orElseThrow(() -> new UserHandler(ErrorStatus.USER_NOT_FOUND)); + + EducationInfo educationInfo = educationInfoRepository.findByIdAndUserId(educationInfoId, userId) + .orElseThrow(() -> new EducationInfoHandler(ErrorStatus.EDUCATION_INFO_NOT_FOUND)); + + educationInfoRepository.deleteById(educationInfoId); + + return EducationInfoConverter.DeleteEducationInfoDTO(educationInfo); + } +} diff --git a/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoQueryService.java b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoQueryService.java new file mode 100644 index 0000000..83d304a --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoQueryService.java @@ -0,0 +1,10 @@ +package com.parentsgowork.server.service.educationInfoService; + +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; + +import java.util.List; + +public interface EducationInfoQueryService { + List getEducationInfoList(Long userId); + EducationInfoResponseDTO.EducationInfoDetailDTO getEducationInfoDetails(Long userId, Long educationInfoId); +} diff --git a/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoQueryServiceImpl.java b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoQueryServiceImpl.java new file mode 100644 index 0000000..c96440c --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/educationInfoService/EducationInfoQueryServiceImpl.java @@ -0,0 +1,40 @@ +package com.parentsgowork.server.service.educationInfoService; + +import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; +import com.parentsgowork.server.apiPayload.exception.EducationInfoHandler; +import com.parentsgowork.server.converter.EducationInfoConverter; +import com.parentsgowork.server.domain.EducationInfo; +import com.parentsgowork.server.repository.EducationInfoRepository; +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class EducationInfoQueryServiceImpl implements EducationInfoQueryService { + + private final EducationInfoRepository educationInfoRepository; + + @Override + public List getEducationInfoList(Long userId) { + + List educationInfos = educationInfoRepository.findEducationInfoList(userId); + + if(educationInfos == null || educationInfos.isEmpty()) { + throw new EducationInfoHandler(ErrorStatus.EDUCATION_INFO_NOT_FOUND); + } + + return EducationInfoConverter.getEducationInfoListDTO(educationInfos); + } + + @Override + public EducationInfoResponseDTO.EducationInfoDetailDTO getEducationInfoDetails(Long userId, Long educationInfoId) { + + EducationInfo educationInfo = educationInfoRepository.findByIdAndUserId(educationInfoId, userId) + .orElseThrow(() -> new EducationInfoHandler(ErrorStatus.EDUCATION_INFO_NOT_FOUND)); + + return EducationInfoConverter.getEducationInfoDetailDTO(educationInfo); + } +} \ No newline at end of file diff --git a/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoCommandService.java b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoCommandService.java new file mode 100644 index 0000000..66e3257 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoCommandService.java @@ -0,0 +1,9 @@ +package com.parentsgowork.server.service.policyInfoService; + + +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; + +public interface PolicyInfoCommandService { + PolicyInfoResponseDTO.DeletePolicyInfoDTO delete(Long userId, Long policyInfoId); + +} diff --git a/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoCommandServiceImpl.java b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoCommandServiceImpl.java new file mode 100644 index 0000000..de80741 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoCommandServiceImpl.java @@ -0,0 +1,34 @@ +package com.parentsgowork.server.service.policyInfoService; + +import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; +import com.parentsgowork.server.apiPayload.exception.PolicyInfoHandler; +import com.parentsgowork.server.apiPayload.exception.UserHandler; +import com.parentsgowork.server.converter.PolicyInfoConverter; +import com.parentsgowork.server.domain.PolicyInfo; +import com.parentsgowork.server.repository.PolicyInfoRepository; +import com.parentsgowork.server.repository.UserRepository; +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class PolicyInfoCommandServiceImpl implements PolicyInfoCommandService { + + private final PolicyInfoRepository policyInfoRepository; + private final UserRepository userRepository; + + @Override + public PolicyInfoResponseDTO.DeletePolicyInfoDTO delete(Long userId, Long policyInfoId) { + + userRepository.findById(userId) + .orElseThrow(() -> new UserHandler(ErrorStatus.USER_NOT_FOUND)); + + PolicyInfo policyInfo = policyInfoRepository.findByIdAndUserId(policyInfoId, userId) + .orElseThrow(() -> new PolicyInfoHandler(ErrorStatus.POLICY_INFO_NOT_FOUND)); + + policyInfoRepository.deleteById(policyInfoId); + + return PolicyInfoConverter.DeletePolicyInfoDTO(policyInfo); + } +} diff --git a/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoQueryService.java b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoQueryService.java new file mode 100644 index 0000000..6e433ca --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoQueryService.java @@ -0,0 +1,10 @@ +package com.parentsgowork.server.service.policyInfoService; + +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; + +import java.util.List; + +public interface PolicyInfoQueryService { + List getPolicyInfoList(Long userId); + PolicyInfoResponseDTO.PolicyInfoDetailDTO getPolicyInfoDetails(Long userId, Long policyInfoId); +} diff --git a/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoQueryServiceImpl.java b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoQueryServiceImpl.java new file mode 100644 index 0000000..dee36e1 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/service/policyInfoService/PolicyInfoQueryServiceImpl.java @@ -0,0 +1,40 @@ +package com.parentsgowork.server.service.policyInfoService; + +import com.parentsgowork.server.apiPayload.code.status.ErrorStatus; +import com.parentsgowork.server.apiPayload.exception.PolicyInfoHandler; +import com.parentsgowork.server.converter.PolicyInfoConverter; +import com.parentsgowork.server.domain.PolicyInfo; +import com.parentsgowork.server.repository.PolicyInfoRepository; +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class PolicyInfoQueryServiceImpl implements PolicyInfoQueryService { + + private final PolicyInfoRepository policyInfoRepository; + + @Override + public List getPolicyInfoList(Long userId) { + + List policyInfos = policyInfoRepository.findPolicyInfoList(userId); + + if(policyInfos == null || policyInfos.isEmpty()) { + throw new PolicyInfoHandler(ErrorStatus.POLICY_INFO_NOT_FOUND); + } + + return PolicyInfoConverter.getPolicyInfoListDTO(policyInfos); + } + + @Override + public PolicyInfoResponseDTO.PolicyInfoDetailDTO getPolicyInfoDetails(Long userId, Long policyInfoId) { + + PolicyInfo policyInfo = policyInfoRepository.findByIdAndUserId(policyInfoId, userId) + .orElseThrow(() -> new PolicyInfoHandler(ErrorStatus.POLICY_INFO_NOT_FOUND)); + + return PolicyInfoConverter.getPolicyInfoDetailDTO(policyInfo); + } +} diff --git a/src/main/java/com/parentsgowork/server/util/WebDriverUtil.java b/src/main/java/com/parentsgowork/server/util/WebDriverUtil.java deleted file mode 100644 index 24ba143..0000000 --- a/src/main/java/com/parentsgowork/server/util/WebDriverUtil.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.parentsgowork.server.util; - -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.chrome.ChromeDriver; -import org.openqa.selenium.chrome.ChromeOptions; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.util.ObjectUtils; - -import java.time.Duration; - -@Component -public class WebDriverUtil { - - private static String WEB_DRIVER_PATH; // WebDriver 경로 - - public static WebDriver getChromeDriver() { - if (ObjectUtils.isEmpty(System.getProperty("webdriver.chrome.driver"))) { - System.setProperty("webdriver.chrome.driver", WEB_DRIVER_PATH); - } - - // webDriver 옵션 설정 - ChromeOptions chromeOptions = new ChromeOptions(); - chromeOptions.addArguments("--headless"); - chromeOptions.addArguments("--lang=ko"); - chromeOptions.addArguments("--no-sandbox"); - chromeOptions.addArguments("--disable-dev-shm-usage"); - chromeOptions.addArguments("--disable-gpu"); - - WebDriver driver = new ChromeDriver(chromeOptions); - driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30)); - - return driver; - } - - @Value("${driver.chrome.driver_path}") - public void initDriver(String path){ - WEB_DRIVER_PATH = path; - } - - public static void quit(WebDriver driver) { - if (!ObjectUtils.isEmpty(driver)) { - driver.quit(); - } - } - -} diff --git a/src/main/java/com/parentsgowork/server/web/controller/BookmarkController.java b/src/main/java/com/parentsgowork/server/web/controller/BookmarkController.java deleted file mode 100644 index 5427e45..0000000 --- a/src/main/java/com/parentsgowork/server/web/controller/BookmarkController.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.parentsgowork.server.web.controller; - -import com.parentsgowork.server.apiPayload.ApiResponse; -import com.parentsgowork.server.service.bookmarkService.BookmarkCommandService; -import com.parentsgowork.server.service.bookmarkService.BookmarkQueryService; -import com.parentsgowork.server.web.controller.specification.BookmarkSpecification; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@Tag(name = "Bookmark", description = "북마크 API") -@RestController -@RequiredArgsConstructor -@RequestMapping("/bookmark") -public class BookmarkController implements BookmarkSpecification { - - private final BookmarkCommandService bookmarkCommandService; - private final BookmarkQueryService bookmarkQueryService; - - @PostMapping("") - public ApiResponse bookmarkJob(@RequestBody BookmarkRequestDTO.jobInfoBookmarkDTO request) { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - Long userId = (Long) authentication.getPrincipal(); - - BookmarkRequestDTO.SaveBookmarkDTO response = bookmarkCommandService.bookmarkJob(userId, request.getJobId(), request.getPage()); - return ApiResponse.onSuccess(response); - } - - @GetMapping("") - public ApiResponse> getBookmarkList() { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - Long userId = (Long) authentication.getPrincipal(); - - List response = bookmarkQueryService.getBookmarkList(userId); - return ApiResponse.onSuccess(response); - } - - @GetMapping("{bookmarkId}") - public ApiResponse getBookmarkDetails(@PathVariable Long bookmarkId) { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - Long userId = (Long) authentication.getPrincipal(); - - BookmarkResponseDTO.BookmarkDetailInfoDTO response = bookmarkQueryService.getBookmarkDetails(userId, bookmarkId); - return ApiResponse.onSuccess(response); - } - - @DeleteMapping("{bookmarkId}") - public ApiResponse deleteBookmark(@PathVariable("bookmarkId") Long bookmarkId) { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - Long userId = (Long) authentication.getPrincipal(); - - BookmarkResponseDTO.DeleteBookmarkDTO deleteBookmark = bookmarkCommandService.delete(bookmarkId, userId); - return ApiResponse.onSuccess(deleteBookmark); - } -} diff --git a/src/main/java/com/parentsgowork/server/web/controller/CrawlingController.java b/src/main/java/com/parentsgowork/server/web/controller/CrawlingController.java deleted file mode 100644 index e780297..0000000 --- a/src/main/java/com/parentsgowork/server/web/controller/CrawlingController.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.parentsgowork.server.web.controller; - -import com.parentsgowork.server.apiPayload.ApiResponse; -import com.parentsgowork.server.service.crawlingService.CrawlingService; -import com.parentsgowork.server.web.controller.specification.CrawlingSpecification; -import com.parentsgowork.server.web.dto.JobCrawlingDTO.JobCrawlingDTO; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.boot.autoconfigure.batch.BatchProperties; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@Tag(name = "Crawler", description = "크롤링 API") -@RestController -@RequiredArgsConstructor -@RequestMapping("/crawler") -public class CrawlingController implements CrawlingSpecification { - - private final CrawlingService crawlingService; - - @Override - @GetMapping("/seniorJobs") - public ApiResponse> jobCrawler(@RequestParam(defaultValue = "1") int page) { - - List response = crawlingService.getSeniorJobs(page); - return ApiResponse.onSuccess(response); - } -} diff --git a/src/main/java/com/parentsgowork/server/web/controller/EducationInfoController.java b/src/main/java/com/parentsgowork/server/web/controller/EducationInfoController.java new file mode 100644 index 0000000..be49453 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/web/controller/EducationInfoController.java @@ -0,0 +1,51 @@ +package com.parentsgowork.server.web.controller; + +import com.parentsgowork.server.apiPayload.ApiResponse; +import com.parentsgowork.server.service.educationInfoService.EducationInfoCommandService; +import com.parentsgowork.server.service.educationInfoService.EducationInfoQueryService; +import com.parentsgowork.server.web.controller.specification.EducationInfoSpecification; +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Tag(name = "EducationInfo", description = "교육정보 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/educationInfo") +public class EducationInfoController implements EducationInfoSpecification { + + private final EducationInfoCommandService educationInfoCommandService; + private final EducationInfoQueryService educationInfoQueryService; + + @GetMapping("") + public ApiResponse> getEducationInfoList() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + Long userId = (Long) authentication.getPrincipal(); + + List response = educationInfoQueryService.getEducationInfoList(userId); + return ApiResponse.onSuccess(response); + } + + @GetMapping("/{educationInfoId}") + public ApiResponse getEducationInfoDetails(@PathVariable Long educationInfoId) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + Long userId = (Long) authentication.getPrincipal(); + + EducationInfoResponseDTO.EducationInfoDetailDTO response = educationInfoQueryService.getEducationInfoDetails(userId, educationInfoId); + return ApiResponse.onSuccess(response); + } + + @DeleteMapping("/{educationInfoId}") + public ApiResponse deleteEducationInfo(@PathVariable("educationInfoId") Long educationInfoId) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + Long userId = (Long) authentication.getPrincipal(); + + EducationInfoResponseDTO.DeleteEducationInfoDTO response = educationInfoCommandService.delete(educationInfoId, userId); + return ApiResponse.onSuccess(response); + } +} diff --git a/src/main/java/com/parentsgowork/server/web/controller/PolicyInfoController.java b/src/main/java/com/parentsgowork/server/web/controller/PolicyInfoController.java new file mode 100644 index 0000000..6e48433 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/web/controller/PolicyInfoController.java @@ -0,0 +1,51 @@ +package com.parentsgowork.server.web.controller; + +import com.parentsgowork.server.apiPayload.ApiResponse; +import com.parentsgowork.server.service.policyInfoService.PolicyInfoCommandService; +import com.parentsgowork.server.service.policyInfoService.PolicyInfoQueryService; +import com.parentsgowork.server.web.controller.specification.PolicyInfoSpecification; +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Tag(name = "PolicyInfo", description = "정책정보 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/policyInfo") +public class PolicyInfoController implements PolicyInfoSpecification { + + private final PolicyInfoCommandService policyInfoCommandService; + private final PolicyInfoQueryService policyInfoQueryService; + + @GetMapping("") + public ApiResponse> getPolicyInfoList() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + Long userId = (Long) authentication.getPrincipal(); + + List response = policyInfoQueryService.getPolicyInfoList(userId); + return ApiResponse.onSuccess(response); + } + + @GetMapping("/{policyInfoId}") + public ApiResponse getPolicyInfoDetails(@PathVariable Long policyInfoId) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + Long userId = (Long) authentication.getPrincipal(); + + PolicyInfoResponseDTO.PolicyInfoDetailDTO response = policyInfoQueryService.getPolicyInfoDetails(userId, policyInfoId); + return ApiResponse.onSuccess(response); + } + + @DeleteMapping("/{policyInfoId}") + public ApiResponse deletePolicyInfo(@PathVariable("policyInfoId") Long policyInfoId) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + Long userId = (Long) authentication.getPrincipal(); + + PolicyInfoResponseDTO.DeletePolicyInfoDTO response = policyInfoCommandService.delete(policyInfoId, userId); + return ApiResponse.onSuccess(response); + } +} diff --git a/src/main/java/com/parentsgowork/server/web/controller/specification/BookmarkSpecification.java b/src/main/java/com/parentsgowork/server/web/controller/specification/BookmarkSpecification.java deleted file mode 100644 index e5bc7fc..0000000 --- a/src/main/java/com/parentsgowork/server/web/controller/specification/BookmarkSpecification.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.parentsgowork.server.web.controller.specification; - -import com.parentsgowork.server.apiPayload.ApiResponse; -import com.parentsgowork.server.domain.Bookmark; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkRequestDTO; -import com.parentsgowork.server.web.dto.BookmarkDTO.BookmarkResponseDTO; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -public interface BookmarkSpecification { - - @PostMapping("/") - @Operation(summary = "채용 정보 북마크", description = "저장하고 싶은 채용 정보를 북마크합니다.
" + "job 아이디와 페이지 값을 보내주세요.") - @ApiResponses({ - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) - }) - ApiResponse bookmarkJob(@RequestBody BookmarkRequestDTO.jobInfoBookmarkDTO request); - - @GetMapping("/") - @Operation(summary = "내가 저장한 북마크 리스트 조회", description = "내가 저장한 북마크 리스트를 조회합니다.") - @ApiResponses({ - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) - }) - ApiResponse> getBookmarkList(); - - @GetMapping("{bookmarkId}") - @Operation(summary = "특정 북마크 조회", description = "내가 저장한 북마크 중 특정 북마크를 조회합니다. bookmark 아이디 값을 보내주세요.") - @ApiResponses({ - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) - }) - ApiResponse getBookmarkDetails(@PathVariable Long bookmarkId); - - @DeleteMapping("{bookmarkId}") - @Operation(summary = "내가 저장한 북마크 삭제", description = "내가 저장한 북마크 리스트를 삭제합니다.") - @ApiResponses({ - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) - }) - ApiResponse deleteBookmark(@PathVariable("bookmarkId") Long bookmarkId); - -} diff --git a/src/main/java/com/parentsgowork/server/web/controller/specification/CrawlingSpecification.java b/src/main/java/com/parentsgowork/server/web/controller/specification/CrawlingSpecification.java deleted file mode 100644 index 56cc478..0000000 --- a/src/main/java/com/parentsgowork/server/web/controller/specification/CrawlingSpecification.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.parentsgowork.server.web.controller.specification; - -import com.parentsgowork.server.apiPayload.ApiResponse; -import com.parentsgowork.server.web.dto.JobCrawlingDTO.JobCrawlingDTO; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -import java.util.List; - -public interface CrawlingSpecification { - - @GetMapping("/seniorJobs") - @Operation(summary = "채용정보 크롤링", description = "우대 조건이 50세 이상인 채용 정보를 조회합니다.") - @ApiResponses({ - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) - }) - ApiResponse> jobCrawler(@RequestParam(defaultValue = "1") int page); -} diff --git a/src/main/java/com/parentsgowork/server/web/controller/specification/EducationInfoSpecification.java b/src/main/java/com/parentsgowork/server/web/controller/specification/EducationInfoSpecification.java new file mode 100644 index 0000000..c5237b2 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/web/controller/specification/EducationInfoSpecification.java @@ -0,0 +1,39 @@ +package com.parentsgowork.server.web.controller.specification; + +import com.parentsgowork.server.apiPayload.ApiResponse; +import com.parentsgowork.server.web.dto.EducationInfoDTO.EducationInfoResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +public interface EducationInfoSpecification { + + @GetMapping("") + @Operation(summary = "내가 저장한 교육정보 리스트 조회", description = "내가 저장한 교육정보 리스트를 조회합니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) + }) + ApiResponse> getEducationInfoList(); + + @GetMapping("/{educationInfoId}") + @Operation(summary = "특정 교육정보 조회", description = "내가 저장한 특정 교육정보를 조회합니다. 교육정보 아이디 값을 보내주세요.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) + }) + ApiResponse getEducationInfoDetails(@PathVariable Long educationInfoId); + + @DeleteMapping("/{educationInfoId}") + @Operation(summary = "내가 저장한 교육정보 삭제", description = "내가 저장한 특정 교육정보를 삭제합니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) + }) + ApiResponse deleteEducationInfo(@PathVariable("educationInfoId") Long educationInfoId); + +} diff --git a/src/main/java/com/parentsgowork/server/web/controller/specification/PolicyInfoSpecification.java b/src/main/java/com/parentsgowork/server/web/controller/specification/PolicyInfoSpecification.java new file mode 100644 index 0000000..9b81aba --- /dev/null +++ b/src/main/java/com/parentsgowork/server/web/controller/specification/PolicyInfoSpecification.java @@ -0,0 +1,41 @@ +package com.parentsgowork.server.web.controller.specification; + +import com.parentsgowork.server.apiPayload.ApiResponse; +import com.parentsgowork.server.web.dto.PolicyInfoDTO.PolicyInfoResponseDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; + +public interface PolicyInfoSpecification { + + @GetMapping("") + @Operation(summary = "내가 저장한 고용 정책/복지 리스트 조회", description = "내가 저장한 고용 정책/복지 리스트를 조회합니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) + }) + ApiResponse> getPolicyInfoList(); + + @GetMapping("/{policyInfoId}") + @Operation(summary = "특정 고용 정책/복지 조회", description = "내가 저장한 특정 고용 정책/복지를 조회합니다. 고용 정책/복지 아이디 값을 보내주세요.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) + }) + ApiResponse getPolicyInfoDetails(@PathVariable Long policyInfoId); + + @DeleteMapping("/{policyInfoId}") + @Operation(summary = "내가 저장한 고용 정책/복지 삭제", description = "내가 저장한 특정 고용 정책/복지를 삭제합니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "⭕ SUCCESS, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON400", description = "❌ BAD, 잘못된 요청", content = @Content(schema = @Schema(implementation = ApiResponse.class))) + }) + ApiResponse deletePolicyInfo(@PathVariable("policyInfoId") Long policyInfoId); + +} diff --git a/src/main/java/com/parentsgowork/server/web/dto/BookmarkDTO/BookmarkRequestDTO.java b/src/main/java/com/parentsgowork/server/web/dto/BookmarkDTO/BookmarkRequestDTO.java deleted file mode 100644 index 1ab0724..0000000 --- a/src/main/java/com/parentsgowork/server/web/dto/BookmarkDTO/BookmarkRequestDTO.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.parentsgowork.server.web.dto.BookmarkDTO; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -public class BookmarkRequestDTO { - @Getter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class jobInfoBookmarkDTO { - private Long jobId; - private Integer page; - } - - @Getter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class SaveBookmarkDTO { - private Long id; - private Long jobId; - private String companyName; - private String jobTitle; - private String pay; - private String time; - private String location; - private String deadline; - private String registrationDate; - private String detailUrl; - } - -} diff --git a/src/main/java/com/parentsgowork/server/web/dto/BookmarkDTO/BookmarkResponseDTO.java b/src/main/java/com/parentsgowork/server/web/dto/BookmarkDTO/BookmarkResponseDTO.java deleted file mode 100644 index c45bd27..0000000 --- a/src/main/java/com/parentsgowork/server/web/dto/BookmarkDTO/BookmarkResponseDTO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.parentsgowork.server.web.dto.BookmarkDTO; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -public class BookmarkResponseDTO { - - @Getter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class BookmarkListDTO { - private Long id; - private Long jobId; - private String companyName; - private String jobTitle; - private String pay; - private String time; - private String location; - private String deadline; - private String registrationDate; - private String detailUrl; - } - - @Getter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class BookmarkDetailInfoDTO { - private Long id; - private String jobTitle; - private String companyName; - private String pay; - private String time; - private String location; - private String deadline; - private String registrationDate; - private String detailUrl; - } - - @Getter - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class DeleteBookmarkDTO { - private Long id; - private String message; // ex) 북마크 삭제가 완료되었습니다. - } - -} diff --git a/src/main/java/com/parentsgowork/server/web/dto/EducationInfoDTO/EducationInfoResponseDTO.java b/src/main/java/com/parentsgowork/server/web/dto/EducationInfoDTO/EducationInfoResponseDTO.java new file mode 100644 index 0000000..2bbcfc0 --- /dev/null +++ b/src/main/java/com/parentsgowork/server/web/dto/EducationInfoDTO/EducationInfoResponseDTO.java @@ -0,0 +1,41 @@ +package com.parentsgowork.server.web.dto.EducationInfoDTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +public class EducationInfoResponseDTO { + + // 저장한 교육정보 리스트 dto + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class EducationInfoListDTO { + private Long id; + private String title; + private String url; + } + + // 저장한 교육정보 상세페이지 dto + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class EducationInfoDetailDTO { + private Long id; + private String title; + private String url; + } + + // 저장한 교육정보 삭제 dto + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class DeleteEducationInfoDTO { + private Long id; + private String message; + } +} diff --git a/src/main/java/com/parentsgowork/server/web/dto/JobCrawlingDTO/JobCrawlingDTO.java b/src/main/java/com/parentsgowork/server/web/dto/JobCrawlingDTO/JobCrawlingDTO.java deleted file mode 100644 index 8d07c99..0000000 --- a/src/main/java/com/parentsgowork/server/web/dto/JobCrawlingDTO/JobCrawlingDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.parentsgowork.server.web.dto.JobCrawlingDTO; - - -import lombok.*; - -public class JobCrawlingDTO { - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class JobInfoDTO { - private Long id; - private String companyName; - private String jobTitle; - private String pay; - private String workTime; - private String location; - private String deadline; - private String registrationDate; - private String detailUrl; - } - -} diff --git a/src/main/java/com/parentsgowork/server/web/dto/PolicyInfoDTO/PolicyInfoResponseDTO.java b/src/main/java/com/parentsgowork/server/web/dto/PolicyInfoDTO/PolicyInfoResponseDTO.java new file mode 100644 index 0000000..71d292b --- /dev/null +++ b/src/main/java/com/parentsgowork/server/web/dto/PolicyInfoDTO/PolicyInfoResponseDTO.java @@ -0,0 +1,41 @@ +package com.parentsgowork.server.web.dto.PolicyInfoDTO; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +public class PolicyInfoResponseDTO { + + // 저장한 정책정보 리스트 dto + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class PolicyInfoListDTO { + private Long id; + private String title; + private String url; + } + + // 저장한 정책정보 상세페이지 dto + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class PolicyInfoDetailDTO { + private Long id; + private String title; + private String url; + } + + // 저장한 정책정보 삭제 dto + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class DeletePolicyInfoDTO { + private Long id; + private String message; + } +}