Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
1afa6b1
refactor : 자료형 변경 Long -> long
Seungcode Mar 17, 2025
12307f3
refactor : builder 제거
Seungcode Mar 17, 2025
32e1b18
feat: 포인트 타입 생성 (결제 / 적립)
Seungcode Mar 17, 2025
d4b044e
refactor : point 엔티티 Builder 제거
Seungcode Mar 18, 2025
406173c
refactor : History 엔티티 Builder 제거
Seungcode Mar 18, 2025
3060634
refactor: Builder 제거로 인한 save 메소드 변경
Seungcode Mar 18, 2025
94788fc
refactor: Builder 제거로 인한 save 메소드 변경
Seungcode Mar 18, 2025
973c238
test: test 내용 전체 주석처리
Seungcode Mar 18, 2025
2632542
feat: PointNotEnoughExceptionV2 생성
Seungcode Mar 18, 2025
5220d38
feat: PointNotFoundExceptionV2 생성
Seungcode Mar 18, 2025
eed58da
feat: getByMember 메서드 생성
Seungcode Mar 18, 2025
44ee6c7
feat: getMemberById 메서드 생성
Seungcode Mar 18, 2025
d6f77cd
feat: findHistoryListByMember 메서드 생성
Seungcode Mar 18, 2025
a31352f
feat: PointControllerV2 생성
Seungcode Mar 18, 2025
bbdbea8
feat: PointServiceV2 생성
Seungcode Mar 18, 2025
1033ecd
feat: PayPointReqV2 생성
Seungcode Mar 18, 2025
3777ce3
feat: HistoryListResV2 생성
Seungcode Mar 18, 2025
26a8b1e
feat: DepositPointReqV2 생성
Seungcode Mar 18, 2025
dc3c613
refactor : toResponse -> of
Seungcode Mar 19, 2025
2848333
refactor : getMemberById -> getById
Seungcode Mar 19, 2025
2db80d5
refactor : Transactional 어노테이션 메서드 단위 추가
Seungcode Mar 19, 2025
5d74eb8
refactor : findHistoryListByMember 삭제
Seungcode Mar 28, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.v1.member.exception.MemberNotFoundException;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {

Optional<Member> findByPlatformId(String platformId);

@Modifying
@Query("UPDATE Member m SET m.refreshToken = :refreshToken WHERE m.id = :memberId")
void updateRefreshTokenByMemberId(@Param("memberId") Long memberId,
@Param("refreshToken") String refreshToken);

default Member getById(long id) {
default Member getMemberById(long id){
return findById(id).orElseThrow(MemberNotFoundException::new);
}

@Modifying
@Query("UPDATE Member m SET m.refreshToken = :refreshToken WHERE m.id = :memberId")
void updateRefreshTokenByMemberId(@Param("memberId") Long memberId, @Param("refreshToken") String refreshToken);
}
31 changes: 23 additions & 8 deletions src/main/java/com/kau/capstone/entity/point/History.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.kau.capstone.entity.point;

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.v2.point.dto.request.DepositPointReqV2;
import com.kau.capstone.v2.point.dto.request.PayPointReqV2;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
Expand All @@ -9,7 +11,6 @@
import jakarta.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Comment;
Expand All @@ -18,7 +19,6 @@

@Entity
@Getter
@Builder
@AllArgsConstructor
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

얘도 없애주세요~

@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class History {
Expand All @@ -33,11 +33,6 @@ public class History {
@JoinColumn(name = "point_id")
private Point point;

@ManyToOne
@Comment("사용자 연결")
@JoinColumn(name = "member_id")
private Member member;

@Comment("적립/결제 후의 총 포인트")
private Long totalPoint;

Expand All @@ -48,5 +43,25 @@ public class History {
private String name;

@Comment("적립/결제 일자")
private LocalDateTime date;
private LocalDateTime date = LocalDateTime.now();

private History(Point point, Long totalPoint, Long changePoint, String name) {
this.point = point;
this.totalPoint = totalPoint;
this.changePoint = changePoint;
this.name = name;
}

public static History of(Point point, PayPointReqV2 req, PointType type) {
return new History(point, point.getAmount(), -req.point(), type.description);
}

public static History of(Point point, DepositPointReqV2 req, PointType type) {
return new History(point, point.getAmount(), req.point(), type.description);
}

@Deprecated
public static History of(Member member, Point point, Long changePoint, String name){
return new History(point, point.getAmount(), changePoint, name);
}
}
18 changes: 10 additions & 8 deletions src/main/java/com/kau/capstone/entity/point/Point.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,33 @@

@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Point {

@Id
@Comment("포인트 식별자")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private long id;

@OneToOne(mappedBy = "point")
private Member member;

@Comment("포인트 값")
private Long amount;
private long amount;

public void connectMember(Member member) {
private Point(Member member) {
this.member = member;
this.amount = 0L;
}

public static Point of(Member member) {
return new Point(member);
}

public void payment(Long payPoint) {
public void payment(long payPoint) {
this.amount -= payPoint;
}

public void deposit(Long depositPoint) {
public void deposit(long depositPoint) {
this.amount += depositPoint;
}
}
24 changes: 24 additions & 0 deletions src/main/java/com/kau/capstone/entity/point/PointType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kau.capstone.entity.point;

import lombok.Getter;

@Getter
public enum PointType {
PAYMENT_POINT("포인트 결제"),
EARN_POINT("포인트 적립");

final String description;

PointType(String description) {
this.description = description;
}

public static PointType getPointType(String description) {
for (PointType pointType : PointType.values()) {
if (pointType.description.equals(description)) {
return pointType;
}
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.entity.point.History;
import com.kau.capstone.v2.point.dto.response.HistoryListResV2;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand All @@ -10,6 +11,11 @@

public interface HistoryRepository extends JpaRepository<History, Long> {

@Query("SELECT h FROM History h WHERE h.member = :member ORDER BY h.id DESC ")
@Query("SELECT h FROM History h WHERE h.point.member = :member ORDER BY h.id DESC ")
List<History> findHistoriesByMember(@Param("member") Member member);

default HistoryListResV2 findHistoryListByMember(Member member){
List<History> res = findHistoriesByMember(member);
return HistoryListResV2.of(res);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exception 처리를 해주지 않는데, default로 선언하고 여기서 List에 값을 넣는 작업까지 해주는 이유가 있나요?
한번에 List<History> res = findHistoriesByMember(member) 로 해주면 안되나요

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

서비스계층은 어떤 작업을 할건지 흐름이 보이는 것만 했으면 좋겠는데 엔티티를 가져와서 dto로 만드는 과정이 거기 들어가는 것보다 레포단에서 해주고 넘겨야한다고 생각해서 한 번 더 감싸서 dto로 리턴해줬습니다.

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
package com.kau.capstone.entity.point.repository;

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.entity.point.Point;
import com.kau.capstone.v2.point.exception.PointNotFoundExceptionV2;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.Optional;

public interface PointRepository extends JpaRepository<Point, Long> {

@Query("SELECT p FROM Point p WHERE p.member = :member")
Optional<Point> findByMember(@Param("member") Member member);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

얘는 왜 Optional 써요


default Point getByMember(Member member){
return findByMember(member).orElseThrow(PointNotFoundExceptionV2::new);
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,12 @@ public SignUserDto findOrCreateMember(String site, UserInfoDto userInfoDto) {
}

private SignUserDto save(String site, UserInfoDto userInfoDto) {
// 포인트, 멤버 연결
Point point = Point.builder()
.amount(0L)
.build();
pointRepository.save(point);

Member member = MemberMapper.toMember(site, userInfoDto);
memberRepository.save(member);

point.connectMember(member);
Point point = Point.of(member);

member.connectPoint(point);

// 리워드 내용 초기 세팅 (모두 미달성으로 표기하기 위해)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.kau.capstone.v1.point.dto;

public record DeliveryFeeRequest(
Long deliveryFee
long deliveryFee
) {
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.kau.capstone.v1.point.dto;

public record EarnPointRequest(
Long point
long point
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import java.util.List;

@Builder
public record HistoryResponse(
List<OneHistoryResponse> history
) {
Expand All @@ -15,8 +14,6 @@ public static HistoryResponse toResponse(List<History> histories) {
.map(OneHistoryResponse::toResponse)
.toList();

return HistoryResponse.builder()
.history(responses)
.build();
return new HistoryResponse(responses);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import java.time.format.DateTimeFormatter;

@Builder
public record OneHistoryResponse(
Long id,
Long totalPoint,
Expand All @@ -17,12 +16,12 @@ public record OneHistoryResponse(
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

public static OneHistoryResponse toResponse(History history) {
return OneHistoryResponse.builder()
.id(history.getId())
.totalPoint(history.getTotalPoint())
.changePoint(history.getChangePoint())
.name(history.getName())
.date(DateTimeFormatter.ofPattern(DATE_FORMAT).format(history.getDate()))
.build();
return new OneHistoryResponse(
history.getId(),
history.getTotalPoint(),
history.getChangePoint(),
history.getName(),
DateTimeFormatter.ofPattern(DATE_FORMAT).format(history.getDate())
);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.kau.capstone.v1.point.dto;

public record PayPointRequest(
Long point
long point
) {
}
21 changes: 7 additions & 14 deletions src/main/java/com/kau/capstone/v1/point/service/PointService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
import com.kau.capstone.entity.alarm.AlarmDetail;
import com.kau.capstone.entity.alarm.repository.AlarmRepository;
import com.kau.capstone.entity.food.Food;
import com.kau.capstone.entity.member.repository.MemberRepository;
import com.kau.capstone.v1.food.exception.FoodNotFoundException;
import com.kau.capstone.entity.food.repository.FoodRepository;
import com.kau.capstone.entity.member.Member;
import com.kau.capstone.v1.member.exception.PointNotEnoughException;
import com.kau.capstone.entity.member.repository.MemberRepository;
import com.kau.capstone.v1.point.dto.EarnPointRequest;
import com.kau.capstone.v1.point.dto.HistoryResponse;
import com.kau.capstone.v1.point.dto.PayPointRequest;
Expand Down Expand Up @@ -46,7 +46,7 @@ public class PointService {
private final AlarmRepository alarmRepository;

public void processPointPayment(Long memberId, PayPointRequest request) {
Member member = memberRepository.getById(memberId);
Member member = memberRepository.getMemberById(memberId);

Point point = member.getPoint();

Expand All @@ -59,7 +59,7 @@ public void processPointPayment(Long memberId, PayPointRequest request) {
}

public void processPointEarn(Long memberId, EarnPointRequest request) {
Member member = memberRepository.getById(memberId);
Member member = memberRepository.getMemberById(memberId);

Point point = member.getPoint();

Expand All @@ -68,27 +68,20 @@ public void processPointEarn(Long memberId, EarnPointRequest request) {
}

public HistoryResponse getPointHistory(Long memberId) {
Member member = memberRepository.getById(memberId);
Member member = memberRepository.getMemberById(memberId);

List<History> histories = historyRepository.findHistoriesByMember(member);

return HistoryResponse.toResponse(histories);
}

public void save(Member member, Point point, Long changePoint, String name) {
History history = History.builder()
.member(member)
.point(point)
.totalPoint(point.getAmount())
.changePoint(changePoint)
.name(name)
.date(LocalDateTime.now())
.build();
History history = History.of(member, point, changePoint, name);
historyRepository.save(history);
}

public void processPointPaymentForFood(Long memberId, Long foodId, Long deliveryFee) {
Member member = memberRepository.getById(memberId);
Member member = memberRepository.getMemberById(memberId);
Point point = member.getPoint();

Food food = foodRepository.findById(foodId)
Expand All @@ -114,7 +107,7 @@ public void processPointPaymentForFood(Long memberId, Long foodId, Long delivery
}

public void processPointEarnForReward(Long memberId, Long rewardId) {
Member member = memberRepository.getById(memberId);
Member member = memberRepository.getMemberById(memberId);
Point point = member.getPoint();

Reward reward = rewardRepository.findById(rewardId)
Expand Down
Loading
Loading