Skip to content

Commit ca39cfe

Browse files
committed
refactor: Subscription 엔티티 수정 및 Mypage의 구독 정보 조회 기능 리팩토링
1 parent 744e7ca commit ca39cfe

File tree

6 files changed

+49
-16
lines changed

6 files changed

+49
-16
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.log4u.domain.subscription;
2+
3+
public enum PaymentProvider {
4+
TOSS,
5+
KAKAO,
6+
NAVER
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.log4u.domain.subscription;
2+
3+
public enum PaymentStatus {
4+
SUCCESS, // 결제 완료
5+
FAILED, // 결제 실패
6+
REFUNDED // 환불 완료
7+
}

src/main/java/com/example/log4u/domain/subscription/dto/SubscriptionResponseDto.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.time.LocalDateTime;
44

5+
import com.example.log4u.domain.subscription.PaymentProvider;
6+
57
import jakarta.annotation.Nullable;
68
import lombok.Builder;
79

@@ -10,9 +12,9 @@ public record SubscriptionResponseDto(
1012
boolean isSubscriptionActive,
1113

1214
@Nullable
13-
LocalDateTime startDate,
15+
PaymentProvider paymentProvider,
1416

1517
@Nullable
16-
LocalDateTime endDate
18+
LocalDateTime startDate
1719
) {
1820
}

src/main/java/com/example/log4u/domain/subscription/entity/Subscription.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.example.log4u.domain.subscription.entity;
22

3-
import java.time.LocalDateTime;
4-
53
import com.example.log4u.common.entity.BaseEntity;
4+
import com.example.log4u.domain.subscription.PaymentProvider;
5+
import com.example.log4u.domain.subscription.PaymentStatus;
66

7-
import jakarta.persistence.AttributeOverride;
87
import jakarta.persistence.Column;
98
import jakarta.persistence.Entity;
9+
import jakarta.persistence.EnumType;
10+
import jakarta.persistence.Enumerated;
1011
import jakarta.persistence.GeneratedValue;
1112
import jakarta.persistence.GenerationType;
1213
import jakarta.persistence.Id;
@@ -22,15 +23,25 @@
2223
@AllArgsConstructor(access = AccessLevel.PACKAGE)
2324

2425
@Entity
25-
@AttributeOverride(name = "createdAt", column = @Column(name = "START_TIME"))
2626
public class Subscription extends BaseEntity {
2727
@Id
2828
@GeneratedValue(strategy = GenerationType.IDENTITY)
2929
private Long id;
3030

31+
@Column(nullable = false)
3132
private Long userId;
3233

33-
private Long price;
34+
@Column(nullable = false)
35+
@Enumerated(EnumType.STRING)
36+
private PaymentProvider paymentProvider;
37+
38+
@Column(nullable = false)
39+
private Long amount;
40+
41+
@Column(nullable = false, unique = true)
42+
private String paymentKey;
3443

35-
private LocalDateTime endTime;
44+
@Column(nullable = false)
45+
@Enumerated(EnumType.STRING)
46+
private PaymentStatus paymentStatus;
3647
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.example.log4u.domain.subscription.repository;
22

33
import java.time.LocalDateTime;
4-
import java.util.List;
4+
import java.util.Optional;
55

66
import org.springframework.data.jpa.repository.JpaRepository;
77

8+
import com.example.log4u.domain.subscription.PaymentStatus;
89
import com.example.log4u.domain.subscription.entity.Subscription;
910

1011
public interface SubscriptionRepository extends JpaRepository<Subscription, Long> {
11-
List<Subscription> findByUserIdAndEndTimeAfter(Long userId, LocalDateTime now);
12+
Optional<Subscription> findByUserIdAndCreatedAtBeforeAndPaymentStatusOrderByCreatedAtDesc(Long userId,
13+
LocalDateTime now,
14+
PaymentStatus paymentStatus);
1215
}
1316

src/main/java/com/example/log4u/domain/user/mypage/service/MyPageService.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.example.log4u.domain.user.mypage.service;
22

33
import java.time.LocalDateTime;
4-
import java.util.List;
4+
import java.util.Optional;
55

66
import org.springframework.data.domain.PageRequest;
77
import org.springframework.data.domain.Slice;
@@ -12,6 +12,7 @@
1212
import com.example.log4u.domain.diary.dto.DiaryResponseDto;
1313
import com.example.log4u.domain.diary.service.DiaryService;
1414
import com.example.log4u.domain.follow.repository.FollowQuerydsl;
15+
import com.example.log4u.domain.subscription.PaymentStatus;
1516
import com.example.log4u.domain.subscription.dto.SubscriptionResponseDto;
1617
import com.example.log4u.domain.subscription.entity.Subscription;
1718
import com.example.log4u.domain.subscription.repository.SubscriptionRepository;
@@ -66,18 +67,20 @@ public PageResponse<UserThumbnailResponseDto> getMyFollowings(Long userId, Long
6667

6768
@Transactional(readOnly = true)
6869
public SubscriptionResponseDto getMySubscription(Long userId) {
69-
List<Subscription> subscriptions = subscriptionRepository.findByUserIdAndEndTimeAfter(userId,
70-
LocalDateTime.now());
71-
if (subscriptions.isEmpty()) {
70+
Optional<Subscription> optionalSubscription = subscriptionRepository
71+
.findByUserIdAndCreatedAtBeforeAndPaymentStatusOrderByCreatedAtDesc(
72+
userId,
73+
LocalDateTime.now(), PaymentStatus.SUCCESS);
74+
if (optionalSubscription.isEmpty()) {
7275
return SubscriptionResponseDto.builder()
7376
.isSubscriptionActive(false)
7477
.build();
7578
} else {
76-
Subscription subscription = subscriptions.getFirst();
79+
Subscription subscription = optionalSubscription.get();
7780
return SubscriptionResponseDto.builder()
7881
.isSubscriptionActive(true)
82+
.paymentProvider(subscription.getPaymentProvider())
7983
.startDate(subscription.getCreatedAt())
80-
.endDate(subscription.getEndTime())
8184
.build();
8285
}
8386
}

0 commit comments

Comments
 (0)