From d3bf23fb577bee6b9e65bb5e122ccc507c533898 Mon Sep 17 00:00:00 2001 From: Kim Doo Hyeon Date: Wed, 19 Feb 2025 18:53:33 +0900 Subject: [PATCH] =?UTF-8?q?[ALL]=20=EC=9D=B4=EA=B2=83=EC=A0=80=EA=B2=83=20?= =?UTF-8?q?#43?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - job seek 테이블 삭제 - 어르신 수정 api 에러 수정 --- .../young/blaybus/domain/address/Address.java | 48 ++++++++++-------- .../blaybus/domain/job_seek/JobSeek.java | 50 ------------------- .../repository/JobSeekRepository.java | 10 ---- .../young/blaybus/domain/senior/Senior.java | 17 ++++++- .../repository/DetailSeniorRepository.java | 7 +-- .../senior/service/CreateSeniorService.java | 32 +++++------- .../senior/service/RecommendService.java | 27 +++++----- 7 files changed, 72 insertions(+), 119 deletions(-) delete mode 100644 src/main/java/young/blaybus/domain/job_seek/JobSeek.java delete mode 100644 src/main/java/young/blaybus/domain/job_seek/repository/JobSeekRepository.java diff --git a/src/main/java/young/blaybus/domain/address/Address.java b/src/main/java/young/blaybus/domain/address/Address.java index cd77a6f..68016c3 100644 --- a/src/main/java/young/blaybus/domain/address/Address.java +++ b/src/main/java/young/blaybus/domain/address/Address.java @@ -12,24 +12,32 @@ @NoArgsConstructor public class Address { - @Comment("시/도") - private String city; - - @Comment("구/군") - private String district; - - @Comment("동") - private String dong; - - @Column(name = "address_detail") - @Comment("상세 주소") - private String detail; - - @Override - public String toString() { - String str = city + " " + district + " " + dong; - if (StringUtils.hasText(detail)) str += " " + detail; - - return str; - } + @Comment("시/도") + private String city; + + @Comment("구/군") + private String district; + + @Comment("동") + private String dong; + + @Column(name = "address_detail") + @Comment("상세 주소") + private String detail; + + @Override + public String toString() { + String str = city + " " + district + " " + dong; + if (StringUtils.hasText(detail)) str += " " + detail; + + return str; + } + + public static int calculateDistanceScore(Address address1, Address address2) { + int score = 0; + if (address1.city.equals(address2.city)) score += 10; + if (address1.district.equals(address2.district)) score += 10; + if (address1.dong.equals(address2.dong)) score += 10; + return score; + } } diff --git a/src/main/java/young/blaybus/domain/job_seek/JobSeek.java b/src/main/java/young/blaybus/domain/job_seek/JobSeek.java deleted file mode 100644 index 3970129..0000000 --- a/src/main/java/young/blaybus/domain/job_seek/JobSeek.java +++ /dev/null @@ -1,50 +0,0 @@ -package young.blaybus.domain.job_seek; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityListeners; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; -import java.time.LocalDateTime; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Comment; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import young.blaybus.domain.senior.Senior; - -@Entity -@Builder -@Getter -@AllArgsConstructor -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@EntityListeners(AuditingEntityListener.class) -public class JobSeek { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Comment("급여") - private Integer salary; - - @CreatedDate - @Column(updatable = false) - private LocalDateTime createdTime; - - @LastModifiedDate - private LocalDateTime updatedTime; - - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "senior_id") - private Senior senior; - -} diff --git a/src/main/java/young/blaybus/domain/job_seek/repository/JobSeekRepository.java b/src/main/java/young/blaybus/domain/job_seek/repository/JobSeekRepository.java deleted file mode 100644 index 1bf45d4..0000000 --- a/src/main/java/young/blaybus/domain/job_seek/repository/JobSeekRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package young.blaybus.domain.job_seek.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import young.blaybus.domain.job_seek.JobSeek; -import young.blaybus.domain.senior.Senior; - -public interface JobSeekRepository extends JpaRepository { - - JobSeek findBySenior(Senior senior); -} diff --git a/src/main/java/young/blaybus/domain/senior/Senior.java b/src/main/java/young/blaybus/domain/senior/Senior.java index 6d9a5f5..0168c3a 100644 --- a/src/main/java/young/blaybus/domain/senior/Senior.java +++ b/src/main/java/young/blaybus/domain/senior/Senior.java @@ -34,7 +34,7 @@ import young.blaybus.util.enums.CareStyle; @Entity -@Builder(toBuilder = true) +@Builder @Getter @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -65,6 +65,9 @@ public class Senior { @Comment("프로필 사진") private String profileUrl; + @Comment("급여") + private Integer salary; + @Comment("시작 시간") private LocalTime startTime; @@ -106,4 +109,16 @@ public class Senior { @OneToMany(mappedBy = "senior", cascade = CascadeType.ALL, orphanRemoval = true) private List lifeAssistList = new ArrayList<>(); + public void update(String name, LocalDate birthday, Sex sex, String address, String profileUrl, + LocalTime startTime, LocalTime endTime, CareStyle careStyle, Integer salary) { + this.name = name; + this.birthday = birthday; + this.sex = sex; + this.address = address; + this.profileUrl = profileUrl; + this.startTime = startTime; + this.endTime = endTime; + this.careStyle = careStyle; + this.salary = salary; + } } diff --git a/src/main/java/young/blaybus/domain/senior/repository/DetailSeniorRepository.java b/src/main/java/young/blaybus/domain/senior/repository/DetailSeniorRepository.java index f39d466..3600413 100644 --- a/src/main/java/young/blaybus/domain/senior/repository/DetailSeniorRepository.java +++ b/src/main/java/young/blaybus/domain/senior/repository/DetailSeniorRepository.java @@ -1,6 +1,5 @@ package young.blaybus.domain.senior.repository; -import static young.blaybus.domain.job_seek.QJobSeek.jobSeek; import static young.blaybus.domain.matching.QMatching.matching; import static young.blaybus.domain.senior.QSenior.senior; import static young.blaybus.domain.senior.QSeniorDay.seniorDay; @@ -41,13 +40,12 @@ public DetailSeniorResponse getSenior(Long seniorId) { senior.sex, senior.birthday, senior.address, - jobSeek.salary, + senior.salary, senior.startTime, senior.endTime ) ) .from(senior) - .leftJoin(jobSeek).on(senior.eq(jobSeek.senior)) .where(senior.id.eq(seniorId)) .fetchOne(); } @@ -109,7 +107,7 @@ public DetailMatchingSeniorResponse getMatchingSenior(Long seniorId, Member work senior.sex, senior.birthday, senior.address, - jobSeek.salary, + senior.salary, senior.startTime, senior.endTime, matching.fitness, @@ -118,7 +116,6 @@ public DetailMatchingSeniorResponse getMatchingSenior(Long seniorId, Member work ) .from(senior) .innerJoin(matching).on(matching.senior.eq(senior), matching.member.eq(worker)) - .leftJoin(jobSeek).on(senior.eq(jobSeek.senior)) .where(senior.id.eq(seniorId)) .fetchOne(); } diff --git a/src/main/java/young/blaybus/domain/senior/service/CreateSeniorService.java b/src/main/java/young/blaybus/domain/senior/service/CreateSeniorService.java index 130a009..9aa73ad 100644 --- a/src/main/java/young/blaybus/domain/senior/service/CreateSeniorService.java +++ b/src/main/java/young/blaybus/domain/senior/service/CreateSeniorService.java @@ -6,8 +6,6 @@ import org.springframework.util.StringUtils; import young.blaybus.api_response.exception.GeneralException; import young.blaybus.api_response.status.ErrorStatus; -import young.blaybus.domain.job_seek.JobSeek; -import young.blaybus.domain.job_seek.repository.JobSeekRepository; import young.blaybus.domain.member.Member; import young.blaybus.domain.member.repository.MemberRepository; import young.blaybus.domain.member.security.SecurityUtils; @@ -27,7 +25,6 @@ public class CreateSeniorService { private final SeniorRepository seniorRepository; - private final JobSeekRepository jobSeekRepository; private final MemberRepository memberRepository; public void createSenior(CreateSeniorRequest request) { @@ -107,16 +104,18 @@ public void updateSenior(Long seniorId, UpdateSeniorRequest request) { String profileUrl = senior.getProfileUrl(); if (StringUtils.hasText(request.profileUrl())) profileUrl = request.profileUrl(); - senior.toBuilder() - .name(request.name()) - .birthday(request.birthday()) - .sex(request.sex()) - .address(request.address()) - .profileUrl(profileUrl) - .startTime(request.startTime()) - .endTime(request.endTime()) - .careStyle(request.careStyle()) - .build(); + senior.update( + request.name(), + request.birthday(), + request.sex(), + request.address(), + profileUrl, + request.startTime(), + request.endTime(), + request.careStyle(), + request.salary() + ); + senior.getDayList().clear(); senior.getLifeAssistList().clear(); @@ -168,12 +167,5 @@ public void updateSenior(Long seniorId, UpdateSeniorRequest request) { .build() )); - jobSeekRepository.save( - JobSeek.builder() - .senior(senior) - .salary(request.salary()) - .build() - ); - } } diff --git a/src/main/java/young/blaybus/domain/senior/service/RecommendService.java b/src/main/java/young/blaybus/domain/senior/service/RecommendService.java index 1edcf98..f45833d 100644 --- a/src/main/java/young/blaybus/domain/senior/service/RecommendService.java +++ b/src/main/java/young/blaybus/domain/senior/service/RecommendService.java @@ -11,14 +11,13 @@ import org.springframework.transaction.annotation.Transactional; import young.blaybus.api_response.exception.GeneralException; import young.blaybus.api_response.status.ErrorStatus; +import young.blaybus.domain.address.Address; import young.blaybus.domain.certificate.Certificate; import young.blaybus.domain.certificate.enums.CertificateType; import young.blaybus.domain.certificate.repository.ListCertificateRepository; import young.blaybus.domain.job_search.JobSearch; import young.blaybus.domain.job_search.JobSearchDay; import young.blaybus.domain.job_search.repository.JobSearchRepository; -import young.blaybus.domain.job_seek.JobSeek; -import young.blaybus.domain.job_seek.repository.JobSeekRepository; import young.blaybus.domain.matching.repository.ListMatchingRepository; import young.blaybus.domain.member.Member; import young.blaybus.domain.senior.Senior; @@ -39,7 +38,6 @@ public class RecommendService { private final ListRecommendRepository listRecommendRepository; private final SeniorRepository seniorRepository; private final JobSearchRepository jobSearchRepository; - private final JobSeekRepository jobSeekRepository; private final ListMatchingRepository listMatchingRepository; private final ListCertificateRepository listCertificateRepository; private final MapService mapService; @@ -80,17 +78,20 @@ public int calculateFitness(Member member, Senior senior) { double fitness = 0.0; JobSearch jobSearch = jobSearchRepository.findByMemberId(member.getId()).orElse(null); - JobSeek jobSeek = jobSeekRepository.findBySenior(senior); // 거리 : 0km 최고점, 350km 최하점 → 30점 만점 - fitness += 30; - // todo 429 시 로직 추가 -// Coordinate memberGeocoding = mapService.geocoding(member.getAddress().toString()); -// Coordinate seniorGeocoding = mapService.geocoding(senior.getAddress()); -// Double distance = mapService.getDistance(memberGeocoding, seniorGeocoding); - double maxDistance = 350_000; -// fitness -= Math.min(30, distance * 30 / maxDistance); + try { + fitness += 30; + Coordinate memberGeocoding = mapService.geocoding(member.getAddress().toString()); + Coordinate seniorGeocoding = mapService.geocoding(senior.getAddress()); + Double distance = mapService.getDistance(memberGeocoding, seniorGeocoding); + double maxDistance = 350_000; + fitness -= Math.min(30, distance * 30 / maxDistance); + } catch (Exception e) { // API 무료 요청 횟수 초과 시 + fitness += 15; +// fitness += Address.calculateDistanceScore(member.getAddress(), senior.getAddress()); + } // 요일 → (노인의 희망 요일이 보호사의 요일과 겹치는 개수) * 15 / (노인의 희망 요일 개수) 점 → 15점 만점 assert jobSearch != null; @@ -124,8 +125,8 @@ public int calculateFitness(Member member, Senior senior) { // 노인 시급 < 보호사 시급일 때, 10 - 0.001 * (보호사 시급 - 노인 시급) → 1000원 차이당 1점 감소, 최소 0점 (10 만점) fitness += 10; - if (jobSeek.getSalary() < jobSearch.getSalary()) - fitness -= Math.max(10, 0.001 * (jobSearch.getSalary() - jobSeek.getSalary())); + if (senior.getSalary() < jobSearch.getSalary()) + fitness -= Math.max(10, 0.001 * (jobSearch.getSalary() - senior.getSalary())); // 요양 스타일 일치하면 5점 if (member.getCareStyle().equals(senior.getCareStyle())) fitness += 5;