1 package de.dlr.shepard.data.timeseries.services;
2
3 import de.dlr.shepard.auth.permission.services.PermissionsService;
4 import de.dlr.shepard.auth.users.entities.User;
5 import de.dlr.shepard.auth.users.services.UserService;
6 import de.dlr.shepard.common.exceptions.InvalidAuthException;
7 import de.dlr.shepard.common.exceptions.InvalidPathException;
8 import de.dlr.shepard.common.util.DateHelper;
9 import de.dlr.shepard.common.util.PermissionType;
10 import de.dlr.shepard.common.util.QueryParamHelper;
11 import de.dlr.shepard.data.AbstractContainerService;
12 import de.dlr.shepard.data.timeseries.daos.TimeseriesContainerDAO;
13 import de.dlr.shepard.data.timeseries.io.TimeseriesContainerIO;
14 import de.dlr.shepard.data.timeseries.model.TimeseriesContainer;
15 import io.quarkus.cache.Cache;
16 import io.quarkus.cache.CacheName;
17 import io.quarkus.cache.CacheResult;
18 import io.quarkus.logging.Log;
19 import jakarta.enterprise.context.RequestScoped;
20 import jakarta.inject.Inject;
21 import java.util.List;
22 import java.util.Optional;
23
24 @RequestScoped
25 public class TimeseriesContainerService extends AbstractContainerService<TimeseriesContainer, TimeseriesContainerIO> {
26
27 @Inject
28 TimeseriesContainerDAO timeseriesContainerDAO;
29
30 @Inject
31 UserService userService;
32
33 @Inject
34 DateHelper dateHelper;
35
36 @Inject
37 @CacheName("container-cache")
38 Cache cache;
39
40 @Inject
41 PermissionsService permissionsService;
42
43 @Inject
44 TimeseriesService timeseriesService;
45
46 public List<TimeseriesContainer> getContainers() {
47 return timeseriesContainerDAO.findAll().stream().filter(c -> !c.isDeleted()).toList();
48 }
49
50 @Override
51 public List<TimeseriesContainer> getAllContainers(QueryParamHelper params) {
52 User user = userService.getCurrentUser();
53 return timeseriesContainerDAO.findAllTimeseriesContainers(params, user.getUsername());
54 }
55
56
57
58
59
60
61
62
63 @Override
64 public TimeseriesContainer getContainer(long timeseriesContainerId) {
65 Optional<TimeseriesContainer> containerOptional = getContainerOptional(timeseriesContainerId);
66 if (containerOptional.isEmpty()) {
67 String errorMsg = String.format(
68 "ID ERROR - Timeseries Container with id %s is null or deleted",
69 timeseriesContainerId
70 );
71 Log.errorf(errorMsg);
72 throw new InvalidPathException(errorMsg);
73 }
74 assertIsAllowedToReadContainer(timeseriesContainerId);
75 return containerOptional.get();
76 }
77
78 @CacheResult(cacheName = "container-cache")
79 Optional<TimeseriesContainer> getContainerOptional(long timeseriesContainerId) {
80 TimeseriesContainer timeseriesContainer = timeseriesContainerDAO.findByNeo4jId(timeseriesContainerId);
81 if (timeseriesContainer == null || timeseriesContainer.isDeleted()) {
82 return Optional.empty();
83 }
84 return Optional.of(timeseriesContainer);
85 }
86
87
88
89
90
91
92
93
94 @Override
95 public TimeseriesContainer createContainer(TimeseriesContainerIO timeseriesContainerIO) {
96 User user = userService.getCurrentUser();
97 var toCreate = new TimeseriesContainer();
98 toCreate.setCreatedAt(dateHelper.getDate());
99 toCreate.setCreatedBy(user);
100 toCreate.setName(timeseriesContainerIO.getName());
101
102 var created = timeseriesContainerDAO.createOrUpdate(toCreate);
103 permissionsService.createPermissions(created, user, PermissionType.Private);
104 return created;
105 }
106
107
108
109
110
111
112
113 @Override
114 public void deleteContainer(long timeSeriesContainerId) {
115 User user = userService.getCurrentUser();
116 TimeseriesContainer timeseriesContainer = this.getContainer(timeSeriesContainerId);
117 timeseriesService.deleteTimeseriesByContainerId(timeSeriesContainerId);
118
119 timeseriesContainer.setDeleted(true);
120 timeseriesContainer.setUpdatedAt(dateHelper.getDate());
121 timeseriesContainer.setUpdatedBy(user);
122 timeseriesContainerDAO.createOrUpdate(timeseriesContainer);
123 cache.invalidate(timeSeriesContainerId).await().indefinitely();
124 }
125 }