From 1028ad08ee1180713dc3fa63a16ab2d324ec7868 Mon Sep 17 00:00:00 2001 From: JOO WON SEO Date: Fri, 24 May 2024 16:00:59 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=80Merge:=20Main=20Merge=2037=EC=B0=A8?= =?UTF-8?q?=20(#167)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: Hotfix: 댓글 수정 request dto 추가 (#149) * Hotfix : 댓글 삭제 시 게시물의 댓글 수 차감 로직 수정 (#151) * :bug: Hotfix: 댓글 수정 request dto 추가 * :bug: Hotfix: 댓글 삭제 시 게시물의 댓글 수 차감 로직 수정 * Feat: 프로필 이모지 설정 로직 구현 (#153) * :card_file_box: profile 속성의 Enum value ProfileEmoji 생성 * :card_file_box: profile 속성 ProfileEmoji 설정 * :sparkles: Feat: 회원 가입 및 정보 수정에 프로필 이모지 설정 로직 추가 * Refactor : 모델 삭제 시 soft delete 구현 (#155) * :card_file_box: versionStatus 속성의 Enum value VersionStatus 생성 * :card_file_box: versionStatus 속성 추가 * :necktie: 모델 삭제 시 sofe delete 구현 * :necktie: 모델 삭제 시 sofe delete 구현 * Fix: 타 사용자 자소서 조회 시 포인트 사용 로직 수정 (#157) * :card_file_box: coverletter 외래키 추가 * :necktie: 자소서 조회 포인트 사용 시, point 데이터에 coverletter 삽입 로직 추가 * :necktie: 자소서 상세 조회 시 포인트를 사용한 자소서인지 나타내는 변수 추가 * Refactor: 댓글 대댓글 계층 구조 적용 (#158) * :card_file_box: 댓글 계층 구조 나타내는 속성 추가 * :card_file_box: db 변경 사항에 따른 댓글 작성 로직 수정 * :necktie: db 변경 사항에 따른 댓글 목록 조회 로직 수정 * :fire: 필요 없는 메소드 삭제 * :necktie: 비활성/탈퇴 회원 제거 로직 추가 * :bug: 게시물 작성자 프로필 추가 * :bug: 자기소개서 작성자 정보 추가 * :bug: 경험카드 작성자 정보 추가 * :bug: 게시물 작성자 프로필 추가 * :bug: 댓글 증가 중복 오류 수정 * :fire: 사용 안하는 import문 삭제 * :bug: 게시물 작성자 프로필 추가 * Feat: 타 사용자 조회 시, 공유한 사용자에게 포인트 전달 (#166) * feat: 포인트 외래키 수정 및 PointType 추가 Related: #165 * feat: 타 사용자 포인트 조회 시, 공유한 사용자에게 포인트 증가 구현 Related: #165 * fix: 마이파에지 포인트 사용내역에서 충전 내역 보이는 오류 해결 Related: #165 --------- Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> --- .../meetfolio/domain/enums/PointType.java | 1 + .../codez4/meetfolio/domain/point/Point.java | 2 +- .../domain/point/dto/PointRequest.java | 20 +++++++++++--- .../point/repository/PointRepository.java | 1 + .../point/service/PointCommandService.java | 26 ++++++++++++++++--- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/codez4/meetfolio/domain/enums/PointType.java b/src/main/java/com/codez4/meetfolio/domain/enums/PointType.java index 2ca5a12..59080a8 100644 --- a/src/main/java/com/codez4/meetfolio/domain/enums/PointType.java +++ b/src/main/java/com/codez4/meetfolio/domain/enums/PointType.java @@ -8,6 +8,7 @@ @RequiredArgsConstructor public enum PointType { USE_COVER_LETTER("자소서 조회"), + SHARE_COVER_LETTER("자소서 공유"), USE_AI_ANALYSIS("AI 직무 역량 분석"), CHARGE("충전"); private final String description; diff --git a/src/main/java/com/codez4/meetfolio/domain/point/Point.java b/src/main/java/com/codez4/meetfolio/domain/point/Point.java index 409eeb7..0bb499a 100644 --- a/src/main/java/com/codez4/meetfolio/domain/point/Point.java +++ b/src/main/java/com/codez4/meetfolio/domain/point/Point.java @@ -37,7 +37,7 @@ public class Point extends BaseTimeEntity { @Enumerated(EnumType.STRING) private PointType pointType; - @OneToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "coverletter_id", nullable = true) private CoverLetter coverLetter; } diff --git a/src/main/java/com/codez4/meetfolio/domain/point/dto/PointRequest.java b/src/main/java/com/codez4/meetfolio/domain/point/dto/PointRequest.java index 8389ff6..bff3ed7 100644 --- a/src/main/java/com/codez4/meetfolio/domain/point/dto/PointRequest.java +++ b/src/main/java/com/codez4/meetfolio/domain/point/dto/PointRequest.java @@ -12,9 +12,10 @@ import lombok.Getter; public class PointRequest { + @Schema(description = "포인트 사용 요청 dto") @Getter - public static class PointUseRequest{ + public static class PointUseRequest { @Schema(description = "포인트 사용 타입, USE_COVER_LETTER/USE_AI_ANALYSIS") @EnumValid(enumClass = PointType.class) @@ -31,7 +32,8 @@ public static class PointUseRequest{ @Getter @AllArgsConstructor @Builder - public static class Post{ + public static class Post { + int point; PointType pointType; int totalPoint; @@ -40,7 +42,7 @@ public static class Post{ CoverLetter coverLetter; } - public static Point toEntity(Post post){ + public static Point toEntity(Post post) { return Point.builder() .point(post.getPoint()) .pointType(post.getPointType()) @@ -50,4 +52,16 @@ public static Point toEntity(Post post){ .coverLetter(post.coverLetter) .build(); } + + public static Point toSharePoint(int point, PointType pointType, int totalPoint, Member member, + CoverLetter coverLetter) { + + return Point.builder() + .point(point) + .pointType(pointType) + .totalPoint(totalPoint) + .member(member) + .coverLetter(coverLetter) + .build(); + } } diff --git a/src/main/java/com/codez4/meetfolio/domain/point/repository/PointRepository.java b/src/main/java/com/codez4/meetfolio/domain/point/repository/PointRepository.java index 5368cde..a7f8358 100644 --- a/src/main/java/com/codez4/meetfolio/domain/point/repository/PointRepository.java +++ b/src/main/java/com/codez4/meetfolio/domain/point/repository/PointRepository.java @@ -16,6 +16,7 @@ public interface PointRepository extends JpaRepository { Page findByMemberAndPointType(Member member, PointType pointType, Pageable pageable); + @Query("SELECT p FROM Point p WHERE p.member = :member AND p.pointType <> 'CHARGE'") Page getPointByMember(Member member, Pageable pageable); Optional getPointByPayment(Payment payment); diff --git a/src/main/java/com/codez4/meetfolio/domain/point/service/PointCommandService.java b/src/main/java/com/codez4/meetfolio/domain/point/service/PointCommandService.java index 7885e78..efc4fe9 100644 --- a/src/main/java/com/codez4/meetfolio/domain/point/service/PointCommandService.java +++ b/src/main/java/com/codez4/meetfolio/domain/point/service/PointCommandService.java @@ -1,5 +1,11 @@ package com.codez4.meetfolio.domain.point.service; +import static com.codez4.meetfolio.domain.point.dto.PointRequest.toEntity; +import static com.codez4.meetfolio.domain.point.dto.PointRequest.toSharePoint; +import static com.codez4.meetfolio.domain.point.dto.PointResponse.toPointProc; + +import com.codez4.meetfolio.domain.coverLetter.CoverLetter; +import com.codez4.meetfolio.domain.enums.PointType; import com.codez4.meetfolio.domain.member.Member; import com.codez4.meetfolio.domain.point.Point; import com.codez4.meetfolio.domain.point.dto.PointRequest; @@ -9,9 +15,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import static com.codez4.meetfolio.domain.point.dto.PointRequest.toEntity; -import static com.codez4.meetfolio.domain.point.dto.PointResponse.toPointProc; - @Service @RequiredArgsConstructor @Transactional @@ -30,8 +33,25 @@ public Point post(PointRequest.Post post) { public PointResponse.PointProc usePoint(PointRequest.Post post, Member member) { Point point = post(post); member.setPoint(post.getTotalPoint()); + + if (post.getPointType() == PointType.USE_COVER_LETTER) { + shareCoverLetter(post); + } return toPointProc(point); } + public void shareCoverLetter(PointRequest.Post post) { + + CoverLetter coverLetter = post.getCoverLetter(); + Member owner = coverLetter.getMember(); + PointType pointType = PointType.SHARE_COVER_LETTER; + int point = 100; + int totalPoint = owner.getPoint() + point; + + Point sharePoint = toSharePoint(point, pointType, totalPoint, owner, coverLetter); + save(sharePoint); + owner.setPoint(totalPoint); + } + }