diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml new file mode 100644 index 0000000..966d5f5 --- /dev/null +++ b/.idea/jpa-buddy.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..59780fe --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/jumpit/.gitignore b/jumpit/.gitignore index ed2e7b0..1779025 100644 --- a/jumpit/.gitignore +++ b/jumpit/.gitignore @@ -6,6 +6,8 @@ build/ !**/src/test/**/build/ *.yaml +*.yaml + ### STS ### .apt_generated .classpath diff --git a/jumpit/src/main/java/org/sopt/jumpit/global/common/dto/message/ErrorMessage.java b/jumpit/src/main/java/org/sopt/jumpit/global/common/dto/message/ErrorMessage.java index 4a4bf54..10173aa 100644 --- a/jumpit/src/main/java/org/sopt/jumpit/global/common/dto/message/ErrorMessage.java +++ b/jumpit/src/main/java/org/sopt/jumpit/global/common/dto/message/ErrorMessage.java @@ -10,7 +10,8 @@ public enum ErrorMessage { SEARCH_FAILED(HttpStatus.BAD_REQUEST.value(), "[ERROR] 채용 공고 검색에 실패하였습니다."), INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR.value(), "[ERROR] 서버 내부 오류가 발생하였습니다."), COMPANY_NOT_FOUND_BY_ID_EXCEPTION(HttpStatus.NOT_FOUND.value(), "[ERROR] ID에 해당하는 기업이 없습니다."), - SKILL_NOT_FOUND_BY_ID_EXCEPTION(HttpStatus.NOT_FOUND.value(), "[ERROR] ID에 해당하는 기술스택이 없습니다.") + SKILL_NOT_FOUND_BY_ID_EXCEPTION(HttpStatus.NOT_FOUND.value(), "[ERROR] ID에 해당하는 기술스택이 없습니다."), + USER_NOT_FOUND_BY_ID_EXCEPTION(HttpStatus.NOT_FOUND.value(), "[ERROR] ID에 해당하는 유저를 찾을 수 없습니다.") ; private final int status; diff --git a/jumpit/src/main/java/org/sopt/jumpit/resume/controller/ResumeController.java b/jumpit/src/main/java/org/sopt/jumpit/resume/controller/ResumeController.java new file mode 100644 index 0000000..5504d16 --- /dev/null +++ b/jumpit/src/main/java/org/sopt/jumpit/resume/controller/ResumeController.java @@ -0,0 +1,31 @@ +package org.sopt.jumpit.resume.controller; + + +import lombok.RequiredArgsConstructor; +import org.sopt.jumpit.global.common.dto.SuccessResponse; +import org.sopt.jumpit.resume.domain.Resume; +import org.sopt.jumpit.resume.dto.ResumeCreateRequest; +import org.sopt.jumpit.resume.service.ResumeService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/v1/resumes") +@RequiredArgsConstructor +public class ResumeController { + private final ResumeService resumeService; + + @PostMapping + public ResponseEntity createResume ( + @RequestBody ResumeCreateRequest resumeCreateRequest + ) { + resumeService.createResume(resumeCreateRequest); + return ResponseEntity.ok() + .build(); + } + + @GetMapping("/{userId}") + public ResponseEntity findResumeById(@PathVariable Long userId) { + return ResponseEntity.ok(resumeService.findResumeById(userId)); + } +} diff --git a/jumpit/src/main/java/org/sopt/jumpit/resume/domain/Resume.java b/jumpit/src/main/java/org/sopt/jumpit/resume/domain/Resume.java index 6fd34db..64637cf 100644 --- a/jumpit/src/main/java/org/sopt/jumpit/resume/domain/Resume.java +++ b/jumpit/src/main/java/org/sopt/jumpit/resume/domain/Resume.java @@ -1,6 +1,8 @@ package org.sopt.jumpit.resume.domain; import jakarta.persistence.*; +import lombok.Builder; +import org.sopt.jumpit.resume.dto.ResumeCreateRequest; import org.sopt.jumpit.user.domain.User; import java.time.LocalDateTime; @@ -28,4 +30,17 @@ public class Resume { @Column(name = "createdAt") private LocalDateTime createdAt; + @Builder + private Resume(User owner, String title) { + this.owner = owner; + this.title = title; + this.isPrivate = false; + } + + public static Resume create(User owner, String title) { + return Resume.builder() + .title(title) + .owner(owner) + .build(); + } } diff --git a/jumpit/src/main/java/org/sopt/jumpit/resume/dto/Resume.java b/jumpit/src/main/java/org/sopt/jumpit/resume/dto/Resume.java new file mode 100644 index 0000000..217e799 --- /dev/null +++ b/jumpit/src/main/java/org/sopt/jumpit/resume/dto/Resume.java @@ -0,0 +1,12 @@ +package org.sopt.jumpit.resume.dto; + +import java.time.LocalDateTime; + +public record Resume( + Long id, + String title, + Boolean isPrivate, + LocalDateTime createdAt, + LocalDateTime modifiedAt +) { +} diff --git a/jumpit/src/main/java/org/sopt/jumpit/resume/dto/ResumeCreateRequest.java b/jumpit/src/main/java/org/sopt/jumpit/resume/dto/ResumeCreateRequest.java new file mode 100644 index 0000000..a6d3cc7 --- /dev/null +++ b/jumpit/src/main/java/org/sopt/jumpit/resume/dto/ResumeCreateRequest.java @@ -0,0 +1,7 @@ +package org.sopt.jumpit.resume.dto; + +public record ResumeCreateRequest( + String title, + Long userId +) { +} diff --git a/jumpit/src/main/java/org/sopt/jumpit/resume/dto/ResumeSearchResponse.java b/jumpit/src/main/java/org/sopt/jumpit/resume/dto/ResumeSearchResponse.java new file mode 100644 index 0000000..6a0162a --- /dev/null +++ b/jumpit/src/main/java/org/sopt/jumpit/resume/dto/ResumeSearchResponse.java @@ -0,0 +1,9 @@ +package org.sopt.jumpit.resume.dto; + +public record ResumeSearchResponse( + Long userId, + Resume resume +) { + + +} diff --git a/jumpit/src/main/java/org/sopt/jumpit/resume/service/ResumeService.java b/jumpit/src/main/java/org/sopt/jumpit/resume/service/ResumeService.java new file mode 100644 index 0000000..2e57d09 --- /dev/null +++ b/jumpit/src/main/java/org/sopt/jumpit/resume/service/ResumeService.java @@ -0,0 +1,37 @@ +package org.sopt.jumpit.resume.service; + +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.sopt.jumpit.global.common.dto.message.ErrorMessage; +import org.sopt.jumpit.global.exception.BusinessException; +import org.sopt.jumpit.resume.domain.Resume; +import org.sopt.jumpit.resume.dto.ResumeCreateRequest; +import org.sopt.jumpit.resume.dto.ResumeSearchResponse; +import org.sopt.jumpit.resume.repository.ResumeRepository; +import org.sopt.jumpit.user.domain.User; +import org.sopt.jumpit.user.repository.UserRepository; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class ResumeService { + private final ResumeRepository resumeRepository; + private final UserRepository userRepository; + + @Transactional + public void createResume( + ResumeCreateRequest resumeCreateRequest + ) { + User findUser = userRepository.findById(resumeCreateRequest.userId()).orElseThrow( + () -> new BusinessException(ErrorMessage.USER_NOT_FOUND_BY_ID_EXCEPTION) + ); + Resume resume = Resume.create(findUser, "내 이력서"); + resumeRepository.save(resume); + } + + public Resume findResumeById(Long resumeId) { + return resumeRepository.findById(resumeId).orElseThrow( + () -> new BusinessException(ErrorMessage.USER_NOT_FOUND_BY_ID_EXCEPTION) + ); + } +}