diff --git a/pom.xml b/pom.xml
index 28842f2..b5def9a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,14 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-cache
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+
org.apache.tika
tika-core
diff --git a/src/main/java/org/example/projektarendehantering/application/service/EmployeeService.java b/src/main/java/org/example/projektarendehantering/application/service/EmployeeService.java
index 8a1cdb0..af693ff 100644
--- a/src/main/java/org/example/projektarendehantering/application/service/EmployeeService.java
+++ b/src/main/java/org/example/projektarendehantering/application/service/EmployeeService.java
@@ -10,6 +10,8 @@
import org.example.projektarendehantering.presentation.dto.EmployeeCreateDTO;
import org.example.projektarendehantering.presentation.dto.EmployeeDTO;
import org.example.projektarendehantering.presentation.dto.EmployeeUpdateDTO;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import lombok.RequiredArgsConstructor;
@@ -28,6 +30,7 @@ public class EmployeeService {
private final EmployeeRepository employeeRepository;
private final EmployeeMapper employeeMapper;
+ @CacheEvict(value = {"employees-by-role", "all-employees"}, allEntries = true)
@Transactional
public EmployeeDTO createEmployee(Actor actor, EmployeeCreateDTO dto) {
requireCanManageEmployees(actor);
@@ -50,6 +53,7 @@ public EmployeeDTO createEmployee(Actor actor, EmployeeCreateDTO dto) {
return employeeMapper.toDTO(employeeRepository.save(entity));
}
+ @CacheEvict(value = {"employees-by-role", "all-employees"}, allEntries = true)
@Transactional
public EmployeeDTO updateEmployee(Actor actor, UUID id, EmployeeUpdateDTO dto) {
requireCanManageEmployees(actor);
@@ -66,6 +70,7 @@ public EmployeeDTO updateEmployee(Actor actor, UUID id, EmployeeUpdateDTO dto) {
return employeeMapper.toDTO(employeeRepository.save(entity));
}
+ @CacheEvict(value = {"employees-by-role", "all-employees"}, allEntries = true)
@Transactional
public void deleteEmployee(Actor actor, UUID id) {
requireCanManageEmployees(actor);
@@ -80,6 +85,7 @@ public Optional getEmployee(Actor actor, UUID id) {
return employeeRepository.findById(id).map(employeeMapper::toDTO);
}
+ @Cacheable("all-employees")
@Transactional(readOnly = true)
public List getAllEmployees(Actor actor) {
requireCanManageEmployees(actor);
@@ -88,6 +94,7 @@ public List getAllEmployees(Actor actor) {
.collect(Collectors.toList());
}
+ @Cacheable(value = "employees-by-role", key = "#role")
@Transactional(readOnly = true)
public List findByRole(Role role) {
return employeeRepository.findAllByRole(role).stream()
diff --git a/src/main/java/org/example/projektarendehantering/infrastructure/config/CacheConfig.java b/src/main/java/org/example/projektarendehantering/infrastructure/config/CacheConfig.java
new file mode 100644
index 0000000..c56b402
--- /dev/null
+++ b/src/main/java/org/example/projektarendehantering/infrastructure/config/CacheConfig.java
@@ -0,0 +1,23 @@
+package org.example.projektarendehantering.infrastructure.config;
+
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.caffeine.CaffeineCacheManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+@EnableCaching
+public class CacheConfig {
+
+ @Bean
+ public CaffeineCacheManager cacheManager() {
+ CaffeineCacheManager manager = new CaffeineCacheManager("employees-by-role", "all-employees");
+ manager.setCaffeine(Caffeine.newBuilder()
+ .maximumSize(500)
+ .expireAfterWrite(10, TimeUnit.MINUTES));
+ return manager;
+ }
+}