diff --git a/src/main/java/com/il210so/server/controller/LicenseInfoController.java b/src/main/java/com/il210so/server/controller/LicenseInfoController.java new file mode 100644 index 0000000..acb9069 --- /dev/null +++ b/src/main/java/com/il210so/server/controller/LicenseInfoController.java @@ -0,0 +1,44 @@ +package com.il210so.server.controller; + +import com.il210so.server.dto.request.licenseInfo.LicenseInfoRequest; +import com.il210so.server.dto.response.licenseInfo.LicenseInfoResponse; +import com.il210so.server.service.licenseInfo.LicenseInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/members/{memberId}/resumes/{resumeId}/license-infos") +public class LicenseInfoController { + + private final LicenseInfoService licenseInfoService; + + @PostMapping + public ResponseEntity save( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId, + @RequestBody LicenseInfoRequest licenseInfoRequest) { + licenseInfoService.save(licenseInfoRequest, memberId, resumeId); + return ResponseEntity.ok().build(); + } + + @PutMapping("/{licenseInfoId}") + public ResponseEntity edit( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId, + @PathVariable("licenseInfoId") Long licenseInfoId, + @RequestBody LicenseInfoRequest licenseInfoRequest) { + licenseInfoService.edit(licenseInfoRequest, memberId, resumeId, licenseInfoId); + return ResponseEntity.ok().build(); + } + + @GetMapping + public List getLicenseInfos( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId) { + return licenseInfoService.showLicenseInfos(memberId, resumeId); + } +} diff --git a/src/main/java/com/il210so/server/controller/PersonalInfoController.java b/src/main/java/com/il210so/server/controller/PersonalInfoController.java new file mode 100644 index 0000000..13d9636 --- /dev/null +++ b/src/main/java/com/il210so/server/controller/PersonalInfoController.java @@ -0,0 +1,41 @@ +package com.il210so.server.controller; + +import com.il210so.server.dto.request.personalInfo.PersonalInfoRequest; +import com.il210so.server.dto.response.personalInfo.PersonalInfoResponse; +import com.il210so.server.service.personalInfo.PersonalInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/members/{memberId}/resumes/{resumeId}/personal-infos") +public class PersonalInfoController { + + private final PersonalInfoService personalInfoService; + + @PostMapping + public ResponseEntity save( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId, + @RequestBody PersonalInfoRequest personalInfoRequest) { + personalInfoService.savePersonalInfo(personalInfoRequest, memberId, resumeId); + return ResponseEntity.ok().build(); + } + + @PutMapping + public ResponseEntity edit( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId, + @RequestBody PersonalInfoRequest personalInfoRequest) { + personalInfoService.editPersonalInfo(personalInfoRequest, memberId, resumeId); + return ResponseEntity.ok().build(); + } + + @GetMapping + public PersonalInfoResponse getPersonalInfos( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId) { + return personalInfoService.showPersonalInfos(memberId, resumeId); + } +} diff --git a/src/main/java/com/il210so/server/controller/TrainingInfoController.java b/src/main/java/com/il210so/server/controller/TrainingInfoController.java new file mode 100644 index 0000000..d978dc3 --- /dev/null +++ b/src/main/java/com/il210so/server/controller/TrainingInfoController.java @@ -0,0 +1,44 @@ +package com.il210so.server.controller; + +import com.il210so.server.dto.request.trainingInfo.TrainingInfoRequest; +import com.il210so.server.dto.response.trainingInfo.TrainingInfoResponse; +import com.il210so.server.service.trainingInfo.TrainingInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/members/{memberId}/resumes/{resumeId}/training-infos") +public class TrainingInfoController { + + private final TrainingInfoService trainingInfoService; + + @PostMapping + public ResponseEntity save( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId, + @RequestBody TrainingInfoRequest trainingInfoRequest) { + trainingInfoService.save(trainingInfoRequest, memberId, resumeId); + return ResponseEntity.ok().build(); + } + + @PutMapping("/{trainingInfoId}") + public ResponseEntity edit( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId, + @PathVariable("trainingInfoId") Long trainingInfoId, + @RequestBody TrainingInfoRequest trainingInfoRequest) { + trainingInfoService.edit(trainingInfoRequest, memberId, resumeId, trainingInfoId); + return ResponseEntity.ok().build(); + } + + @GetMapping + public List getTrainingInfos( + @PathVariable("memberId") Long memberId, + @PathVariable("resumeId") Long resumeId) { + return trainingInfoService.showTrainingInfos(memberId, resumeId); + } +} \ No newline at end of file diff --git a/src/main/java/com/il210so/server/domain/LicenseInfo.java b/src/main/java/com/il210so/server/domain/LicenseInfo.java index 0a22b3e..52f9e33 100644 --- a/src/main/java/com/il210so/server/domain/LicenseInfo.java +++ b/src/main/java/com/il210so/server/domain/LicenseInfo.java @@ -1,5 +1,6 @@ package com.il210so.server.domain; +import com.il210so.server.dto.response.licenseInfo.LicenseInfoResponse; import jakarta.persistence.*; import lombok.Builder; import lombok.Getter; @@ -43,4 +44,15 @@ public LicenseInfo(Long id, Member member, Resume resume, String licenseName, Lo this.getDate = getDate; this.agency = agency; } + + public LicenseInfo update(String licenseName, LocalDate getDate, String agency) { + return new LicenseInfo().builder() + .id(this.id) + .member(this.member) + .resume(this.resume) + .licenseName(licenseName) + .getDate(getDate) + .agency(agency) + .build(); + } } diff --git a/src/main/java/com/il210so/server/domain/PersonalInfo.java b/src/main/java/com/il210so/server/domain/PersonalInfo.java index 7b54bcb..4a2ccdb 100644 --- a/src/main/java/com/il210so/server/domain/PersonalInfo.java +++ b/src/main/java/com/il210so/server/domain/PersonalInfo.java @@ -31,6 +31,9 @@ public class PersonalInfo { @Column(name = "address", nullable = false) private String address; + @Column(name = "email", nullable = false) + private String email; + @Column(name = "phone_number", nullable = false) private String phoneNumber; @@ -41,14 +44,29 @@ public PersonalInfo() { } @Builder - public PersonalInfo(Long id, Member member, Resume resume, String name, LocalDate bdate, String address, String phoneNumber, String emergencyPhone) { + public PersonalInfo(Long id, Member member, Resume resume, String name, LocalDate bdate, String address, String email, String phoneNumber, String emergencyPhone) { this.id = id; this.member = member; this.resume = resume; this.name = name; this.bdate = bdate; this.address = address; + this.email = email; this.phoneNumber = phoneNumber; this.emergencyPhone = emergencyPhone; } + + public PersonalInfo update(String name, LocalDate bdate, String address, String email, String phoneNumber, String emergencyPhone) { + return new PersonalInfo().builder() + .id(this.id) + .member(this.member) + .resume(this.resume) + .name(name) + .bdate(bdate) + .address(address) + .email(email) + .phoneNumber(phoneNumber) + .emergencyPhone(emergencyPhone) + .build(); + } } diff --git a/src/main/java/com/il210so/server/domain/TrainingInfo.java b/src/main/java/com/il210so/server/domain/TrainingInfo.java index c1f19d3..107f5cc 100644 --- a/src/main/java/com/il210so/server/domain/TrainingInfo.java +++ b/src/main/java/com/il210so/server/domain/TrainingInfo.java @@ -1,5 +1,6 @@ package com.il210so.server.domain; +import com.il210so.server.dto.request.trainingInfo.TrainingInfoRequest; import jakarta.persistence.*; import lombok.Builder; import lombok.Getter; @@ -47,4 +48,16 @@ public TrainingInfo(Long id, Member member, Resume resume, String trainingName, this.trainingEndDate = trainingEndDate; this.trainingAgency = trainingAgency; } + + public TrainingInfo update(String trainingName, YearMonth trainingStartDate, YearMonth trainingEndDate, String trainingAgency) { + return new TrainingInfo().builder() + .id(this.id) + .member(this.member) + .resume(this.resume) + .trainingName(trainingName) + .trainingStartDate(trainingStartDate) + .trainingEndDate(trainingEndDate) + .trainingAgency(trainingAgency) + .build(); + } } diff --git a/src/main/java/com/il210so/server/dto/request/licenseInfo/LicenseInfoRequest.java b/src/main/java/com/il210so/server/dto/request/licenseInfo/LicenseInfoRequest.java new file mode 100644 index 0000000..cff8389 --- /dev/null +++ b/src/main/java/com/il210so/server/dto/request/licenseInfo/LicenseInfoRequest.java @@ -0,0 +1,34 @@ +package com.il210so.server.dto.request.licenseInfo; + +import com.il210so.server.domain.LicenseInfo; +import com.il210so.server.domain.Member; +import com.il210so.server.domain.Resume; +import lombok.Getter; + +import java.time.LocalDate; + +@Getter +public class LicenseInfoRequest { + private String licenseName; + private LocalDate getDate; + private String agency; + + public LicenseInfoRequest() { + } + + public LicenseInfoRequest(String licenseName, LocalDate getDate, String agency) { + this.licenseName = licenseName; + this.getDate = getDate; + this.agency = agency; + } + + public LicenseInfo toLicenseInfo(Member member, Resume resume) { + return new LicenseInfo().builder() + .member(member) + .resume(resume) + .licenseName(this.licenseName) + .getDate(this.getDate) + .agency(this.agency) + .build(); + } +} diff --git a/src/main/java/com/il210so/server/dto/request/personalInfo/PersonalInfoRequest.java b/src/main/java/com/il210so/server/dto/request/personalInfo/PersonalInfoRequest.java new file mode 100644 index 0000000..174b7f4 --- /dev/null +++ b/src/main/java/com/il210so/server/dto/request/personalInfo/PersonalInfoRequest.java @@ -0,0 +1,44 @@ +package com.il210so.server.dto.request.personalInfo; + +import com.il210so.server.domain.Member; +import com.il210so.server.domain.PersonalInfo; +import com.il210so.server.domain.Resume; +import lombok.Getter; + +import java.time.LocalDate; + +@Getter +public class PersonalInfoRequest { + private String name; + private LocalDate bdate; + private String address; + private String email; + private String phoneNumber; + private String emergencyPhone; + + public PersonalInfoRequest() { + } + + public PersonalInfoRequest(String name, LocalDate bdate, String address, String email, String phoneNumber, String emergencyPhone) { + this.name = name; + this.bdate = bdate; + this.address = address; + this.email = email; + this.phoneNumber = phoneNumber; + this.emergencyPhone = emergencyPhone; + } + + public PersonalInfo toPersonalInfo(Member member, Resume resume) { + return PersonalInfo.builder() + .member(member) + .resume(resume) + .name(this.name) + .bdate(this.bdate) + .address(this.address) + .email(this.email) + .phoneNumber(this.phoneNumber) + .emergencyPhone(this.emergencyPhone) + .build(); + } + +} diff --git a/src/main/java/com/il210so/server/dto/request/trainingInfo/TrainingInfoRequest.java b/src/main/java/com/il210so/server/dto/request/trainingInfo/TrainingInfoRequest.java new file mode 100644 index 0000000..048a6ec --- /dev/null +++ b/src/main/java/com/il210so/server/dto/request/trainingInfo/TrainingInfoRequest.java @@ -0,0 +1,37 @@ +package com.il210so.server.dto.request.trainingInfo; + +import com.il210so.server.domain.Member; +import com.il210so.server.domain.Resume; +import com.il210so.server.domain.TrainingInfo; +import lombok.Getter; + +import java.time.YearMonth; + +@Getter +public class TrainingInfoRequest { + private String trainingName; + private YearMonth trainingStartDate; + private YearMonth trainingEndDate; + private String trainingAgency; + + public TrainingInfoRequest() { + } + + public TrainingInfoRequest(String trainingName, YearMonth trainingStartDate, YearMonth trainingEndDate, String trainingAgency) { + this.trainingName = trainingName; + this.trainingStartDate = trainingStartDate; + this.trainingEndDate = trainingEndDate; + this.trainingAgency = trainingAgency; + } + + public TrainingInfo toTrainingInfo(Member member, Resume resume) { + return new TrainingInfo().builder() + .member(member) + .resume(resume) + .trainingName(this.trainingName) + .trainingStartDate(this.trainingStartDate) + .trainingEndDate(this.trainingEndDate) + .trainingAgency(this.trainingAgency) + .build(); + } +} diff --git a/src/main/java/com/il210so/server/dto/response/licenseInfo/LicenseInfoResponse.java b/src/main/java/com/il210so/server/dto/response/licenseInfo/LicenseInfoResponse.java new file mode 100644 index 0000000..6694744 --- /dev/null +++ b/src/main/java/com/il210so/server/dto/response/licenseInfo/LicenseInfoResponse.java @@ -0,0 +1,42 @@ +package com.il210so.server.dto.response.licenseInfo; + +import com.il210so.server.domain.CareerInfo; +import com.il210so.server.domain.LicenseInfo; +import com.il210so.server.dto.response.careerInfo.CareerInfoResponse; +import lombok.Getter; + +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +public class LicenseInfoResponse { + private Long id; + private String licenseName; + private LocalDate getDate; + private String agency; + + public LicenseInfoResponse(Long id, String licenseName, LocalDate getDate, String agency) { + this.id = id; + this.licenseName = licenseName; + this.getDate = getDate; + this.agency = agency; + } + + public static LicenseInfoResponse from (LicenseInfo licenseInfo) { + return new LicenseInfoResponse( + licenseInfo.getId(), + licenseInfo.getLicenseName(), + licenseInfo.getGetDate(), + licenseInfo.getAgency() + ); + } + + public static List from(List licenseInfos) { + return licenseInfos.stream() + .map(LicenseInfoResponse::from) + .collect(Collectors.toList()); + } +} + + diff --git a/src/main/java/com/il210so/server/dto/response/personalInfo/PersonalInfoResponse.java b/src/main/java/com/il210so/server/dto/response/personalInfo/PersonalInfoResponse.java new file mode 100644 index 0000000..4e9df1c --- /dev/null +++ b/src/main/java/com/il210so/server/dto/response/personalInfo/PersonalInfoResponse.java @@ -0,0 +1,35 @@ +package com.il210so.server.dto.response.personalInfo; + +import com.il210so.server.domain.PersonalInfo; +import lombok.Getter; + +import java.time.LocalDate; + +@Getter +public class PersonalInfoResponse { + private String name; + private LocalDate bdate; + private String address; + private String email; + private String phoneNumber; + private String emergencyPhone; + + public PersonalInfoResponse(String name, LocalDate bdate, String address, String email, String phoneNumber, String emergencyPhone) { + this.name = name; + this.bdate = bdate; + this.address = address; + this.email = email; + this.phoneNumber = phoneNumber; + this.emergencyPhone = emergencyPhone; + } + + public static PersonalInfoResponse from(PersonalInfo personalInfo) { + return new PersonalInfoResponse( + personalInfo.getName(), + personalInfo.getBdate(), + personalInfo.getAddress(), + personalInfo.getEmail(), + personalInfo.getPhoneNumber(), + personalInfo.getEmergencyPhone()); + } +} diff --git a/src/main/java/com/il210so/server/dto/response/trainingInfo/TrainingInfoResponse.java b/src/main/java/com/il210so/server/dto/response/trainingInfo/TrainingInfoResponse.java new file mode 100644 index 0000000..5916d5a --- /dev/null +++ b/src/main/java/com/il210so/server/dto/response/trainingInfo/TrainingInfoResponse.java @@ -0,0 +1,40 @@ +package com.il210so.server.dto.response.trainingInfo; + +import com.il210so.server.domain.TrainingInfo; +import lombok.Getter; + +import java.time.YearMonth; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +public class TrainingInfoResponse { + private Long id; + private String trainingName; + private YearMonth trainingStartDate; + private YearMonth trainingEndDate; + private String trainingAgency; + + public TrainingInfoResponse(Long id, String trainingName, YearMonth trainingStartDate, YearMonth trainingEndDate, String trainingAgency) { + this.id = id; + this.trainingName = trainingName; + this.trainingStartDate = trainingStartDate; + this.trainingEndDate = trainingEndDate; + this.trainingAgency = trainingAgency; + } + + public static TrainingInfoResponse from(TrainingInfo trainingInfo) { + return new TrainingInfoResponse( + trainingInfo.getId(), + trainingInfo.getTrainingName(), + trainingInfo.getTrainingStartDate(), + trainingInfo.getTrainingEndDate(), + trainingInfo.getTrainingAgency()); + } + + public static List from (List trainingInfos) { + return trainingInfos.stream() + .map(TrainingInfoResponse::from) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/com/il210so/server/exception/ErrorCode.java b/src/main/java/com/il210so/server/exception/ErrorCode.java index 896396a..e097d08 100644 --- a/src/main/java/com/il210so/server/exception/ErrorCode.java +++ b/src/main/java/com/il210so/server/exception/ErrorCode.java @@ -8,8 +8,11 @@ public enum ErrorCode { MEMBER_NOT_FOUND(NOT_FOUND, "회원을 찾을 수 없습니다."), RESUME_NOT_FOUND(NOT_FOUND, "이력서를 찾을 수 없습니다."), + PERSONAL_INFO_NOT_FOUND(NOT_FOUND, "개인정보를 찾을 수 없습니다."), ACADEMIC_INFO_NOT_FOUND(NOT_FOUND, "학력정보를 찾을 수 없습니다."), - CAREER_INFO_NOT_FOUND(NOT_FOUND, "경력정보를 찾을 수 없습니다."); + CAREER_INFO_NOT_FOUND(NOT_FOUND, "경력정보를 찾을 수 없습니다."), + LICENSE_INFO_NOT_FOUND(NOT_FOUND, "자격정보를 찾을 수 없습니다."), + TRAINING_INFO_NOT_FOUND(NOT_FOUND, "훈련정보를 찾을 수 없습니다."); private final HttpStatus status; private final String message; diff --git a/src/main/java/com/il210so/server/repository/LicenseInfoRepository.java b/src/main/java/com/il210so/server/repository/LicenseInfoRepository.java new file mode 100644 index 0000000..ff7e1e3 --- /dev/null +++ b/src/main/java/com/il210so/server/repository/LicenseInfoRepository.java @@ -0,0 +1,11 @@ +package com.il210so.server.repository; + +import com.il210so.server.domain.LicenseInfo; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface LicenseInfoRepository extends JpaRepository { + List findByMemberIdAndResumeId(Long memberId, Long resumeId); + LicenseInfo findByIdAndMemberIdAndResumeId(Long id, Long memberId, Long resumeId); +} diff --git a/src/main/java/com/il210so/server/repository/PersonalInfoRepository.java b/src/main/java/com/il210so/server/repository/PersonalInfoRepository.java new file mode 100644 index 0000000..68ab936 --- /dev/null +++ b/src/main/java/com/il210so/server/repository/PersonalInfoRepository.java @@ -0,0 +1,11 @@ +package com.il210so.server.repository; + +import com.il210so.server.domain.PersonalInfo; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PersonalInfoRepository extends JpaRepository { + boolean existsByMemberIdAndResumeId(Long memberId, Long resumeId); + + PersonalInfo findByMemberIdAndResumeId(Long memberId, Long resumeId); + +} diff --git a/src/main/java/com/il210so/server/repository/TrainingInfoRepository.java b/src/main/java/com/il210so/server/repository/TrainingInfoRepository.java new file mode 100644 index 0000000..d993f45 --- /dev/null +++ b/src/main/java/com/il210so/server/repository/TrainingInfoRepository.java @@ -0,0 +1,12 @@ +package com.il210so.server.repository; + +import com.il210so.server.domain.TrainingInfo; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface TrainingInfoRepository extends JpaRepository { + List findByMemberIdAndResumeId(Long memberId, Long resumeId); + + TrainingInfo findByIdAndMemberIdAndResumeId(Long trainingInfoId, Long memberId, Long resumeId); +} diff --git a/src/main/java/com/il210so/server/service/licenseInfo/LicenseInfoService.java b/src/main/java/com/il210so/server/service/licenseInfo/LicenseInfoService.java new file mode 100644 index 0000000..7b1bb57 --- /dev/null +++ b/src/main/java/com/il210so/server/service/licenseInfo/LicenseInfoService.java @@ -0,0 +1,14 @@ +package com.il210so.server.service.licenseInfo; + +import com.il210so.server.dto.request.licenseInfo.LicenseInfoRequest; +import com.il210so.server.dto.response.licenseInfo.LicenseInfoResponse; + +import java.util.List; + +public interface LicenseInfoService { + void save(LicenseInfoRequest licenseInfoRequest, Long memberId, Long resumeId); + + void edit(LicenseInfoRequest licenseInfoRequest, Long memberId, Long resumeId, Long licenseInfoId); + + List showLicenseInfos(Long memberId, Long resumeId); +} diff --git a/src/main/java/com/il210so/server/service/licenseInfo/LicenseInfoServiceImpl.java b/src/main/java/com/il210so/server/service/licenseInfo/LicenseInfoServiceImpl.java new file mode 100644 index 0000000..d225995 --- /dev/null +++ b/src/main/java/com/il210so/server/service/licenseInfo/LicenseInfoServiceImpl.java @@ -0,0 +1,82 @@ +package com.il210so.server.service.licenseInfo; + +import com.il210so.server.domain.LicenseInfo; +import com.il210so.server.domain.Member; +import com.il210so.server.domain.Resume; +import com.il210so.server.dto.request.licenseInfo.LicenseInfoRequest; +import com.il210so.server.dto.response.licenseInfo.LicenseInfoResponse; +import com.il210so.server.exception.ErrorCode; +import com.il210so.server.exception.Il210soException; +import com.il210so.server.repository.LicenseInfoRepository; +import com.il210so.server.repository.MemberRepository; +import com.il210so.server.repository.ResumeRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional +public class LicenseInfoServiceImpl implements LicenseInfoService { + + private final MemberRepository memberRepository; + private final ResumeRepository resumeRepository; + private final LicenseInfoRepository licenseInfoRepository; + + @Override + public void save(LicenseInfoRequest licenseInfoRequest, Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + LicenseInfo licenseInfo = licenseInfoRequest.toLicenseInfo(findMemberById(memberId), findResumeById(resumeId)); + licenseInfoRepository.save(licenseInfo); + } + + @Override + public void edit(LicenseInfoRequest licenseInfoRequest, Long memberId, Long resumeId, Long licenseInfoId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + LicenseInfo licenseInfo = findByLicenseInfoId(licenseInfoId); + LicenseInfo updatedLicenseInfo = licenseInfo.update( + licenseInfoRequest.getLicenseName(), + licenseInfoRequest.getGetDate(), + licenseInfoRequest.getAgency()); + licenseInfoRepository.save(updatedLicenseInfo); + } + + @Override + public List showLicenseInfos(Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + List licenseInfos = licenseInfoRepository.findByMemberIdAndResumeId(memberId, resumeId); + return LicenseInfoResponse.from(licenseInfos); + } + + private void validateResumeExists(Long resumeId) { + if (!resumeRepository.existsById(resumeId)) { + throw new Il210soException(ErrorCode.RESUME_NOT_FOUND); + } + } + + private void validateMemberExists(Long memberId) { + if (!memberRepository.existsById(memberId)) { + throw new Il210soException(ErrorCode.MEMBER_NOT_FOUND); + } + } + + private Member findMemberById(Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new Il210soException(ErrorCode.MEMBER_NOT_FOUND)); + } + + private Resume findResumeById(Long resumeId) { + return resumeRepository.findById(resumeId) + .orElseThrow(() -> new Il210soException(ErrorCode.RESUME_NOT_FOUND)); + } + + private LicenseInfo findByLicenseInfoId(Long licenseInfoId) { + return licenseInfoRepository.findById(licenseInfoId) + .orElseThrow(() -> new Il210soException(ErrorCode.LICENSE_INFO_NOT_FOUND)); + } +} diff --git a/src/main/java/com/il210so/server/service/personalInfo/PersonalInfoService.java b/src/main/java/com/il210so/server/service/personalInfo/PersonalInfoService.java new file mode 100644 index 0000000..7794ea0 --- /dev/null +++ b/src/main/java/com/il210so/server/service/personalInfo/PersonalInfoService.java @@ -0,0 +1,13 @@ +package com.il210so.server.service.personalInfo; + +import com.il210so.server.dto.request.personalInfo.PersonalInfoRequest; +import com.il210so.server.dto.response.personalInfo.PersonalInfoResponse; + +public interface PersonalInfoService { + + void savePersonalInfo(PersonalInfoRequest personalInfoRequest, Long memberId, Long resumeId); + + void editPersonalInfo(PersonalInfoRequest personalInfoRequest, Long memberId, Long resumeId); + + PersonalInfoResponse showPersonalInfos(Long memberId, Long resumeId); +} diff --git a/src/main/java/com/il210so/server/service/personalInfo/PersonalInfoServiceImpl.java b/src/main/java/com/il210so/server/service/personalInfo/PersonalInfoServiceImpl.java new file mode 100644 index 0000000..3ef1170 --- /dev/null +++ b/src/main/java/com/il210so/server/service/personalInfo/PersonalInfoServiceImpl.java @@ -0,0 +1,87 @@ +package com.il210so.server.service.personalInfo; + +import com.il210so.server.domain.Member; +import com.il210so.server.domain.PersonalInfo; +import com.il210so.server.domain.Resume; +import com.il210so.server.dto.request.personalInfo.PersonalInfoRequest; +import com.il210so.server.dto.response.personalInfo.PersonalInfoResponse; +import com.il210so.server.exception.ErrorCode; +import com.il210so.server.exception.Il210soException; +import com.il210so.server.repository.MemberRepository; +import com.il210so.server.repository.PersonalInfoRepository; +import com.il210so.server.repository.ResumeRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +@RequiredArgsConstructor +public class PersonalInfoServiceImpl implements PersonalInfoService{ + + private final MemberRepository memberRepository; + private final ResumeRepository resumeRepository; + private final PersonalInfoRepository personalInfoRepository; + + @Override + public void savePersonalInfo(PersonalInfoRequest personalInfoRequest, Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + PersonalInfo personalInfo = personalInfoRequest.toPersonalInfo(findMemberById(memberId), findResumeById(resumeId)); + personalInfoRepository.save(personalInfo); + } + + @Override + public void editPersonalInfo(PersonalInfoRequest personalInfoRequest, Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + validatePersonalInfoExists(memberId, resumeId); + PersonalInfo personalInfo = personalInfoRepository.findByMemberIdAndResumeId(memberId, resumeId); + PersonalInfo updatedPersonalInfo = personalInfo.update( + personalInfoRequest.getName(), + personalInfoRequest.getBdate(), + personalInfoRequest.getAddress(), + personalInfoRequest.getEmail(), + personalInfoRequest.getPhoneNumber(), + personalInfoRequest.getEmergencyPhone()); + personalInfoRepository.save(updatedPersonalInfo); + } + + @Override + @Transactional(readOnly = true) + public PersonalInfoResponse showPersonalInfos(Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + validatePersonalInfoExists(memberId, resumeId); + PersonalInfo personalInfo = personalInfoRepository.findByMemberIdAndResumeId(memberId, resumeId); + return PersonalInfoResponse.from(personalInfo); + } + + private void validateResumeExists(Long resumeId) { + if(!resumeRepository.existsById(resumeId)) { + throw new Il210soException(ErrorCode.RESUME_NOT_FOUND); + } + } + + private void validateMemberExists(Long memberId) { + if(!memberRepository.existsById(memberId)) { + throw new Il210soException(ErrorCode.MEMBER_NOT_FOUND); + } + } + + private Member findMemberById(Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new Il210soException(ErrorCode.MEMBER_NOT_FOUND)); + } + + private Resume findResumeById(Long resumeId) { + return resumeRepository.findById(resumeId) + .orElseThrow(() -> new Il210soException(ErrorCode.RESUME_NOT_FOUND)); + } + + private void validatePersonalInfoExists(Long memberId, Long resumeId) { + if (!(personalInfoRepository.existsByMemberIdAndResumeId(memberId, resumeId))) { + throw new Il210soException(ErrorCode.PERSONAL_INFO_NOT_FOUND); + } + } +} diff --git a/src/main/java/com/il210so/server/service/trainingInfo/TrainingInfoService.java b/src/main/java/com/il210so/server/service/trainingInfo/TrainingInfoService.java new file mode 100644 index 0000000..0bdbb24 --- /dev/null +++ b/src/main/java/com/il210so/server/service/trainingInfo/TrainingInfoService.java @@ -0,0 +1,14 @@ +package com.il210so.server.service.trainingInfo; + +import com.il210so.server.dto.request.trainingInfo.TrainingInfoRequest; +import com.il210so.server.dto.response.trainingInfo.TrainingInfoResponse; + +import java.util.List; + +public interface TrainingInfoService { + void save(TrainingInfoRequest trainingInfoRequest, Long memberId, Long resumeId); + + void edit(TrainingInfoRequest trainingInfoRequest, Long memberId, Long resumeId, Long trainingInfoId); + + List showTrainingInfos(Long memberId, Long resumeId); +} diff --git a/src/main/java/com/il210so/server/service/trainingInfo/TrainingInfoServiceImpl.java b/src/main/java/com/il210so/server/service/trainingInfo/TrainingInfoServiceImpl.java new file mode 100644 index 0000000..dd0c8a4 --- /dev/null +++ b/src/main/java/com/il210so/server/service/trainingInfo/TrainingInfoServiceImpl.java @@ -0,0 +1,86 @@ +package com.il210so.server.service.trainingInfo; + +import com.il210so.server.domain.LicenseInfo; +import com.il210so.server.domain.Member; +import com.il210so.server.domain.Resume; +import com.il210so.server.domain.TrainingInfo; +import com.il210so.server.dto.request.trainingInfo.TrainingInfoRequest; +import com.il210so.server.dto.response.licenseInfo.LicenseInfoResponse; +import com.il210so.server.dto.response.trainingInfo.TrainingInfoResponse; +import com.il210so.server.exception.ErrorCode; +import com.il210so.server.exception.Il210soException; +import com.il210so.server.repository.LicenseInfoRepository; +import com.il210so.server.repository.MemberRepository; +import com.il210so.server.repository.ResumeRepository; +import com.il210so.server.repository.TrainingInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional +public class TrainingInfoServiceImpl implements TrainingInfoService { + + private final MemberRepository memberRepository; + private final ResumeRepository resumeRepository; + private final TrainingInfoRepository trainingInfoRepository; + + @Override + public void save(TrainingInfoRequest trainingInfoRequest, Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + TrainingInfo trainingInfo = trainingInfoRequest.toTrainingInfo(findMemberById(memberId), findResumeById(resumeId)); + trainingInfoRepository.save(trainingInfo); + } + + @Override + public void edit(TrainingInfoRequest trainingInfoRequest, Long memberId, Long resumeId, Long trainingInfoId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + TrainingInfo trainingInfo = findByTrainingInfoId(trainingInfoId); + TrainingInfo updatedTrainingInfo = trainingInfo.update( + trainingInfoRequest.getTrainingName(), + trainingInfoRequest.getTrainingStartDate(), + trainingInfoRequest.getTrainingEndDate(), + trainingInfoRequest.getTrainingAgency()); + trainingInfoRepository.save(updatedTrainingInfo); + } + + @Override + public List showTrainingInfos(Long memberId, Long resumeId) { + validateMemberExists(memberId); + validateResumeExists(resumeId); + List trainingInfos = trainingInfoRepository.findByMemberIdAndResumeId(memberId, resumeId); + return TrainingInfoResponse.from(trainingInfos); + } + + private void validateResumeExists(Long resumeId) { + if (!resumeRepository.existsById(resumeId)) { + throw new Il210soException(ErrorCode.RESUME_NOT_FOUND); + } + } + + private void validateMemberExists(Long memberId) { + if (!memberRepository.existsById(memberId)) { + throw new Il210soException(ErrorCode.MEMBER_NOT_FOUND); + } + } + + private Member findMemberById(Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new Il210soException(ErrorCode.MEMBER_NOT_FOUND)); + } + + private Resume findResumeById(Long resumeId) { + return resumeRepository.findById(resumeId) + .orElseThrow(() -> new Il210soException(ErrorCode.RESUME_NOT_FOUND)); + } + + private TrainingInfo findByTrainingInfoId(Long trainingInfoId) { + return trainingInfoRepository.findById(trainingInfoId) + .orElseThrow(() -> new Il210soException(ErrorCode.TRAINING_INFO_NOT_FOUND)); + } +}