diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2023-04-04 15:50:58 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-04 15:50:58 -0700 |
commit | 0f092e6aac198bd7244f8011a61bb22ab56174cf (patch) | |
tree | ca2b6e70b5c1948ddbe09b0e077000308b1ca836 | |
parent | 77e98161d8742548ef4082054304bad21f7324ac (diff) | |
parent | 9423dad9bc56674dd864897c9c0265ca8cea6670 (diff) | |
download | trackermap-server-0f092e6aac198bd7244f8011a61bb22ab56174cf.tar.gz trackermap-server-0f092e6aac198bd7244f8011a61bb22ab56174cf.tar.bz2 trackermap-server-0f092e6aac198bd7244f8011a61bb22ab56174cf.zip |
Merge pull request #5061 from rovertzxd/feature/delete-positions-endpoint
Add delete API endpoint for Positions
-rw-r--r-- | src/main/java/org/traccar/api/resource/PositionResource.java | 17 | ||||
-rw-r--r-- | swagger.json | 48 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/main/java/org/traccar/api/resource/PositionResource.java b/src/main/java/org/traccar/api/resource/PositionResource.java index 042dd1e23..37696a620 100644 --- a/src/main/java/org/traccar/api/resource/PositionResource.java +++ b/src/main/java/org/traccar/api/resource/PositionResource.java @@ -31,6 +31,7 @@ import org.traccar.storage.query.Request; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; +import javax.ws.rs.DELETE; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; @@ -43,6 +44,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.LinkedList; @Path("positions") @Produces(MediaType.APPLICATION_JSON) @@ -86,6 +88,21 @@ public class PositionResource extends BaseResource { } } + @DELETE + public Response remove( + @QueryParam("deviceId") long deviceId, + @QueryParam("from") Date from, @QueryParam("to") Date to) throws StorageException { + permissionsService.checkPermission(Device.class, getUserId(), deviceId); + permissionsService.checkRestriction(getUserId(), UserRestrictions::getReadonly); + + var conditions = new LinkedList<Condition>(); + conditions.add(new Condition.Equals("deviceId", deviceId)); + conditions.add(new Condition.Between("fixTime", "from", from, "to", to)); + storage.removeObject(Position.class, new Request(Condition.merge(conditions))); + + return Response.status(Response.Status.NO_CONTENT).build(); + } + @Path("kml") @GET @Produces("application/vnd.google-earth.kml+xml") diff --git a/swagger.json b/swagger.json index cbdc9effd..39bd6bd61 100644 --- a/swagger.json +++ b/swagger.json @@ -873,6 +873,54 @@ } } } + }, + "delete": { + "summary": "Deletes all the Positions of a device in the time span specified", + "description": "", + "tags": [ + "Positions" + ], + "parameters": [ + { + "name": "deviceId", + "in": "query", + "description": "", + "schema": { + "type": "integer" + }, + "required": true + }, + { + "name": "from", + "in": "query", + "description": "in IS0 8601 format. eg. `1963-11-22T18:30:00Z`", + "schema": { + "type": "string", + "format": "date-time" + }, + "required": true + }, + { + "name": "to", + "in": "query", + "description": "in IS0 8601 format. eg. `1963-11-22T18:30:00Z`", + "schema": { + "type": "string", + "format": "date-time" + }, + "required": true + } + ], + "responses": { + "204": { + "description": "No Content", + "content": {} + }, + "400": { + "description": "Bad Request", + "content": {} + } + } } }, "/server": { |