Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add additional bindings to filter end devices and gateways #7313

Merged
merged 2 commits into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ For details about compatibility between different releases, see the **Commitment
### Fixed

- RX2 and Class C with The Things Industries gateway protocol in dynamic channel plan regions (including `EU868`).
- Filtering the list end points for end devices and gateways using the HTTP API.

## [3.32.0] - 2024-09-05

Expand Down
2 changes: 2 additions & 0 deletions api/ttn/lorawan/v3/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -4796,6 +4796,7 @@ NsEndDeviceRegistry, the AsEndDeviceRegistry and the JsEndDeviceRegistry.
| `Create` | `POST` | `/api/v3/applications/{end_device.ids.application_ids.application_id}/devices` | `*` |
| `Get` | `GET` | `/api/v3/applications/{end_device_ids.application_ids.application_id}/devices/{end_device_ids.device_id}` | |
| `List` | `GET` | `/api/v3/applications/{application_ids.application_id}/devices` | |
| `List` | `POST` | `/api/v3/applications/{application_ids.application_id}/devices/filter` | `*` |
| `Update` | `PUT` | `/api/v3/applications/{end_device.ids.application_ids.application_id}/devices/{end_device.ids.device_id}` | `*` |
| `Delete` | `DELETE` | `/api/v3/applications/{application_ids.application_id}/devices/{device_id}` | |

Expand Down Expand Up @@ -6092,6 +6093,7 @@ gateway registrations.
| `List` | `GET` | `/api/v3/gateways` | |
| `List` | `GET` | `/api/v3/users/{collaborator.user_ids.user_id}/gateways` | |
| `List` | `GET` | `/api/v3/organizations/{collaborator.organization_ids.organization_id}/gateways` | |
| `List` | `POST` | `/api/v3/gateways/filter` | `*` |
| `Update` | `PUT` | `/api/v3/gateways/{gateway.ids.gateway_id}` | `*` |
| `Delete` | `DELETE` | `/api/v3/gateways/{gateway_id}` | |
| `Restore` | `POST` | `/api/v3/gateways/{gateway_id}/restore` | |
Expand Down
143 changes: 143 additions & 0 deletions api/ttn/lorawan/v3/api.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -1181,6 +1181,45 @@
]
}
},
"/applications/{application_ids.application_id}/devices/filter": {
"post": {
"summary": "List end devices in the given application.\nSimilar to Get, this selects the fields given by the field mask.\nMore or less fields may be returned, depending on the rights of the caller.",
"operationId": "EndDeviceRegistry_List2",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v3EndDevices"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/googlerpcStatus"
}
}
},
"parameters": [
{
"name": "application_ids.application_id",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/v3EndDeviceRegistryListBody"
}
}
],
"tags": [
"EndDeviceRegistry"
]
}
},
"/applications/{application_ids.application_id}/devices/{device_id}": {
"delete": {
"summary": "Delete the end device with the given IDs.",
Expand Down Expand Up @@ -6813,6 +6852,39 @@
]
}
},
"/gateways/filter": {
"post": {
"summary": "List gateways where the given user or organization is a direct collaborator.\nIf no user or organization is given, this returns the gateways the caller\nhas access to.\nSimilar to Get, this selects the fields given by the field mask.\nMore or less fields may be returned, depending on the rights of the caller.",
"operationId": "GatewayRegistry_List4",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v3Gateways"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/googlerpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/v3ListGatewaysRequest"
}
}
],
"tags": [
"GatewayRegistry"
]
}
},
"/gateways/rights/batch": {
"get": {
"summary": "Assert that the caller has the requested rights on all the requested gateways.\nThe check is successful if there are no errors.",
Expand Down Expand Up @@ -23403,6 +23475,39 @@
}
}
},
"v3EndDeviceRegistryListBody": {
"type": "object",
"properties": {
"application_ids": {
"type": "object"
},
"field_mask": {
"type": "string",
"description": "The names of the end device fields that should be returned.\nSee the API reference for which fields can be returned by the different services."
},
"order": {
"type": "string",
"description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order."
},
"limit": {
"type": "integer",
"format": "int64",
"description": "Limit the number of results per page."
},
"page": {
"type": "integer",
"format": "int64",
"description": "Page number for pagination. 0 is interpreted as 1."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/v3ListEndDevicesRequestFilter"
}
}
}
},
"v3EndDeviceRegistryUpdateBody": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -25474,6 +25579,44 @@
}
}
},
"v3ListGatewaysRequest": {
"type": "object",
"properties": {
"collaborator": {
"$ref": "#/definitions/v3OrganizationOrUserIdentifiers",
"description": "By default we list all gateways the caller has rights on.\nSet the user or the organization (not both) to instead list the gateways\nwhere the user or organization is collaborator on."
},
"field_mask": {
"type": "string",
"description": "The names of the gateway fields that should be returned."
},
"order": {
"type": "string",
"description": "Order the results by this field path (must be present in the field mask).\nDefault ordering is by ID. Prepend with a minus (-) to reverse the order."
},
"limit": {
"type": "integer",
"format": "int64",
"description": "Limit the number of results per page."
},
"page": {
"type": "integer",
"format": "int64",
"description": "Page number for pagination. 0 is interpreted as 1."
},
"deleted": {
"type": "boolean",
"description": "Only return recently deleted gateways."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/v3ListGatewaysRequestFilter"
}
}
}
},
"v3ListGatewaysRequestFilter": {
"type": "object",
"properties": {
Expand Down
8 changes: 7 additions & 1 deletion api/ttn/lorawan/v3/end_device_services.proto
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,13 @@ service EndDeviceRegistry {
// Similar to Get, this selects the fields given by the field mask.
// More or less fields may be returned, depending on the rights of the caller.
rpc List(ListEndDevicesRequest) returns (EndDevices) {
option (google.api.http) = {get: "/applications/{application_ids.application_id}/devices"};
option (google.api.http) = {
get: "/applications/{application_ids.application_id}/devices"
additional_bindings {
post: "/applications/{application_ids.application_id}/devices/filter"
body: "*"
}
};
}

// Update the end device, changing the fields specified by the field mask to the provided values.
Expand Down
4 changes: 4 additions & 0 deletions api/ttn/lorawan/v3/gateway_services.proto
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ service GatewayRegistry {
get: "/gateways"
additional_bindings {get: "/users/{collaborator.user_ids.user_id}/gateways"}
additional_bindings {get: "/organizations/{collaborator.organization_ids.organization_id}/gateways"}
additional_bindings {
post: "/gateways/filter"
body: "*"
}
};
}

Expand Down
Loading
Loading