View Javadoc
1   package de.dlr.shepard.endpoints;
2   
3   import java.io.IOException;
4   import java.io.InputStream;
5   
6   import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
7   
8   import de.dlr.shepard.influxDB.FillOption;
9   import de.dlr.shepard.influxDB.SingleValuedUnaryFunction;
10  import de.dlr.shepard.influxDB.Timeseries;
11  import de.dlr.shepard.influxDB.TimeseriesPayload;
12  import de.dlr.shepard.neo4Core.io.PermissionsIO;
13  import de.dlr.shepard.neo4Core.io.RolesIO;
14  import de.dlr.shepard.neo4Core.io.TimeseriesContainerIO;
15  import de.dlr.shepard.neo4Core.orderBy.ContainerAttributes;
16  import de.dlr.shepard.util.Constants;
17  import io.swagger.v3.oas.annotations.Operation;
18  import io.swagger.v3.oas.annotations.Parameter;
19  import io.swagger.v3.oas.annotations.media.ArraySchema;
20  import io.swagger.v3.oas.annotations.media.Content;
21  import io.swagger.v3.oas.annotations.media.Schema;
22  import io.swagger.v3.oas.annotations.parameters.RequestBody;
23  import io.swagger.v3.oas.annotations.responses.ApiResponse;
24  import io.swagger.v3.oas.annotations.tags.Tag;
25  import jakarta.validation.Valid;
26  import jakarta.ws.rs.core.MediaType;
27  import jakarta.ws.rs.core.Response;
28  
29  public interface TimeseriesRest {
30  
31  	@Tag(name = Constants.TIMESERIES)
32  	@Operation(description = "Get all timeseries containers")
33  	@ApiResponse(description = "ok", responseCode = "200", content = @Content(array = @ArraySchema(schema = @Schema(implementation = TimeseriesContainerIO.class))))
34  	@ApiResponse(description = "not found", responseCode = "404")
35  	Response getAllTimeseriesContainers(String name, Integer page, Integer size, ContainerAttributes orderAttribute,
36  			Boolean orderDesc);
37  
38  	@Tag(name = Constants.TIMESERIES)
39  	@Operation(description = "Get timeseries container")
40  	@ApiResponse(description = "ok", responseCode = "200", content = @Content(schema = @Schema(implementation = TimeseriesContainerIO.class)))
41  	@ApiResponse(description = "not found", responseCode = "404")
42  	Response getTimeseriesContainer(long timeseriesContainerId);
43  
44  	@Tag(name = Constants.TIMESERIES)
45  	@Operation(description = "Create a new timeseries container")
46  	@ApiResponse(description = "created", responseCode = "201", content = @Content(schema = @Schema(implementation = TimeseriesContainerIO.class)))
47  	@ApiResponse(description = "not found", responseCode = "404")
48  	Response createTimeseriesContainer(
49  			@RequestBody(required = true, content = @Content(schema = @Schema(implementation = TimeseriesContainerIO.class))) @Valid TimeseriesContainerIO timeseriesContainer);
50  
51  	@Tag(name = Constants.TIMESERIES)
52  	@Operation(description = "Delete timeseries container")
53  	@ApiResponse(description = "deleted", responseCode = "204")
54  	@ApiResponse(description = "not found", responseCode = "404")
55  	Response deleteTimeseriesContainer(long timeseriesContainerId);
56  
57  	@Tag(name = Constants.TIMESERIES)
58  	@Operation(description = "Upload timeseries to container")
59  	@ApiResponse(description = "created", responseCode = "201", content = @Content(schema = @Schema(implementation = Timeseries.class)))
60  	@ApiResponse(description = "not found", responseCode = "404")
61  	Response createTimeseries(long timeseriesId,
62  			@RequestBody(required = true, content = @Content(schema = @Schema(implementation = TimeseriesPayload.class))) @Valid TimeseriesPayload payload);
63  
64  	@Tag(name = Constants.TIMESERIES)
65  	@Operation(description = "Get timeseries available")
66  	@ApiResponse(description = "ok", responseCode = "200", content = @Content(array = @ArraySchema(schema = @Schema(implementation = Timeseries.class))))
67  	Response getTimeseriesAvailable(long timeseriesContainerId);
68  
69  	@Tag(name = Constants.TIMESERIES)
70  	@Operation(description = "Get timeseries payload")
71  	@ApiResponse(description = "ok", responseCode = "200", content = @Content(schema = @Schema(implementation = TimeseriesPayload.class)))
72  	@ApiResponse(description = "not found", responseCode = "404")
73  	Response getTimeseries(long timeseriesContainerId, String measurement, String location, String device,
74  			String symbolicName, String field, long start, long end, SingleValuedUnaryFunction function, Long groupBy,
75  			FillOption fillOption);
76  
77  	@Tag(name = Constants.TIMESERIES)
78  	@Operation(description = "Export timeseries payload")
79  	@ApiResponse(description = "ok", responseCode = "200", content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM, schema = @Schema(type = "string", format = "binary")))
80  	@ApiResponse(description = "not found", responseCode = "404")
81  	Response exportTimeseries(long timeseriesContainerId, String measurement, String location, String device,
82  			String symbolicName, String field, long start, long end, SingleValuedUnaryFunction function, Long groupBy,
83  			FillOption fillOption) throws IOException;
84  
85  	@Tag(name = Constants.TIMESERIES)
86  	@Operation(description = "Import timeseries payload")
87  	@ApiResponse(description = "ok", responseCode = "200")
88  	@ApiResponse(description = "not found", responseCode = "404")
89  	Response importTimeseries(long timeseriesContainerId,
90  			@Parameter(required = true, schema = @Schema(type = "string", format = "binary", description = "Timeseries as CSV")) InputStream fileInputStream,
91  			@Parameter(hidden = true) FormDataContentDisposition fileMetaData) throws IOException;
92  
93  	@Tag(name = Constants.TIMESERIES)
94  	@Operation(description = "Get permissions")
95  	@ApiResponse(description = "ok", responseCode = "200", content = @Content(schema = @Schema(implementation = PermissionsIO.class)))
96  	@ApiResponse(description = "not found", responseCode = "404")
97  	Response getTimeseriesPermissions(long timeseriesContainerId);
98  
99  	@Tag(name = Constants.TIMESERIES)
100 	@Operation(description = "Edit permissions")
101 	@ApiResponse(description = "ok", responseCode = "200", content = @Content(schema = @Schema(implementation = PermissionsIO.class)))
102 	@ApiResponse(description = "not found", responseCode = "404")
103 	Response editTimeseriesPermissions(long timeseriesContainerId,
104 			@RequestBody(required = true, content = @Content(schema = @Schema(implementation = PermissionsIO.class))) @Valid PermissionsIO permissions);
105 
106 	@Tag(name = Constants.TIMESERIES)
107 	@Operation(description = "Get roles")
108 	@ApiResponse(description = "ok", responseCode = "200", content = @Content(schema = @Schema(implementation = RolesIO.class)))
109 	@ApiResponse(description = "not found", responseCode = "404")
110 	Response getTimeseriesRoles(long timeseriesContainerId);
111 }