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 =
68 "ID ERROR - Timeseries Container with id %s is null or deleted".formatted(timeseriesContainerId);
69 Log.errorf(errorMsg);
70 throw new InvalidPathException(errorMsg);
71 }
72 assertIsAllowedToReadContainer(timeseriesContainerId);
73 return containerOptional.get();
74 }
75
76 @CacheResult(cacheName = "container-cache")
77 Optional<TimeseriesContainer> getContainerOptional(long timeseriesContainerId) {
78 TimeseriesContainer timeseriesContainer = timeseriesContainerDAO.findByNeo4jId(timeseriesContainerId);
79 if (timeseriesContainer == null || timeseriesContainer.isDeleted()) {
80 return Optional.empty();
81 }
82 return Optional.of(timeseriesContainer);
83 }
84
85
86
87
88
89
90
91
92 @Override
93 public TimeseriesContainer createContainer(TimeseriesContainerIO timeseriesContainerIO) {
94 User user = userService.getCurrentUser();
95 var toCreate = new TimeseriesContainer();
96 toCreate.setCreatedAt(dateHelper.getDate());
97 toCreate.setCreatedBy(user);
98 toCreate.setName(timeseriesContainerIO.getName());
99
100 var created = timeseriesContainerDAO.createOrUpdate(toCreate);
101 permissionsService.createPermissions(created, user, PermissionType.Private);
102 return created;
103 }
104
105
106
107
108
109
110
111 @Override
112 public void deleteContainer(long timeSeriesContainerId) {
113 User user = userService.getCurrentUser();
114 TimeseriesContainer timeseriesContainer = this.getContainer(timeSeriesContainerId);
115 timeseriesService.deleteTimeseriesByContainerId(timeSeriesContainerId);
116
117 timeseriesContainer.setDeleted(true);
118 timeseriesContainer.setUpdatedAt(dateHelper.getDate());
119 timeseriesContainer.setUpdatedBy(user);
120 timeseriesContainerDAO.createOrUpdate(timeseriesContainer);
121 cache.invalidate(timeSeriesContainerId).await().indefinitely();
122 }
123 }