Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/main/java/young/blaybus/domain/address/Address.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;
import org.springframework.util.StringUtils;

@Embeddable
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Address {
Expand All @@ -25,4 +25,11 @@ public class Address {
@Comment("상세 주소")
private String detail;

@Override
public String toString() {
String str = city + " " + district + " " + dong;
if (StringUtils.hasText(detail)) str += " " + detail;

return str;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package young.blaybus.domain.certificate.repository;

import static young.blaybus.domain.certificate.QCertificate.certificate;

import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import young.blaybus.domain.certificate.Certificate;
import young.blaybus.domain.certificate.enums.CertificateType;
import young.blaybus.domain.member.Member;

@Repository
@RequiredArgsConstructor
public class ListCertificateRepository {

private final JPAQueryFactory queryFactory;


public List<Certificate> getCertificateList(Member member) {
return queryFactory
.selectFrom(certificate)
.where(
certificate.member.eq(member),
certificate.type.ne(CertificateType.CARE)
)
.fetch();

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

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, Long> {

JobSeek findBySenior(Senior senior);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package young.blaybus.domain.matching.repository;

import static young.blaybus.domain.matching.QMatching.matching;

import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import young.blaybus.domain.matching.enums.MatchingStatus;
import young.blaybus.domain.member.Member;

@Repository
@RequiredArgsConstructor
public class ListMatchingRepository {

private final JPAQueryFactory queryFactory;


public long countAccepted(Member member) {
return queryFactory
.selectFrom(matching)
.where(
matching.member.eq(member),
matching.status.eq(MatchingStatus.ACCEPTED)
)
.fetch().size();

}
}
6 changes: 4 additions & 2 deletions src/main/java/young/blaybus/domain/member/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import young.blaybus.domain.address.Address;
import young.blaybus.domain.center.Center;
import young.blaybus.domain.member.enums.MemberRole;
import young.blaybus.util.enums.CareStyle;

@Entity
@Builder
Expand Down Expand Up @@ -70,8 +71,9 @@ public class Member {
@Comment("경력 기간")
private String careerPeriod;

@Comment("케어 스타일")
private String style;
@Enumerated(value = EnumType.STRING)
@Comment("돌봄 스타일")
private CareStyle careStyle;

@CreatedDate
@Column(updatable = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,6 @@ public record CreateMemberRequest(
@Schema(description = "한줄 소개")
String introduction,

@Schema(description = "요양 스타일")
@Schema(description = "돌봄 스타일")
CareStyle careStyle
) { }
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import young.blaybus.api_response.exception.GeneralException;
import young.blaybus.api_response.status.ErrorStatus;
import young.blaybus.domain.address.Address;
Expand All @@ -26,7 +25,6 @@
import young.blaybus.domain.member.enums.MemberRole;
import young.blaybus.domain.member.repository.MemberRepository;
import young.blaybus.domain.member.security.jwt.provider.JwtProvider;
import young.blaybus.domain.s3_file.service.S3FileService;

import java.time.LocalDateTime;
import java.util.*;
Expand Down Expand Up @@ -89,7 +87,7 @@ public void workerRegisterMember(CreateMemberRequest memberRequest) {
.introduction(memberRequest.introduction())
.careerPeriod(memberRequest.careerPeriod())
.createdTime(now)
.style(memberRequest.careStyle().getValue())
.careStyle(memberRequest.careStyle())
.build();

memberRepository.save(member);
Expand Down Expand Up @@ -162,7 +160,7 @@ public Object getMember(String memberId) {
.dong(member.getAddress().getDong())
.certificate(getCertificate)
.profileUrl(member.getProfileUrl())
.style(member.getStyle())
.style(member.getCareStyle().getValue())
.build();

return getMember;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
import young.blaybus.domain.senior.controller.request.CreateSeniorRequest;
import young.blaybus.domain.senior.controller.request.UpdateSeniorRequest;
import young.blaybus.domain.senior.controller.response.DetailSeniorResponse;
import young.blaybus.domain.senior.controller.response.ListRecommendResponse;
import young.blaybus.domain.senior.controller.response.ListSeniorResponse;
import young.blaybus.domain.senior.service.RecommendService;
import young.blaybus.domain.senior.service.SeniorService;

@RestController
Expand All @@ -24,6 +26,7 @@
public class SeniorController {

private final SeniorService seniorService;
private final RecommendService recommendService;

@GetMapping
@Operation(summary = "어르신 목록 조회")
Expand Down Expand Up @@ -58,4 +61,12 @@ public ApiResponse<Void> updateSenior(
return ApiResponse.onSuccess();
}

@GetMapping("/{senior-id}/recommend")
@Operation(summary = "요양 보호사 추천 받기")
public ApiResponse<ListRecommendResponse> getRecommendList(
@PathVariable("senior-id") Long seniorId
) {
return ApiResponse.onSuccess(recommendService.getRecommendList(seniorId));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package young.blaybus.domain.senior.controller.response;

import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalTime;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import young.blaybus.util.enums.DayOfWeek;

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "추천 요양 보호사 목록 조회 응답 DTO")
public class ListRecommendDto {

@Schema(description = "요양 보호사 ID")
private String memberId;

@Schema(description = "이름")
private String name;

@Schema(description = "프로필 사진")
private String profileUrl;

@Setter
@Schema(description = "희망 요일 목록")
private List<DayOfWeek> dayList;

@Schema(description = "희망 시작 시간")
private LocalTime startTime;

@Schema(description = "희망 종료 시간")
private LocalTime endTime;

@Schema(description = "돌봄 스타일")
private String careStyle;

@Schema(description = "적합도 %")
private Integer fitness;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package young.blaybus.domain.senior.controller.response;

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Builder.Default;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "추천 요양 보호사 목록 조회 응답 객체")
public class ListRecommendResponse {

@Default
@Schema(description = "요양 보호사 목록 조회 응답 객체")
private List<ListRecommendDto> recommendList = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package young.blaybus.domain.senior.repository;

import static young.blaybus.domain.certificate.QCertificate.certificate;
import static young.blaybus.domain.job_search.QJobSearch.jobSearch;
import static young.blaybus.domain.matching.QMatching.matching;
import static young.blaybus.domain.member.QMember.member;

import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import young.blaybus.domain.certificate.enums.CertificateType;
import young.blaybus.domain.matching.enums.MatchingStatus;
import young.blaybus.domain.member.Member;
import young.blaybus.domain.senior.Senior;

@Repository
@RequiredArgsConstructor
public class ListRecommendRepository {

private final JPAQueryFactory queryFactory;


public List<Member> getRecommendList(Senior senior) {
return queryFactory.selectFrom(member)
.innerJoin(jobSearch).on(jobSearch.member.eq(member)).fetchJoin()
.innerJoin(certificate).on(certificate.member.eq(member)).fetchJoin()
.where(
member.center.isNull(), // 요양 보호사만
certificate.type.eq(CertificateType.CARE), // 요양 보호사 자격증 필수
member.notIn( // 거절 이력 있으면 추천 X
JPAExpressions.select(matching.member)
.from(matching)
.where(
matching.member.eq(member),
matching.senior.eq(senior),
matching.status.eq(MatchingStatus.REJECTED))
)
)
.groupBy(member)
.fetch();
}
}
Loading
Loading