Skip to content

Commit fc346a9

Browse files
authored
Merge pull request #47 from parentsgowork/feat/#46
[#46] Feat: 구직 정보 북마크 저장
2 parents 963ad27 + 82ec8bb commit fc346a9

14 files changed

Lines changed: 448 additions & 28 deletions

File tree

src/main/java/com/parentsgowork/server/apiPayload/code/status/ErrorStatus.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ public enum ErrorStatus implements BaseErrorCode {
4646
EMAIL_ENCODING_FAIL(HttpStatus.INTERNAL_SERVER_ERROR, "AUTH5002", "이메일 내용 인코딩에 실패했습니다."),
4747

4848
// 북마크 관련 에러
49-
EDUCATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4001", "북마크한 교육정보가 존재하지 않습니다."),
50-
POLICY_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4002", "북마크한 정책정보가 존재하지 않습니다.");
49+
EDUCATION_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4001", "교육정보가 존재하지 않습니다."),
50+
POLICY_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4002", "정책정보가 존재하지 않습니다."),
51+
JOB_INFO_NOT_FOUND(HttpStatus.NOT_FOUND, "BOOKMARK4003", "구직정보가 존재하지 않습니다.");
5152

5253

5354

src/main/java/com/parentsgowork/server/apiPayload/exception/JobInfoCrawlingHandler.java renamed to src/main/java/com/parentsgowork/server/apiPayload/exception/JobInfoHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import com.parentsgowork.server.apiPayload.code.BaseErrorCode;
44

5-
public class JobInfoCrawlingHandler extends GeneralException {
6-
public JobInfoCrawlingHandler(BaseErrorCode code) {
5+
public class JobInfoHandler extends GeneralException {
6+
public JobInfoHandler(BaseErrorCode code) {
77
super(code);
88
}
99
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.parentsgowork.server.converter;
2+
3+
import com.parentsgowork.server.domain.JobInfo;
4+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoResponseDTO;
5+
6+
import java.util.List;
7+
import java.util.stream.Collectors;
8+
9+
public class JobInfoConverter {
10+
11+
public static JobInfoResponseDTO.AddJobResultDTO toAddJobResultDTO(JobInfo jobInfo) {
12+
return JobInfoResponseDTO.AddJobResultDTO.builder()
13+
.title(jobInfo.getTitle())
14+
.content(jobInfo.getContent())
15+
.build();
16+
}
17+
18+
public static List<JobInfoResponseDTO.JobInfoResultDTO> getJobInfoListDTO(List<JobInfo> jobInfos) {
19+
return jobInfos.stream()
20+
.map(job -> JobInfoResponseDTO.JobInfoResultDTO.builder()
21+
.title(job.getTitle())
22+
.content(job.getContent())
23+
.build())
24+
.collect(Collectors.toList());
25+
}
26+
27+
public static JobInfoResponseDTO.JobInfoDetailDTO getJobInfoDetailDTO(JobInfo jobInfo) {
28+
return JobInfoResponseDTO.JobInfoDetailDTO.builder()
29+
.title(jobInfo.getTitle())
30+
.content(jobInfo.getContent())
31+
.build();
32+
}
33+
34+
35+
public static JobInfoResponseDTO.DeleteJobInfoDTO DeleteJobInfoDTO(JobInfo jobInfo) {
36+
return JobInfoResponseDTO.DeleteJobInfoDTO.builder()
37+
.id(jobInfo.getId())
38+
.message("저장한 구직정보를 삭제하였습니다.")
39+
.build();
40+
}
41+
}

src/main/java/com/parentsgowork/server/domain/Bookmark.java renamed to src/main/java/com/parentsgowork/server/domain/JobInfo.java

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
@Builder
1212
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1313
@AllArgsConstructor
14-
public class Bookmark extends BaseEntity {
14+
public class JobInfo extends BaseEntity {
1515

1616
@Id
1717
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -23,30 +23,12 @@ public class Bookmark extends BaseEntity {
2323
private User user;
2424

2525
@Column
26-
private Long jobId;
26+
private String title;
2727

2828
@Column
29-
private String companyName;
29+
private String content;
3030

31-
@Column
32-
private String jobTitle;
33-
34-
@Column
35-
private String pay;
36-
37-
@Column
38-
private String time;
39-
40-
@Column
41-
private String location;
42-
43-
@Column
44-
private String deadline;
45-
46-
@Column
47-
private String registrationDate;
48-
49-
@Column(columnDefinition = "TEXT")
50-
private String detailUrl;
31+
// @Column(columnDefinition = "TEXT")
32+
// private String url;
5133

5234
}

src/main/java/com/parentsgowork/server/domain/User.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class User extends BaseEntity {
6363
private RefreshToken refreshToken;
6464

6565
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
66-
private List<Bookmark> bookmarks;
66+
private List<JobInfo> bookmarks;
6767

6868
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
6969
private List<PolicyInfo> policyInfos;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.parentsgowork.server.repository;
2+
3+
import com.parentsgowork.server.domain.JobInfo;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.data.repository.query.Param;
7+
8+
import java.util.List;
9+
import java.util.Optional;
10+
11+
public interface JobInfoRepository extends JpaRepository<JobInfo, Long> {
12+
@Query("SELECT ji FROM JobInfo ji " +
13+
"WHERE ji. user.id = :userId")
14+
List<JobInfo> findJobInfoList(@Param("userId") Long userId);
15+
16+
Optional<JobInfo> findByIdAndUserId(@Param("jobInfoId") Long jobInfoId, @Param("userId") Long userId);
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.parentsgowork.server.service.jobInfoService;
2+
3+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoRequestDTO;
4+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoResponseDTO;
5+
6+
import java.util.List;
7+
8+
public interface JobInfoCommandService {
9+
10+
List<JobInfoResponseDTO.AddJobResultDTO> addJobInfo(Long userId, List<JobInfoRequestDTO.SaveJobInfoDTO> saveJobInfoDTOList);
11+
12+
JobInfoResponseDTO.DeleteJobInfoDTO delete(Long userId, Long jobInfoId);
13+
14+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.parentsgowork.server.service.jobInfoService;
2+
3+
import com.parentsgowork.server.apiPayload.code.status.ErrorStatus;
4+
import com.parentsgowork.server.apiPayload.exception.JobInfoHandler;
5+
import com.parentsgowork.server.converter.JobInfoConverter;
6+
import com.parentsgowork.server.domain.JobInfo;
7+
import com.parentsgowork.server.domain.User;
8+
import com.parentsgowork.server.repository.JobInfoRepository;
9+
import com.parentsgowork.server.repository.UserRepository;
10+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoRequestDTO;
11+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoResponseDTO;
12+
import lombok.RequiredArgsConstructor;
13+
import lombok.extern.slf4j.Slf4j;
14+
import org.springframework.stereotype.Service;
15+
16+
import java.util.List;
17+
import java.util.stream.Collectors;
18+
19+
@Service
20+
@RequiredArgsConstructor
21+
@Slf4j
22+
public class JobInfoCommandServiceImpl implements JobInfoCommandService {
23+
24+
private final UserRepository userRepository;
25+
private final JobInfoRepository jobInfoRepository;
26+
27+
@Override
28+
public List<JobInfoResponseDTO.AddJobResultDTO> addJobInfo(Long userId, List<JobInfoRequestDTO.SaveJobInfoDTO> saveJobInfoDTOList) {
29+
User user = userRepository.findById(userId)
30+
.orElseThrow(() -> new JobInfoHandler(ErrorStatus.USER_NOT_FOUND));
31+
32+
List<JobInfo> jobInfos = saveJobInfoDTOList.stream()
33+
.map(dto -> JobInfo.builder()
34+
.title(dto.getTitle())
35+
.content(dto.getContent())
36+
.user(user)
37+
.build())
38+
.collect(Collectors.toList());
39+
40+
jobInfoRepository.saveAll(jobInfos);
41+
42+
return jobInfos.stream()
43+
.map(JobInfoConverter::toAddJobResultDTO)
44+
.collect(Collectors.toList());
45+
}
46+
47+
@Override
48+
public JobInfoResponseDTO.DeleteJobInfoDTO delete(Long userId, Long jobInfoId) {
49+
50+
userRepository.findById(userId)
51+
.orElseThrow(() -> new JobInfoHandler(ErrorStatus.USER_NOT_FOUND));
52+
53+
JobInfo jobInfo = jobInfoRepository.findByIdAndUserId(jobInfoId, userId)
54+
.orElseThrow(() -> new JobInfoHandler(ErrorStatus.JOB_INFO_NOT_FOUND));
55+
56+
jobInfoRepository.deleteById(jobInfoId);
57+
58+
return JobInfoConverter.DeleteJobInfoDTO(jobInfo);
59+
}
60+
61+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.parentsgowork.server.service.jobInfoService;
2+
3+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoResponseDTO;
4+
5+
import java.util.List;
6+
7+
public interface JobInfoQueryService {
8+
9+
List<JobInfoResponseDTO.JobInfoResultDTO> getJobInfoList(Long userId);
10+
JobInfoResponseDTO.JobInfoDetailDTO getJobInfoDetails(Long userId, Long jobInfoId);
11+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.parentsgowork.server.service.jobInfoService;
2+
3+
import com.parentsgowork.server.apiPayload.code.status.ErrorStatus;
4+
import com.parentsgowork.server.apiPayload.exception.JobInfoHandler;
5+
import com.parentsgowork.server.converter.JobInfoConverter;
6+
import com.parentsgowork.server.domain.JobInfo;
7+
import com.parentsgowork.server.repository.JobInfoRepository;
8+
import com.parentsgowork.server.web.dto.JobInfoDTO.JobInfoResponseDTO;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.stereotype.Service;
11+
12+
import java.util.List;
13+
14+
@Service
15+
@RequiredArgsConstructor
16+
public class JobInfoQueryServiceImpl implements JobInfoQueryService {
17+
18+
private final JobInfoRepository jobInfoRepository;
19+
20+
@Override
21+
public List<JobInfoResponseDTO.JobInfoResultDTO> getJobInfoList(Long userId) {
22+
23+
List<JobInfo> jobInfos = jobInfoRepository.findJobInfoList(userId);
24+
25+
if(jobInfos == null || jobInfos.isEmpty()) {
26+
throw new JobInfoHandler(ErrorStatus.JOB_INFO_NOT_FOUND);
27+
}
28+
29+
return JobInfoConverter.getJobInfoListDTO(jobInfos);
30+
}
31+
32+
@Override
33+
public JobInfoResponseDTO.JobInfoDetailDTO getJobInfoDetails(Long userId, Long jobInfoId) {
34+
35+
JobInfo jobInfo = jobInfoRepository.findByIdAndUserId(jobInfoId, userId)
36+
.orElseThrow(() -> new JobInfoHandler(ErrorStatus.JOB_INFO_NOT_FOUND));
37+
38+
return JobInfoConverter.getJobInfoDetailDTO(jobInfo);
39+
}
40+
}

0 commit comments

Comments
 (0)