Skip to content

Commit 166a904

Browse files
committed
[#464] added history API implementation
1 parent da2cece commit 166a904

File tree

11 files changed

+726
-8
lines changed

11 files changed

+726
-8
lines changed

app/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ SPDX-License-Identifier: Apache-2.0
112112
<artifactId>quarkus-container-image-docker</artifactId>
113113
</dependency>
114114

115+
<dependency>
116+
<groupId>io.quarkiverse.openapi.generator</groupId>
117+
<artifactId>quarkus-openapi-generator-server</artifactId>
118+
<version>3.0.0-SNAPSHOT</version>
119+
</dependency>
120+
115121
<!-- Test Dependencies -->
116122
<dependency>
117123
<groupId>io.quarkus</groupId>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package org.lfenergy.compas.scl.data.rest.v1;
2+
3+
import io.quarkus.security.Authenticated;
4+
import jakarta.enterprise.context.RequestScoped;
5+
import jakarta.inject.Inject;
6+
import jakarta.ws.rs.Path;
7+
import jakarta.ws.rs.core.MediaType;
8+
import jakarta.ws.rs.core.Response;
9+
import org.lfenergy.compas.scl.data.model.IHistoryMetaItem;
10+
import org.lfenergy.compas.scl.data.model.Version;
11+
import org.lfenergy.compas.scl.data.service.CompasSclHistoryService;
12+
import org.lfenergy.compas.scl.extensions.model.SclFileType;
13+
import org.lfenergy.compas.scl.rest.api.HistoryResource;
14+
import org.lfenergy.compas.scl.rest.api.beans.DataResourceHistory;
15+
import org.lfenergy.compas.scl.rest.api.beans.DataResourceSearch;
16+
import org.lfenergy.compas.scl.rest.api.beans.DataResourcesResult;
17+
18+
import java.time.OffsetDateTime;
19+
import java.util.List;
20+
import java.util.UUID;
21+
22+
@Authenticated
23+
@RequestScoped
24+
@Path("/api")
25+
public class CompasSclHistoryResource implements HistoryResource {
26+
27+
private final CompasSclHistoryService compasSclHistoryService;
28+
29+
@Inject
30+
public CompasSclHistoryResource(CompasSclHistoryService compasSclHistoryService) {
31+
this.compasSclHistoryService = compasSclHistoryService;
32+
}
33+
34+
@Override
35+
public DataResourcesResult searchForResources(DataResourceSearch searchQuery) {
36+
List<IHistoryMetaItem> historyItems = fetchHistoryItems(searchQuery);
37+
DataResourcesResult result = new DataResourcesResult();
38+
result.setResults(historyItems.stream().map(HistoryMapper::convertToDataResource).toList());
39+
return result;
40+
}
41+
42+
@Override
43+
public DataResourceHistory retrieveDataResourceHistory(String id) {
44+
List<IHistoryMetaItem> historyItems = compasSclHistoryService.listHistoryVersionsForResource(UUID.fromString(id));
45+
DataResourceHistory resourcesHistories = new DataResourceHistory();
46+
resourcesHistories.setVersions(historyItems.stream().map(HistoryMapper::convertToDataResourceVersion).toList());
47+
return resourcesHistories;
48+
}
49+
50+
@Override
51+
public Response retrieveDataResourceByVersion(String id, String version) {
52+
String fetchedData = compasSclHistoryService.findFileByIdAndVersion(UUID.fromString(id), new Version(version));
53+
return Response.status(Response.Status.OK).entity(fetchedData).type(MediaType.APPLICATION_XML).build();
54+
}
55+
56+
private List<IHistoryMetaItem> fetchHistoryItems(DataResourceSearch searchQuery) {
57+
String uuid = searchQuery.getUuid();
58+
59+
if (uuid != null) {
60+
return compasSclHistoryService.listHistoryVersionsForResource(UUID.fromString(uuid));
61+
}
62+
63+
SclFileType type = searchQuery.getType() != null ? SclFileType.valueOf(searchQuery.getType()) : null;
64+
String name = searchQuery.getName();
65+
String author = searchQuery.getAuthor();
66+
OffsetDateTime from = DateUtil.convertToOffsetDateTime(searchQuery.getFrom());
67+
OffsetDateTime to = DateUtil.convertToOffsetDateTime(searchQuery.getTo());
68+
69+
if (type != null || name != null || author != null || from != null || to != null) {
70+
return compasSclHistoryService.searchResourcesHistoryVersions(type, name, author, from, to);
71+
}
72+
return compasSclHistoryService.listHistory();
73+
}
74+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.lfenergy.compas.scl.data.rest.v1;
2+
3+
import org.apache.commons.lang3.ObjectUtils;
4+
5+
import java.time.OffsetDateTime;
6+
import java.time.ZoneOffset;
7+
import java.util.Date;
8+
9+
public final class DateUtil {
10+
11+
private DateUtil() {
12+
}
13+
14+
public static OffsetDateTime convertToOffsetDateTime(Date date) {
15+
return ObjectUtils.isEmpty(date) ? null : date.toInstant().atOffset(ZoneOffset.UTC);
16+
}
17+
18+
public static Date convertToDate(OffsetDateTime date) {
19+
return ObjectUtils.isEmpty(date) ? null : new Date(date.toInstant().toEpochMilli());
20+
}
21+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.lfenergy.compas.scl.data.rest.v1;
2+
3+
import org.lfenergy.compas.scl.data.model.IHistoryMetaItem;
4+
import org.lfenergy.compas.scl.rest.api.beans.DataResource;
5+
import org.lfenergy.compas.scl.rest.api.beans.DataResourceVersion;
6+
7+
import java.util.UUID;
8+
9+
public final class HistoryMapper {
10+
11+
private HistoryMapper() {
12+
}
13+
14+
public static DataResourceVersion convertToDataResourceVersion(IHistoryMetaItem item) {
15+
DataResourceVersion version = new DataResourceVersion();
16+
version.setVersion(item.getVersion());
17+
version.setAuthor(item.getAuthor());
18+
version.setName(item.getName());
19+
version.setDeleted(item.isDeleted());
20+
version.setUuid(UUID.fromString(item.getId()));
21+
version.setType(item.getType());
22+
version.setChangedAt(DateUtil.convertToDate(item.getChangedAt()));
23+
version.setComment(item.getComment());
24+
return version;
25+
}
26+
27+
public static DataResource convertToDataResource(IHistoryMetaItem item) {
28+
DataResource version = new DataResource();
29+
version.setVersion(item.getVersion());
30+
version.setAuthor(item.getAuthor());
31+
version.setName(item.getName());
32+
version.setDeleted(item.isDeleted());
33+
version.setUuid(UUID.fromString(item.getId()));
34+
version.setType(item.getType());
35+
version.setChangedAt(DateUtil.convertToDate(item.getChangedAt()));
36+
return version;
37+
}
38+
39+
}

0 commit comments

Comments
 (0)