aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/service/PatreonService.java
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2024-07-19 13:25:06 +0300
committerGravatar Vitaly Takmazov2024-07-20 22:58:16 +0300
commite14d4612d313b7424b2163ba247843655c4dfca1 (patch)
treee9cf4ce93be54f77fe500019325e3d3463bab2f6 /src/main/java/com/juick/service/PatreonService.java
parent5c71aa619e5e64babaf52aec7c01204ed02ffe69 (diff)
Update premium status on login
Diffstat (limited to 'src/main/java/com/juick/service/PatreonService.java')
-rw-r--r--src/main/java/com/juick/service/PatreonService.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/java/com/juick/service/PatreonService.java b/src/main/java/com/juick/service/PatreonService.java
index 08a828db..8f21f389 100644
--- a/src/main/java/com/juick/service/PatreonService.java
+++ b/src/main/java/com/juick/service/PatreonService.java
@@ -20,6 +20,8 @@ package com.juick.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.OkHttpClient;
import okhttp3.Request;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@@ -28,12 +30,17 @@ import org.springframework.web.util.UriComponentsBuilder;
import jakarta.inject.Inject;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.stream.StreamSupport;
@Component
public class PatreonService {
+ private static final Logger logger = LoggerFactory.getLogger("Patreon");
+
+ @Inject
+ private UserService userService;
@Inject
private OkHttpClient httpClient;
@Inject
@@ -89,4 +96,30 @@ public class PatreonService {
}
return List.of();
}
+
+ public void updateStatus(List<String> updatedEmails) {
+ var campainsResponse = fetchCampaigns();
+ List<String> activeEmails = new ArrayList<>();
+ campainsResponse.forEach(campaign -> {
+ var pledgesResponse = fetchPledges(campaign);
+ pledgesResponse.forEach(pledge -> {
+ logger.debug("Pledge email: {}", pledge);
+ activeEmails.add(pledge);
+ });
+ });
+ activeEmails.forEach(email -> {
+ var user = userService.getUserByEmail(email);
+ if (!user.isAnonymous()) {
+ userService.setPremium(user.getUid(), true);
+ }
+ });
+ updatedEmails.stream().filter(email -> !activeEmails.contains(email))
+ .forEach(deleted -> {
+ var user = userService.getUserByEmail(deleted);
+ if (!user.isAnonymous() && user.isPremium()) {
+ logger.debug("User is not a patron anymore: {}", deleted);
+ userService.setPremium(user.getUid(), false);
+ }
+ });
+ }
}