Skip to content

Commit bca0388

Browse files
Merge pull request #268 from InseeFr/devMetadataCache
feat: Stockage des métadonnées BPM
2 parents f0d5b13 + f8433bf commit bca0388

36 files changed

+812
-204
lines changed

pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@
5757
<groupId>org.springframework.boot</groupId>
5858
<artifactId>spring-boot-starter-webflux</artifactId>
5959
</dependency>
60+
<dependency>
61+
<groupId>org.springframework.boot</groupId>
62+
<artifactId>spring-boot-starter-cache</artifactId>
63+
</dependency>
6064

6165
<dependency>
6266
<groupId>org.springframework.boot</groupId>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.insee.genesis.configuration;
2+
3+
import org.springframework.cache.CacheManager;
4+
import org.springframework.cache.annotation.EnableCaching;
5+
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.scheduling.annotation.EnableScheduling;
9+
10+
@Configuration
11+
@EnableCaching
12+
@EnableScheduling
13+
public class CacheConfiguration {
14+
@Bean
15+
public CacheManager cacheManager(){
16+
return new ConcurrentMapCacheManager("variableTypes","metadatas");
17+
}
18+
}

src/main/java/fr/insee/genesis/configuration/Config.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
import lombok.Getter;
44
import org.springframework.beans.factory.annotation.Value;
5-
import org.springframework.cache.annotation.EnableCaching;
65
import org.springframework.context.annotation.Configuration;
76

87
import java.nio.file.Path;
98

109
@Configuration
1110
@Getter
12-
@EnableCaching
1311
public class Config {
1412

1513
/******************************************************/
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package fr.insee.genesis.controller.rest;
2+
3+
import fr.insee.bpm.metadata.model.MetadataModel;
4+
import fr.insee.genesis.domain.model.surveyunit.Mode;
5+
import fr.insee.genesis.domain.ports.api.QuestionnaireMetadataApiPort;
6+
import fr.insee.genesis.exceptions.GenesisException;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import lombok.AllArgsConstructor;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.security.access.prepost.PreAuthorize;
11+
import org.springframework.stereotype.Controller;
12+
import org.springframework.web.bind.annotation.DeleteMapping;
13+
import org.springframework.web.bind.annotation.GetMapping;
14+
import org.springframework.web.bind.annotation.PostMapping;
15+
import org.springframework.web.bind.annotation.RequestBody;
16+
import org.springframework.web.bind.annotation.RequestMapping;
17+
import org.springframework.web.bind.annotation.RequestParam;
18+
19+
@Controller
20+
@RequestMapping(path = "/questionnaire-metadata")
21+
@AllArgsConstructor
22+
public class QuestionnaireMetadataController {
23+
24+
private final QuestionnaireMetadataApiPort questionnaireMetadataApiPort;
25+
26+
@Operation(summary = "Get questionnaire metadata from database")
27+
@GetMapping("")
28+
@PreAuthorize("hasRole('USER_KRAFTWERK')")
29+
public ResponseEntity<Object> getMetadata(
30+
@RequestParam("questionnaireId") String questionnaireId,
31+
@RequestParam("mode") Mode mode
32+
){
33+
try {
34+
return ResponseEntity.ok().body(questionnaireMetadataApiPort.find(questionnaireId, mode));
35+
} catch (GenesisException e) {
36+
return ResponseEntity.status(e.getStatus()).body(e.getMessage());
37+
}
38+
}
39+
40+
@Operation(summary = "Save questionnaire metadata into database")
41+
@PostMapping("")
42+
@PreAuthorize("hasRole('USER_KRAFTWERK')")
43+
public ResponseEntity<Object> saveMetadata(
44+
@RequestParam("questionnaireId") String questionnaireId,
45+
@RequestParam("mode") Mode mode,
46+
@RequestBody MetadataModel body
47+
) {
48+
questionnaireMetadataApiPort.save(questionnaireId, mode, body);
49+
return ResponseEntity.ok().build();
50+
}
51+
52+
@Operation(summary = "Removes questionnaire metadata from database")
53+
@DeleteMapping("")
54+
@PreAuthorize("hasRole('ADMIN')")
55+
public ResponseEntity<Object> deleteMetadata(
56+
@RequestParam("questionnaireId") String questionnaireId,
57+
@RequestParam("mode") Mode mode
58+
){
59+
questionnaireMetadataApiPort.remove(questionnaireId, mode);
60+
return ResponseEntity.ok().build();
61+
}
62+
}

src/main/java/fr/insee/genesis/controller/rest/responses/ResponseController.java

Lines changed: 132 additions & 89 deletions
Large diffs are not rendered by default.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package fr.insee.genesis.domain.model.metadata;
2+
3+
import fr.insee.bpm.metadata.model.MetadataModel;
4+
import fr.insee.genesis.domain.model.surveyunit.Mode;
5+
6+
public record QuestionnaireMetadataModel (
7+
String questionnaireId,
8+
Mode mode,
9+
MetadataModel metadataModel
10+
){}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package fr.insee.genesis.domain.ports.api;
2+
3+
import fr.insee.bpm.metadata.model.MetadataModel;
4+
import fr.insee.genesis.domain.model.surveyunit.Mode;
5+
import fr.insee.genesis.exceptions.GenesisError;
6+
import fr.insee.genesis.exceptions.GenesisException;
7+
import fr.insee.genesis.infrastructure.utils.FileUtils;
8+
9+
import java.util.List;
10+
11+
public interface QuestionnaireMetadataApiPort {
12+
MetadataModel find(String questionnaireId, Mode mode) throws GenesisException;
13+
MetadataModel loadAndSaveIfNotExists(String campaignName, String questionnaireId, Mode mode, FileUtils fileUtils,
14+
List<GenesisError> errors) throws GenesisException;
15+
void remove(String questionnaireId, Mode mode);
16+
17+
void save(String questionnaireId, Mode mode, MetadataModel metadataModel);
18+
}

src/main/java/fr/insee/genesis/domain/ports/api/SurveyUnitApiPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public interface SurveyUnitApiPort {
3131
List<List<SurveyUnitModel>> findLatestByIdAndByQuestionnaireIdAndModeOrdered(String questionnaireId, String mode, List<InterrogationId> interrogationIds);
3232
//========= OPTIMISATIONS PERFS (END) ==========
3333

34-
SurveyUnitDto findLatestValuesByStateByIdAndByQuestionnaireId(String interrogationId, String questionnaireId);
34+
SurveyUnitDto findLatestValuesByStateByIdAndByQuestionnaireId(String interrogationId, String questionnaireId) throws GenesisException;
3535

3636
List<SurveyUnitModel> findInterrogationIdsAndModesByQuestionnaireId(String questionnaireId);
3737

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fr.insee.genesis.domain.ports.spi;
2+
3+
public interface CacheServicePort {
4+
void cleanCache();
5+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package fr.insee.genesis.domain.ports.spi;
2+
3+
import fr.insee.genesis.domain.model.metadata.QuestionnaireMetadataModel;
4+
import fr.insee.genesis.domain.model.surveyunit.Mode;
5+
6+
import java.util.List;
7+
8+
public interface QuestionnaireMetadataPersistancePort {
9+
List<QuestionnaireMetadataModel> find(String questionnaireId, Mode mode);
10+
void save(QuestionnaireMetadataModel questionnaireMetadataModel);
11+
12+
void remove(String questionnaireId, Mode mode);
13+
}

0 commit comments

Comments
 (0)