diff --git a/pom.xml b/pom.xml
index 2f18f1e..928e019 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,18 +18,10 @@
4.11.1
2.16.1
2.17.2
+ 5.10.2
+ 1.6.0.Final
-
- org.springframework.data
- spring-data-redis
- 3.2.5
-
-
- redis.clients
- jedis
- 5.1.2
-
com.github.pengrad
java-telegram-bot-api
@@ -51,15 +43,15 @@
${jackson-databind.version}
- org.junit-pioneer
- junit-pioneer
- 2.2.0
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit-jupiter-api.version}
test
org.cache2k
cache2k-base-bom
- 1.6.0.Final
+ ${cache2k-base-bom.version}
pom
@@ -70,7 +62,6 @@
-
maven-assembly-plugin
3.7.1
diff --git a/src/main/java/org/example/configs/MongoDBConfig.java b/src/main/java/org/example/configs/MongoDBConfig.java
index 45bd7d8..edd78e3 100644
--- a/src/main/java/org/example/configs/MongoDBConfig.java
+++ b/src/main/java/org/example/configs/MongoDBConfig.java
@@ -1,29 +1,29 @@
package org.example.configs;
+
import com.mongodb.ConnectionString;
+import com.mongodb.client.ChangeStreamIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
-import com.mongodb.client.model.changestream.FullDocument;
-import com.mongodb.client.model.changestream.OperationType;
-import org.example.model.QuizQuestions;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.model.Aggregates;
+import com.mongodb.client.model.Filters;
+import org.bson.Document;
+import org.bson.conversions.Bson;
import org.example.services.QuizService;
import org.jetbrains.annotations.NotNull;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
-import org.springframework.data.mongodb.core.ChangeStreamOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.aggregation.Aggregation;
-import org.springframework.data.mongodb.core.messaging.ChangeStreamRequest;
-import org.springframework.data.mongodb.core.messaging.DefaultMessageListenerContainer;
-import org.springframework.data.mongodb.core.messaging.Subscription;
-import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
+import java.util.Arrays;
+import java.util.List;
+
@Configuration
@ComponentScan(basePackages = "org.example")
@PropertySource("classpath:application.properties")
@@ -50,29 +50,29 @@ public MongoClient mongoClient() {
return MongoClients.create(new ConnectionString(connectionUri));
}
- public MongoClient reconnectToDB() {
- MongoClient currentClient = mongoClient();
- currentClient.close();
- return MongoClients.create(new ConnectionString(connectionUri));
- }
-
@Bean
- public DefaultMessageListenerContainer messageListenerContainer(MongoTemplate mongoTemplate, QuizService quizService) {
- DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(mongoTemplate);
- container.start();
- ChangeStreamOptions changeStreamOptions = ChangeStreamOptions.builder()
- .filter(Aggregation.newAggregation(Aggregation.match(Criteria.where("operationType").is(OperationType.INSERT.getValue()))))
- .fullDocumentLookup(FullDocument.UPDATE_LOOKUP)
- .build();
- ChangeStreamRequest.ChangeStreamRequestOptions options = new ChangeStreamRequest.ChangeStreamRequestOptions(databaseName, "quizQuestions", changeStreamOptions);
+ public ChangeStreamIterable runEventListener(MongoTemplate mongoTemplate, QuizService quizService) {
+ MongoCollection collection = mongoTemplate.getCollection("quizQuestions");
+ List pipeline = List.of(
+ Aggregates.match(Filters.in("operationType", Arrays.asList("insert", "delete"))));
+ ChangeStreamIterable changeStream = collection.watch(pipeline);
+ changeStream.forEach(event -> {
+ String operationType = event.getOperationTypeString();
+ if (operationType == null) {
+ return;
+ }
- Subscription subscription = container.register(new ChangeStreamRequest<>(message -> {
- QuizQuestions quizQuestions = message.getBody();
- if (quizQuestions != null) {
- String topic = quizQuestions.getTopicName();
- quizService.addTopic(topic);
+ switch (operationType) {
+ case "insert" -> {
+ Document document = event.getFullDocument();
+ if (document != null && document.containsKey("topicName")) {
+ quizService.addTopic(document.getString("topicName"));
+ }
+ }
+ case "delete" -> quizService.updateTopics();
}
- }, options), QuizQuestions.class);
- return container;
+
+ });
+ return changeStream;
}
}
diff --git a/src/main/java/org/example/services/QuizService.java b/src/main/java/org/example/services/QuizService.java
index 2bbfc46..445b39a 100644
--- a/src/main/java/org/example/services/QuizService.java
+++ b/src/main/java/org/example/services/QuizService.java
@@ -48,4 +48,8 @@ public QuizQuestions findRandomQuestionsByTopicName(String topicName, int count)
return quizRepo.findRandomQuestionsByTopicName(topicName, count);
}
+ public void updateTopics(){
+ List topics = Arrays.stream(quizRepo.findAllTopic().split(",")).toList();
+ topicsCache.put("topics", topics);
+ }
}