source: src/main/java/mk/ukim/finki/wp/db/service/UserSubscriptionService.java

Last change on this file was 5ea00d7, checked in by Malek Alavi <malekalavi7@…>, 6 days ago

Initial project upload

  • Property mode set to 100644
File size: 2.9 KB
Line 
1package mk.ukim.finki.wp.db.service;
2
3import jakarta.transaction.Transactional;
4import lombok.RequiredArgsConstructor;
5import mk.ukim.finki.wp.db.entity.Payment;
6import mk.ukim.finki.wp.db.entity.SubscriptionPlan;
7import mk.ukim.finki.wp.db.entity.UserSubscription;
8import mk.ukim.finki.wp.db.entity.user.User;
9import mk.ukim.finki.wp.db.entity.user.UserEntity;
10import mk.ukim.finki.wp.db.repository.*;
11import org.springframework.scheduling.annotation.Scheduled;
12import org.springframework.stereotype.Service;
13
14import java.time.LocalDate;
15import java.util.List;
16import java.util.Optional;
17
18@Service
19@RequiredArgsConstructor
20public class UserSubscriptionService {
21
22 private final UserSubscriptionRepository userSubscriptionRepository;
23 private final UserEntityRepository userEntityRepository;
24 private final UserRepository userRepository;
25 private final SubscriptionPlanRepository subscriptionPlanRepository;
26 private final PaymentRepository paymentRepository;
27
28 public boolean hasUserSubscription(String email) {
29 UserEntity userEntity = userEntityRepository.findByEmail(email).get();
30 User user = userRepository.findById(userEntity.getId()).get();
31 Optional<UserSubscription> optionalUserSubscription = userSubscriptionRepository.findByUserAndStatus(user, "ACTIVE");
32
33 return optionalUserSubscription.isPresent();
34 }
35
36 public void addUserSubscription(String email, Integer subscriptionPlanId) {
37 UserEntity userEntity = userEntityRepository.findByEmail(email).get();
38 User user = userRepository.findById(userEntity.getId()).get();
39 SubscriptionPlan subscriptionPlan = subscriptionPlanRepository.findById(subscriptionPlanId).get();
40
41 UserSubscription userSubscription = new UserSubscription();
42 userSubscription.setUser(user);
43 userSubscription.setPlan(subscriptionPlan);
44 userSubscription.setStartDate(LocalDate.now());
45 userSubscription.setEndDate(LocalDate.now().plusMonths(subscriptionPlan.getDurationMonths()));
46 userSubscription.setStatus("ACTIVE");
47
48 userSubscriptionRepository.save(userSubscription);
49
50 Payment payment = new Payment();
51 payment.setUser(user);
52 payment.setSubscription(userSubscription);
53 payment.setAmount(subscriptionPlan.getPrice());
54
55 paymentRepository.save(payment);
56 }
57
58 @Scheduled(cron = "0 0 0 * * *")
59 @Transactional
60 public void checkExpiredSubscriptions() {
61 LocalDate today = LocalDate.now();
62 List<UserSubscription> expiredSubscriptions = userSubscriptionRepository
63 .findByEndDateBeforeAndStatusNot(today, "EXPIRED");
64
65 for (UserSubscription subscription : expiredSubscriptions) {
66 subscription.setStatus("EXPIRED");
67 userSubscriptionRepository.save(subscription);
68 System.out.println("Subscription " + subscription.getSubscriptionId() + " expired.");
69 }
70
71 System.out.println("Checked subscriptions on: " + today);
72 }
73}
Note: See TracBrowser for help on using the repository browser.