From a69025241e7ba56597e35199f41b159f5e099808 Mon Sep 17 00:00:00 2001 From: gengminy Date: Sun, 30 Oct 2022 20:29:24 +0900 Subject: [PATCH] =?UTF-8?q?:hammer:=20fix(card):=20=EB=82=B4=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=EA=B0=92=20=EB=B3=80=EA=B2=BD=20#41?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../naechinso/domain/card/CardController.java | 4 +-- .../naechinso/domain/card/CardService.java | 22 ++++++++------- .../CardOppositeMemberProfileResponseDTO.java | 4 +-- .../domain/member/MemberController.java | 8 ++++++ .../domain/member/MemberService.java | 18 ++++++++++--- .../domain/member/entity/Member.java | 7 ++++- .../domain/member/entity/MemberDetail.java | 8 ++---- .../naechinso/domain/point/entity/Point.java | 2 -- .../global/config/entity/BaseEntity.java | 27 +++++++++++-------- .../global/config/entity/BaseTimeEntity.java | 26 ------------------ 10 files changed, 63 insertions(+), 63 deletions(-) delete mode 100644 src/main/java/com/tikitaka/naechinso/global/config/entity/BaseTimeEntity.java diff --git a/src/main/java/com/tikitaka/naechinso/domain/card/CardController.java b/src/main/java/com/tikitaka/naechinso/domain/card/CardController.java index bcc6d7f..ede0aca 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/card/CardController.java +++ b/src/main/java/com/tikitaka/naechinso/domain/card/CardController.java @@ -23,8 +23,8 @@ public class CardController { private final CardService cardService; @GetMapping - @ApiOperation(value = "자신이 소유한 모든 카드를 가져온다 (AccessToken)") - public CommonApiResponse> getAllCardsByMember( + @ApiOperation(value = "자신이 소유한 모든 카드 썸네일을 가져온다 (AccessToken)") + public CommonApiResponse> getAllCardsByMember( @ApiIgnore @AuthMember Member member ) { return CommonApiResponse.of(cardService.findAllCard(member)); diff --git a/src/main/java/com/tikitaka/naechinso/domain/card/CardService.java b/src/main/java/com/tikitaka/naechinso/domain/card/CardService.java index 9f35d48..546102f 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/card/CardService.java +++ b/src/main/java/com/tikitaka/naechinso/domain/card/CardService.java @@ -10,20 +10,15 @@ import com.tikitaka.naechinso.domain.member.entity.Member; import com.tikitaka.naechinso.global.error.ErrorCode; import com.tikitaka.naechinso.global.error.exception.BadRequestException; -import com.tikitaka.naechinso.global.error.exception.ForbiddenException; import com.tikitaka.naechinso.global.error.exception.NotFoundException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.ResponseBody; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Random; import java.util.stream.Collectors; @@ -37,10 +32,20 @@ public class CardService { /** - * 내가 받았던 모든 카드 기록을 가져온다 (챗봇 썸네일) + * 내가 받았던 모든 카드 기록을 가져온다 (챗봇 썸네일용) */ - public List findAllCard(Member authMember){ - return cardRepository.findAllDTOByMember(authMember); + public List findAllCard(Member authMember){ + return cardRepository.findAllByMember(authMember).stream().map( + card -> { + Member targetMember = memberRepository.findById(card.getTargetMemberId()) + .orElse(null); + + if (targetMember == null) { + return null; + } + return CardOppositeMemberProfileResponseDTO.of(targetMember); + } + ).collect(Collectors.toList()); } /** @@ -54,7 +59,6 @@ public CardCountResponseDTO getRemainingCount(Member authMember) { else return new CardCountResponseDTO(count); } - /** * 추천 받았던 유저를 필터링한 랜덤 추천 카드를 만든다 * */ diff --git a/src/main/java/com/tikitaka/naechinso/domain/card/dto/CardOppositeMemberProfileResponseDTO.java b/src/main/java/com/tikitaka/naechinso/domain/card/dto/CardOppositeMemberProfileResponseDTO.java index d6730f6..234582c 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/card/dto/CardOppositeMemberProfileResponseDTO.java +++ b/src/main/java/com/tikitaka/naechinso/domain/card/dto/CardOppositeMemberProfileResponseDTO.java @@ -67,9 +67,9 @@ public static class Recommendation { private String period; private String appealDetail; - public static CardOppositeMemberProfileResponseDTO.Recommendation of(Recommend recommend) { + public static Recommendation of(Recommend recommend) { Member sender = recommend.getSender(); - return CardOppositeMemberProfileResponseDTO.Recommendation.builder() + return Recommendation.builder() .name(CustomStringUtil.hideName(recommend.getSenderName())) .gender(recommend.getSenderGender()) .appeal(recommend.getReceiverAppeal()) diff --git a/src/main/java/com/tikitaka/naechinso/domain/member/MemberController.java b/src/main/java/com/tikitaka/naechinso/domain/member/MemberController.java index df81f59..8a55962 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/member/MemberController.java +++ b/src/main/java/com/tikitaka/naechinso/domain/member/MemberController.java @@ -88,6 +88,14 @@ public CommonApiResponse logout( return CommonApiResponse.of(memberService.logout(member)); } + @DeleteMapping("/delete") + @ApiOperation(value = "회원 탈퇴 처리한다 (soft delete) (AccessToken)") + public CommonApiResponse delete( + @ApiIgnore @AuthMember Member member + ) { + return CommonApiResponse.of(memberService.delete(member)); + } + @PostMapping("/join") @ApiOperation(value = "유저를 공통 정보로 가입시킨다 (RegisterToken)") public CommonApiResponse createCommonMember( diff --git a/src/main/java/com/tikitaka/naechinso/domain/member/MemberService.java b/src/main/java/com/tikitaka/naechinso/domain/member/MemberService.java index 74766e8..d3a22d7 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/member/MemberService.java +++ b/src/main/java/com/tikitaka/naechinso/domain/member/MemberService.java @@ -158,11 +158,7 @@ public MemberDetailResponseDTO createDetail(Member authMember, MemberDetailJoinR * 사진 필드는 Pending 에서 승인 후 처리한다 * */ public MemberCommonResponseDTO updateJobRequest(Member authMember, MemberUpdateJobRequestDTO dto){ -// member.updateJob(dto); -// memberRepository.save(member); - //직업 정보 승인 요청 - return pendingService.createPendingByJob(authMember, dto); } @@ -192,6 +188,20 @@ public MemberDetailResponseDTO updateImage(Member authMember, MemberUpdateImageR return pendingService.createPendingByMemberImage(authMember, dto); } + /** + * MemberDetail 의 프로필 이미지를 업로드 한다 + * */ + public Member delete(Member authMember){ + Member member = findByMember(authMember); + + memberRepository.delete(authMember); + + System.out.println("member.getCreatedAt() = " + member.getCreatedAt()); + System.out.println("member.getUpdatedAt() = " + member.getUpdatedAt()); + System.out.println("member.getDeletedAt() = " + member.isDeleted()); + + return member; + } public void validateToken(Member authMember) { if (authMember == null) { diff --git a/src/main/java/com/tikitaka/naechinso/domain/member/entity/Member.java b/src/main/java/com/tikitaka/naechinso/domain/member/entity/Member.java index 8fa7d61..cb18470 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/member/entity/Member.java +++ b/src/main/java/com/tikitaka/naechinso/domain/member/entity/Member.java @@ -18,6 +18,8 @@ import com.tikitaka.naechinso.global.error.exception.BadRequestException; import com.tikitaka.naechinso.global.error.exception.UnauthorizedException; import lombok.*; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; import javax.persistence.*; import java.util.ArrayList; @@ -34,8 +36,9 @@ @AllArgsConstructor @NoArgsConstructor @ToString +//@SQLDelete(sql = "UPDATE member SET deleted = true WHERE mem_id = ?") +@Where(clause = "deleted = false") public class Member extends BaseEntity { - @Id @Column(name = "mem_id") @GeneratedValue @@ -127,6 +130,8 @@ public class Member extends BaseEntity { @Builder.Default private String fcmToken = ""; + private boolean deleted = Boolean.FALSE; + //멤버 디테일 정보 @OneToOne(mappedBy = "member") @JoinColumn(name = "mem_detail") diff --git a/src/main/java/com/tikitaka/naechinso/domain/member/entity/MemberDetail.java b/src/main/java/com/tikitaka/naechinso/domain/member/entity/MemberDetail.java index f52e710..27ef41a 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/member/entity/MemberDetail.java +++ b/src/main/java/com/tikitaka/naechinso/domain/member/entity/MemberDetail.java @@ -6,6 +6,8 @@ import com.tikitaka.naechinso.global.config.entity.BaseEntity; import lombok.*; import org.apache.commons.lang3.StringUtils; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; import javax.persistence.*; import java.util.ArrayList; @@ -23,18 +25,12 @@ @AllArgsConstructor @NoArgsConstructor @ToString(exclude = {"member"}) -@EqualsAndHashCode(exclude = {"member"}) //one to one cycle hashcode 방지 public class MemberDetail extends BaseEntity { // member_detail_id => mem_id @Id @Column(name = "mem_id") private Long id; -// //추천해준 사람의 PK -// @ManyToOne -// @JoinColumn(name = "mem_id2") -// private Member recommender; - @Column(name = "mem_height") private int height; diff --git a/src/main/java/com/tikitaka/naechinso/domain/point/entity/Point.java b/src/main/java/com/tikitaka/naechinso/domain/point/entity/Point.java index 474d5b0..4493570 100644 --- a/src/main/java/com/tikitaka/naechinso/domain/point/entity/Point.java +++ b/src/main/java/com/tikitaka/naechinso/domain/point/entity/Point.java @@ -1,10 +1,8 @@ package com.tikitaka.naechinso.domain.point.entity; import com.tikitaka.naechinso.domain.member.entity.Member; -import com.tikitaka.naechinso.domain.member.entity.MemberDetail; import com.tikitaka.naechinso.domain.point.constant.PointType; import com.tikitaka.naechinso.global.config.entity.BaseEntity; -import com.tikitaka.naechinso.global.config.entity.BaseTimeEntity; import lombok.*; import javax.persistence.*; diff --git a/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseEntity.java b/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseEntity.java index 072c2f1..e8cfc1c 100644 --- a/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseEntity.java +++ b/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseEntity.java @@ -1,23 +1,28 @@ package com.tikitaka.naechinso.global.config.entity; -import com.tikitaka.naechinso.global.constant.DeleteStatus; import lombok.Getter; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import java.time.LocalDateTime; -/** 상속받으면 createdAt, updatedAt, delStatus 자동으로 만들어주는 엔티티입니다 +/** 상속받으면 createdAt, updatedAt + * 필드 자동으로 만들어주는 엔티티입니다 * jpa의 audit(감시) 기능을 사용합니다 */ @MappedSuperclass @EntityListeners({ AuditingEntityListener.class }) @Getter -public class BaseEntity extends BaseTimeEntity { - @Enumerated(EnumType.STRING) - @Column(columnDefinition = "Text default 'N'") - private DeleteStatus delStatus=DeleteStatus.N; +public class BaseEntity { + @CreatedDate + @Column(updatable = false) + private LocalDateTime createdAt; - public void changeDeleteStatus(){ - if(this.delStatus ==DeleteStatus.Y){this.delStatus =DeleteStatus.N;} - else{this.delStatus=DeleteStatus.Y;} - } + @LastModifiedDate + private LocalDateTime updatedAt; } diff --git a/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseTimeEntity.java b/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseTimeEntity.java deleted file mode 100644 index fcea938..0000000 --- a/src/main/java/com/tikitaka/naechinso/global/config/entity/BaseTimeEntity.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.tikitaka.naechinso.global.config.entity; - -import lombok.Getter; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import javax.persistence.Column; -import javax.persistence.EntityListeners; -import javax.persistence.MappedSuperclass; -import java.time.LocalDateTime; - -/** 상속받으면 createdAt, updatedAt - * 필드 자동으로 만들어주는 엔티티입니다 - * jpa의 audit(감시) 기능을 사용합니다 */ -@MappedSuperclass -@EntityListeners({ AuditingEntityListener.class }) -@Getter -public class BaseTimeEntity { - @CreatedDate - @Column(updatable = false) - private LocalDateTime createdAt; - - @LastModifiedDate - private LocalDateTime updatedAt; -}