Skip to content

Commit

Permalink
Merge pull request #192 from ITZipProject/feature/resume
Browse files Browse the repository at this point in the history
🛠️ 리팩토링 : 이력서 구조 변경 및 update로직 수정
  • Loading branch information
hanseu9839 authored Dec 12, 2024
2 parents 08b051f + f4474fe commit 07b1bb9
Show file tree
Hide file tree
Showing 71 changed files with 1,024 additions and 820 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import darkoverload.itzip.feature.image.domain.Image;
import darkoverload.itzip.feature.image.util.FileUtil;
import darkoverload.itzip.feature.resume.util.holder.UUIDHolderImpl;
import darkoverload.itzip.infra.bucket.util.holder.UUIDHolderImpl;
import darkoverload.itzip.global.config.response.code.CommonExceptionCode;
import darkoverload.itzip.global.config.response.exception.RestApiException;
import darkoverload.itzip.infra.bucket.domain.AWSFile;
Expand All @@ -26,7 +26,6 @@ public class CloudStorageService implements StorageService {
private final ImageService imageService;
private final AWSService awsService;


/**
* 임시 저장
* @param multipartFile 파일
Expand Down Expand Up @@ -68,7 +67,6 @@ public Image temporaryImageUpload(MultipartFile multipartFile, String featureDir
throw new RestApiException(CommonExceptionCode.IMAGE_ERROR);
}


return result;
}

Expand Down Expand Up @@ -150,7 +148,6 @@ public Image imageUpload(MultipartFile multipartFile, String featureDir) {
*/
@Transactional
public void imageDelete(String imagePath, String featureDir) {

Image findImage = imageService.findByImagePath(imagePath);
imageService.delete(findImage.getImageSeq());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@

import com.fasterxml.jackson.annotation.JsonInclude;
import darkoverload.itzip.feature.resume.code.PublicOnOff;
import darkoverload.itzip.feature.resume.domain.resume.ProfileInfo;
import darkoverload.itzip.feature.resume.domain.resume.Resume;
import darkoverload.itzip.feature.resume.entity.ResumeEntity;
import lombok.Builder;

@JsonInclude(JsonInclude.Include.NON_NULL)
public record SearchResumeResponse(Long resumeId, String subject, PublicOnOff publicOnOff, String imageUrl, Long userId, String workLongTerm) {
public record SearchResumeResponse(Long resumeId, ProfileInfo profileInfo, String imageUrl, Long userId, String workLongTerm) {


@Builder
Expand All @@ -18,8 +19,7 @@ public record SearchResumeResponse(Long resumeId, String subject, PublicOnOff pu
public static SearchResumeResponse from(Resume resume) {
return SearchResumeResponse.builder()
.resumeId(resume.getResumeId())
.subject(resume.getSubject())
.publicOnOff(resume.getPublicOnOff())
.profileInfo(resume.getProfileInfo())
.imageUrl(resume.getImageUrl())
.workLongTerm(resume.getWorkLongTerm())
.build();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package darkoverload.itzip.feature.resume.domain.resume;

import darkoverload.itzip.feature.resume.code.PublicOnOff;
import darkoverload.itzip.feature.resume.entity.ProfileInfoEntity;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;

@Getter
@ToString
@EqualsAndHashCode
public class ProfileInfo {
// 이메일
private final String email;

// 핸드폰
private final String phone;

// 제목
private final String subject;

// 소개글
private final String introduction;

// 공개여부
private final PublicOnOff publicOnOff;


@Builder
public ProfileInfo(String email, String phone, String subject, String introduction, PublicOnOff publicOnOff) {
this.email = email;
this.phone = phone;
this.subject = subject;
this.introduction = introduction;
this.publicOnOff = publicOnOff;
}

public ProfileInfoEntity toEntity() {
return ProfileInfoEntity.builder()
.email(this.email)
.introduction(this.introduction)
.phone(this.phone)
.subject(this.subject)
.publicOnOff(this.publicOnOff)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,17 @@
import lombok.*;

import java.util.List;
import java.util.stream.Collectors;

@Getter
@Setter
@ToString
@EqualsAndHashCode
public class Resume {
// 이메일
private String email;

// 핸드폰
private String phone;

// 제목
private String subject;

// 소개글
private String introduction;
public static final String FEATURE_DIR = "resume";

// 공개여부
private PublicOnOff publicOnOff;
// 이메일
private ProfileInfo profileInfo;

// 링크
private List<String> links;
Expand All @@ -50,13 +41,8 @@ public class Resume {
public Resume() {
}

@Builder
public Resume(String email, String phone, String subject, String introduction, PublicOnOff publicOnOff, List<String> links, String imageUrl, Long userId, Long resumeId, String workLongTerm, List<String> fileUrls) {
this.email = email;
this.phone = phone;
this.subject = subject;
this.introduction = introduction;
this.publicOnOff = publicOnOff;
this.profileInfo = new ProfileInfo(email, phone, subject, introduction, publicOnOff);
this.links = links;
this.imageUrl = imageUrl;
this.userId = userId;
Expand All @@ -65,76 +51,96 @@ public Resume(String email, String phone, String subject, String introduction, P
this.fileUrls = fileUrls;
}

public static Resume create(ResumeDto resume, Long userId){
@Builder
public Resume(ProfileInfo profileInfo, List<String> links, String imageUrl, Long userId, Long resumeId, String workLongTerm, List<String> fileUrls) {
this.profileInfo = profileInfo;
this.links = links;
this.imageUrl = imageUrl;
this.userId = userId;
this.resumeId = resumeId;
this.workLongTerm = workLongTerm;
this.fileUrls = fileUrls;
}

return Resume.builder()
public static Resume create(ResumeDto resume, Long userId) {
ProfileInfo profileInfo = ProfileInfo.builder()
.email(resume.getEmail())
.phone(resume.getPhone())
.subject(resume.getSubject())
.introduction(resume.getIntroduction())
.publicOnOff(resume.getPublicOnOff())
.build();

return Resume.builder()
.profileInfo(profileInfo)
.links(resume.getLinks())
.imageUrl(resume.getImageUrl())
.userId(userId)
.fileUrls(resume.getFileUrls())
.build();
}

public static Resume update(ResumeDto resume, Long resumeId, Long userId) {
return Resume.builder()
public static Resume update(ResumeDto resume, long resumeId, long userId) {
ProfileInfo profileInfo = ProfileInfo.builder()
.email(resume.getEmail())
.phone(resume.getPhone())
.subject(resume.getSubject())
.introduction(resume.getIntroduction())
.publicOnOff(resume.getPublicOnOff())
.build();

return Resume.builder()
.profileInfo(profileInfo)
.links(resume.getLinks())
.imageUrl(resume.getImageUrl())
.resumeId(resumeId)
.userId(userId)
.fileUrls(resume.getFileUrls())
.build();
}

public static Resume searchResume(Resume resume, String workLongTerm) {

return Resume.builder()
.resumeId(resume.getResumeId())
.email(resume.getEmail())
.phone(resume.getPhone())
.subject(resume.getSubject())
.introduction(resume.getIntroduction())
.profileInfo(resume.getProfileInfo())
.links(resume.getLinks())
.imageUrl(resume.getImageUrl())
.userId(resume.getUserId())
.workLongTerm(workLongTerm)
.fileUrls(resume.getFileUrls())
.build();
}

public ResumeEntity toEntity() {
return ResumeEntity.builder()
.email(this.email)
.phone(this.phone)
.subject(this.subject)
.introduction(this.introduction)
.publicOnOff(this.publicOnOff)
.userId(this.userId)
.imageUrl(this.imageUrl)
.profileInfo(this.profileInfo.toEntity())
.links(this.links)
.userId(this.userId)
.id(this.resumeId)
.fileUrls(this.fileUrls)
.build();
}

public Resume emptyCheck() {
if(resumeId == null) {
public Resume checkIdNull() {
if (resumeId == null) {
throw new RestApiException(CommonExceptionCode.NOT_FOUND_RESUME);
}
return this;
}

public void userIdEqualsCheck(Long databaseUserId) {
if(!this.userId.equals(databaseUserId)) {
public static void checkUserIdEquals(long userId, long databaseUserId) {
if (userId != databaseUserId) {
throw new RestApiException(CommonExceptionCode.NOT_MATCH_RESUME_USERID);
}
}

public List<String> notExistFileUrls(List<String> dataFileUrls) {
return this.fileUrls.stream()
.filter(url -> !dataFileUrls.contains(url))
.collect(Collectors.toList());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package darkoverload.itzip.feature.resume.entity;

import darkoverload.itzip.feature.resume.code.PublicOnOff;
import darkoverload.itzip.feature.resume.domain.resume.ProfileInfo;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import lombok.*;

@Embeddable
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EqualsAndHashCode
@ToString
public class ProfileInfoEntity {
private String email;

@Enumerated(EnumType.STRING)
@Column(name="public_on_off", nullable = false)
private PublicOnOff publicOnOff;

@Column(length=50)
private String subject;

@Column(length=50)
private String phone;

@Column(length=5000)
private String introduction;

@Builder
public ProfileInfoEntity(String email, PublicOnOff publicOnOff, String subject, String phone, String introduction) {
this.email = email;
this.publicOnOff = publicOnOff;
this.subject = subject;
this.phone = phone;
this.introduction = introduction;
}



public ProfileInfo convertToDomain() {
return ProfileInfo.builder()
.email(this.email)
.introduction(this.introduction)
.publicOnOff(this.publicOnOff)
.subject(this.subject)
.phone(this.phone)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,54 +25,36 @@ public class ResumeEntity extends AuditingFields {
@Column(name="user_id", nullable = false, updatable = false)
private Long userId;

private String email;
@Embedded
private ProfileInfoEntity profileInfo;

private String imageUrl;

@Column(length=50)
private String subject;

@Column(length=50)
private String phone;

@Column(length=5000)
private String introduction;

@Convert(converter = StringListConverter.class)
private List<String> links;

@Enumerated(EnumType.STRING)
@Column(name="public_on_off", nullable = false)
private PublicOnOff publicOnOff;


@Convert(converter = StringListConverter.class)
private List<String> fileUrls;

@Builder
public ResumeEntity(Long id, Long userId, String email, String imageUrl, String subject, String phone, String introduction, List<String> links, PublicOnOff publicOnOff, List<String> fileUrls) {
public ResumeEntity(Long id, Long userId, String imageUrl, ProfileInfoEntity profileInfo,List<String> links, List<String> fileUrls) {
this.id = id;
this.userId = userId;
this.email = email;
this.imageUrl = imageUrl;
this.subject = subject;
this.phone = phone;
this.introduction = introduction;
this.profileInfo = profileInfo;
this.links = links;
this.publicOnOff = publicOnOff;
this.fileUrls = fileUrls;
}

public Resume convertToDomain(){
return Resume.builder()
.profileInfo(this.profileInfo.convertToDomain())
.resumeId(this.id)
.userId(this.userId)
.email(this.email)
.imageUrl(this.imageUrl)
.subject(this.subject)
.phone(this.phone)
.introduction(this.introduction)
.links(this.links)
.publicOnOff(this.publicOnOff)
.fileUrls(this.fileUrls)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
import darkoverload.itzip.feature.resume.entity.AchievementEntity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface AchievementJpaRepository extends JpaRepository<AchievementEntity, Long> {
public interface AchievementCommandJpaRepository extends JpaRepository<AchievementEntity, Long> {

}
Loading

0 comments on commit 07b1bb9

Please sign in to comment.