Skip to content

Commit

Permalink
Merge pull request #184 from ITZipProject/feature/job-info-scrap
Browse files Browse the repository at this point in the history
🛠️ 리팩토링 : Scrap캐싱 적용
  • Loading branch information
rowing0328 authored Dec 4, 2024
2 parents f92146d + 38334bc commit 933735a
Show file tree
Hide file tree
Showing 42 changed files with 945 additions and 531 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import darkoverload.itzip.feature.job.controller.request.JobInfoScrapRequest;
import darkoverload.itzip.feature.job.controller.response.JobInfoSearchResponse;
import darkoverload.itzip.feature.job.service.JobInfoScrapRedisService;
import darkoverload.itzip.feature.job.service.JobInfoService;
import darkoverload.itzip.global.config.response.code.CommonExceptionCode;
import darkoverload.itzip.global.config.response.code.CommonResponseCode;
Expand All @@ -28,6 +29,7 @@
public class JobInfoController {

private final JobInfoService jobInfoService;
private final JobInfoScrapRedisService jobInfoScrapRedisService;

@Operation(
summary = "채용공고 조회",
Expand All @@ -36,9 +38,9 @@ public class JobInfoController {
@ResponseCodeAnnotation(CommonResponseCode.SUCCESS)
@ExceptionCodeAnnotations(CommonExceptionCode.BAD_REQUEST)
@GetMapping("")
public Page<JobInfoSearchResponse> searchJobInfo(@Parameter(description = "검색어") @RequestParam(value="search", required = false) String search, @Parameter(description = "기술 정보 필터") @RequestParam(value="techName", required = false) String category, @Parameter(description = "경력 최소 값") @RequestParam(value="experienceMin", required = false) Integer experienceMin, @Parameter(description = "경력 최대 값")@RequestParam(value="experienceMax", required = false) Integer experienceMax, @Parameter(description = "Size : 페이지당 출력할 항목의 개수 (기본값: 10) \n sort`: 정렬 기준 필드 (기본값: `scrap`) \n direction`: 정렬 순서 (기본값: 내림차순 `DESC`)") @PageableDefault(size = 10,sort="scrap",direction = Sort.Direction.DESC)Pageable pageable) {
public Page<JobInfoSearchResponse> searchJobInfo(@Parameter(description = "검색어") @RequestParam(value = "search", required = false) String search, @Parameter(description = "기술 정보 필터") @RequestParam(value = "techName", required = false) String category, @Parameter(description = "경력 최소 값") @RequestParam(value = "experienceMin", required = false) Integer experienceMin, @Parameter(description = "지역정보") @RequestParam(required = false) String location, @Parameter(description = "경력 최대 값") @RequestParam(value = "experienceMax", required = false) Integer experienceMax, @Parameter(description = "Size : 페이지당 출력할 항목의 개수 (기본값: 10) \n sort`: 정렬 기준 필드 (기본값: `scrap`) \n direction`: 정렬 순서 (기본값: 내림차순 `DESC`)") @PageableDefault(size = 10, sort = "scrap", direction = Sort.Direction.DESC) Pageable pageable) {

return jobInfoService.searchJobInfo(search, category, experienceMin, experienceMax ,pageable);
return jobInfoService.searchJobInfo(search, category, experienceMin, experienceMax, location, pageable);
}

@Operation(
Expand All @@ -50,7 +52,7 @@ public Page<JobInfoSearchResponse> searchJobInfo(@Parameter(description = "검
public String scrapJobInfo(@SwaggerRequestBody(description = "채용정보 스크립에 대한 정보", required = true, content = @Content(schema = @Schema(implementation = JobInfoScrapRequest.class)
)) @RequestBody JobInfoScrapRequest request) {

return jobInfoService.jobInfoScrap(request);
return jobInfoScrapRedisService.jobInfoScrapToRedis(request);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package darkoverload.itzip.feature.job.domain;

import darkoverload.itzip.feature.job.domain.job.JobInfo;
import darkoverload.itzip.feature.job.util.JobInfoJsonUtil;
import darkoverload.itzip.global.config.webclient.WebClientWrapper;
import lombok.Builder;
Expand Down
186 changes: 0 additions & 186 deletions src/main/java/darkoverload/itzip/feature/job/domain/JobInfo.java

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package darkoverload.itzip.feature.job.entity;
package darkoverload.itzip.feature.job.domain.job;

import darkoverload.itzip.feature.job.domain.JobInfo;
import darkoverload.itzip.global.entity.AuditingFields;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;

import java.time.LocalDateTime;

@ToString
Expand All @@ -12,8 +13,12 @@
@Builder
@AllArgsConstructor
@NoArgsConstructor(access= AccessLevel.PROTECTED)
@EqualsAndHashCode(callSuper = false)
@Table(name="job_infos")
public class JobInfoEntity extends AuditingFields {
public class JobInfo extends AuditingFields {

private static final String MAP_JOB_SCARP_COUNT_KEY = "jobScrapCount:";


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Expand Down Expand Up @@ -136,43 +141,20 @@ public class JobInfoEntity extends AuditingFields {
private String closeTypeName;


@Column(name="scrap_count", columnDefinition = "INTEGER DEFAULT 0")
@Column(name="scrap_count")
@ColumnDefault("0")
private Integer scrapCount;

public static String makeScrapCountRedisKey(Long jobInfoId) {
StringBuilder sb = new StringBuilder();
return sb.append(MAP_JOB_SCARP_COUNT_KEY)
.append(jobInfoId).toString();
}


public JobInfo convertToDomain() {
return JobInfo.builder()
.id(this.id)
.positionId(this.positionId)
.companyName(this.companyName)
.companyHref(this.companyHref)
.url(this.url)
.active(this.active)
.title(this.title)
.industryCode(this.industryCode)
.industryName(this.industryName)
.locationCode(this.locationCode)
.locationName(this.locationName)
.jobTypeCode(this.jobTypeCode)
.jobTypeName(this.jobTypeName)
.jobMidCode(this.jobMidCode)
.jobMidName(this.jobMidName)
.jobName(this.jobName)
.jobCode(this.jobCode)
.experienceCode(this.experienceCode)
.experienceMin(this.experienceMin)
.experienceMax(this.experienceMax)
.experienceName(this.experienceName)
.requiredEducationName(this.requiredEducationName)
.requiredEducationCode(this.requiredEducationCode)
.keyword(this.keyword)
.salaryCode(this.salaryCode)
.salaryName(this.salaryName)
.postingDate(this.postingDate)
.expirationDate(this.expirationDate)
.closeTypeCode(this.closeTypeCode)
.closeTypeName(this.closeTypeName)
.scrapCount(this.scrapCount)
.build();
public int updateScrapCount(int scrapCount) {
this.scrapCount += scrapCount;
return this.scrapCount;
}

}
Loading

0 comments on commit 933735a

Please sign in to comment.