Skip to content

Commit cd73336

Browse files
committed
Update application properties and recent changes
1 parent 79f71bd commit cd73336

18 files changed

Lines changed: 241 additions & 14 deletions

File tree

Backend/auth-service/src/main/resources/application-dev.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
1515

1616
# ===============================
1717
# = Email Service =
18-
# ===============================
19-
18+
# ==============================
2019

2120
# ===============================
2221
# = Application Name =
1.44 KB
Binary file not shown.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.teamweave.taskservice.Config;
2+
3+
import org.apache.kafka.clients.consumer.ConsumerConfig;
4+
import org.apache.kafka.common.serialization.IntegerDeserializer;
5+
import org.apache.kafka.common.serialization.StringDeserializer;
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
11+
import org.springframework.kafka.core.ConsumerFactory;
12+
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
13+
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
17+
//@Configuration
18+
public class KafkaConsumerConfig {
19+
20+
@Value("${spring.kafka.bootstrap-servers}")
21+
private String bootstrapServers;
22+
23+
@Bean
24+
public ConsumerFactory<String, Integer> consumerFactory() {
25+
Map<String, Object> config = new HashMap<>();
26+
config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
27+
config.put(ConsumerConfig.GROUP_ID_CONFIG, "task-service");
28+
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
29+
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer.class);
30+
return new DefaultKafkaConsumerFactory<>(config);
31+
}
32+
33+
@Bean
34+
public ConcurrentKafkaListenerContainerFactory<String, Integer> kafkaListenerContainerFactory() {
35+
ConcurrentKafkaListenerContainerFactory<String, Integer> factory = new ConcurrentKafkaListenerContainerFactory<>();
36+
factory.setConsumerFactory(consumerFactory());
37+
return factory;
38+
}
39+
}

Backend/task-service/src/main/java/com/teamweave/taskservice/Repo/ProjectRepo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@
1111
public interface ProjectRepo extends JpaRepository<Project, Integer> {
1212
List<Project> findByTeamId(int teamId);
1313
List<Project> findByOwnerId(int userId);
14+
Integer deleteProjectsByTeamId(int teamId);
1415
}

Backend/task-service/src/main/java/com/teamweave/taskservice/Repo/TaskRepo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ public interface TaskRepo extends JpaRepository<Task, Integer> {
3131
List<Task> findByProjectAndStatus(Project project, TaskStatus status);
3232

3333
List<Task> findTaskByCreatedByUserId(int userId);
34+
35+
Integer deleteAllByTeamId(int teamId);
3436
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.teamweave.taskservice.Service;
2+
3+
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.kafka.annotation.KafkaListener;
7+
import org.springframework.stereotype.Component;
8+
9+
@Component
10+
public class EventListener {
11+
12+
@Autowired
13+
TaskService taskService;
14+
15+
@Autowired
16+
ProjectService projectService;
17+
18+
@KafkaListener(topics = "team-events", groupId = "task-service", containerFactory = "kafkaListenerContainerFactory")
19+
public void handleTeamDeletedEvent(String payload) {
20+
if (payload == null || payload.trim().isEmpty()) {
21+
System.out.println("Received empty message, ignoring.");
22+
return;
23+
}
24+
try {
25+
Integer teamId = Integer.valueOf(payload.trim());
26+
System.out.println("Successfully parsed Team ID: " + teamId);
27+
// Add your deletion logic here
28+
System.out.println("Received team deleted event: " + teamId);
29+
ResponseEntity<String> response = projectService.deleteProjectsByTeamId(teamId);
30+
System.out.println("Project service response: " + response.getBody());
31+
String taskResponse = taskService.deleteTasksByTeamId(teamId);
32+
System.out.println("Task service response: " + taskResponse);
33+
34+
} catch (NumberFormatException e) {
35+
System.err.println("Failed to parse Team ID from payload: '" + payload + "'");
36+
// Log the error and move on, so the consumer doesn't get stuck
37+
}
38+
}
39+
40+
}

Backend/task-service/src/main/java/com/teamweave/taskservice/Service/ProjectService.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.teamweave.taskservice.Entity.TaskStatus;
88
import com.teamweave.taskservice.Repo.ProjectRepo;
99
import com.teamweave.taskservice.Repo.TaskRepo;
10+
import jakarta.transaction.Transactional;
1011
import org.springframework.beans.factory.annotation.Autowired;
1112
import org.springframework.http.ResponseEntity;
1213
import org.springframework.stereotype.Service;
@@ -173,12 +174,25 @@ private String getStatus(int progress, LocalDate startDate, LocalDate dueDate) {
173174
}
174175
}
175176

176-
177177
private int calculateProgress(List<TaskDTO> tasks) {
178178
if (tasks.isEmpty()) return 0;
179179
long completedTasks = tasks.stream().filter(task -> task.getStatus() == TaskStatus.COMPLETED).count();
180180
return (int) ((completedTasks * 100) / tasks.size());
181181
}
182+
183+
@Transactional
184+
public ResponseEntity<String> deleteProjectsByTeamId(int teamId) {
185+
try {
186+
List<Project> projects = projectRepo.findByTeamId(teamId);
187+
if (projects.isEmpty()) {
188+
return ResponseEntity.status(404).body("No projects found for the given team ID");
189+
}
190+
projectRepo.deleteProjectsByTeamId(teamId);
191+
return ResponseEntity.ok("Projects and associated tasks deleted successfully");
192+
} catch (Exception e) {
193+
return ResponseEntity.status(500).body("Error deleting projects: " + e.getMessage());
194+
}
195+
}
182196
}
183197

184198

Backend/task-service/src/main/java/com/teamweave/taskservice/Service/TaskService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.teamweave.taskservice.Entity.TaskStatus;
1111
import com.teamweave.taskservice.Repo.ProjectRepo;
1212
import com.teamweave.taskservice.Repo.TaskRepo;
13+
import jakarta.transaction.Transactional;
1314
import org.springframework.beans.factory.annotation.Autowired;
1415
import org.springframework.beans.factory.annotation.Value;
1516
import org.springframework.http.HttpEntity;
@@ -209,4 +210,15 @@ public List<TaskDTO> getTasksByOwnerId(int ownerId) {
209210
List<Task> tasks = taskRepo.findTaskByCreatedByUserId(ownerId);
210211
return toTaskDTOList(tasks);
211212
}
213+
214+
@Transactional
215+
public String deleteTasksByTeamId(Integer teamId) {
216+
int deleted = taskRepo.deleteAllByTeamId(teamId);
217+
218+
if (deleted == 0) {
219+
return "No tasks found for team ID: " + teamId;
220+
}
221+
222+
return "Deleted " + deleted + " tasks for team ID: " + teamId;
223+
}
212224
}

Backend/task-service/src/main/resources/application-dev.properties

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,8 @@ server.port=8084
2828
# ===============================
2929
user.service.url=http://localhost:8082/
3030
team.service.url=http://localhost:8083/
31-
kafka.bootstrap-servers=localhost:9092
3231

3332

34-
spring.kafka.bootstrap-servers=localhost:9092
35-
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
36-
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
33+
3734

3835

Backend/task-service/src/main/resources/application-prod.properties

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,17 @@ user.service.url=https://user-service-hu3w.onrender.com
3030
team.service.url=https://team-service-ec7y.onrender.com
3131
kafka.bootstrap-servers=localhost:9092
3232

33-
34-
spring.kafka.bootstrap-servers=localhost:9092
35-
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
36-
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
33+
# ===============================
34+
# = Kafka Setup =
35+
# ===============================
36+
spring.kafka.bootstrap-servers=${KAFKA_BOOTSTRAP_SERVERS}
37+
spring.kafka.properties.security.protocol=SASL_SSL
38+
spring.kafka.properties.sasl.mechanism=SCRAM-SHA-256
39+
spring.kafka.properties.sasl.jaas.config=${KAFKA_SASL_JAAS_CONFIG}
40+
spring.kafka.properties.ssl.truststore.location=./aiven-truststore.jks
41+
spring.kafka.properties.ssl.truststore.password=${KAFKA_SSL_TRUSTSTORE_PASSWORD}
42+
spring.kafka.properties.ssl.truststore.type=PKCS12
43+
spring.kafka.consumer.group-id=task-service-new
44+
spring.kafka.consumer.auto-offset-reset=latest
3745

3846

0 commit comments

Comments
 (0)