storj/satellite/console/consoleweb/consoleapi/gen/README.md
Vitalii f56504de2a apigen: project delete endpoint
Implemented project delete endpoint for REST API.
Added project usage status check service method to indicate if project can be deleted.
Updated project invoice status check method to indicate if project can be deleted.

Change-Id: I57dc96efb072517144252001ab5405446c9cdeb4
2022-06-07 12:23:24 +03:00

250 lines
6.1 KiB
Markdown

# Generated REST API design
Requires setting 'Authorization' header for requests.
Example of request
```bash
curl -i -L \
-H "Accept: application/json" \
-H 'Authorization: Bearer <key>' \
-X GET \
"https://satellite.qa.storj.io/api/v0/projects/"
```
## Successful responses
All the requests (except DELETE) have a non-empty response body for the resource that you're interacting with.
Example:
```json
{
"project": {
"name": "My Awesome Project",
"description": "it is perfect"
}
}
```
## Error responses
When an API endpoint returns an error (status code 4XX) it contains a JSON error response with 1 error field:
Example:
```json
{
"error": "authorization key format is incorrect. Should be 'Bearer <key>'"
}
```
### Project Management API Endpoints
#### GET /api/v0/projects/
Gets users projects.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
A successful response body:
```json
[
{
"id":"cd8d64bd-7457-4661-b88d-2e257bd0d88a",
"name":"My First Project",
"description":"",
"partnerId":"00000000-0000-0000-0000-000000000000",
"userAgent":null,
"ownerId":"f0ef7918-c8f0-4a9c-94fe-2260fb2a7877",
"rateLimit":null,
"burstLimit":null,
"maxBuckets":null,
"createdAt":"2022-04-15T11:38:36.951306+03:00",
"memberCount":0,
"storageLimit":"150.00 GB",
"bandwidthLimit":"150.00 GB",
"segmentLimit":150000
}
]
```
#### GET /api/v0/projects/bucket-rollup/projectID={uuid string}&bucket={string}&since={Date Timestamp like '2006-01-02T15:00:00Z'}&before={Date Timestamp like '2006-01-02T15:00:00Z'}
Gets project's single bucket usage by bucket ID.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
A successful response body:
```json
{
"projectID":"f4f2688e-8dae-4401-8ff1-31d9154ba514",
"bucketName":"bucket",
"totalStoredData":0.011384611174500622,
"totalSegments":0.21667078722222222,
"objectCount":0.10833539361111111,
"metadataSize":1.2241899478055554e-8,
"repairEgress":0,
"getEgress":0,
"auditEgress":0,
"since":"2006-01-02T15:00:00Z",
"before":"2022-04-27T23:59:59Z"
}
```
#### GET /api/v0/projects/bucket-rollups/projectID={uuid string}&since={Date Timestamp like '2006-01-02T15:00:00Z'}&before={Date Timestamp like '2006-01-02T15:00:00Z'}
Gets project's all buckets usage.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
A successful response body:
```json
[
{
"projectID":"f4f2688e-8dae-4401-8ff1-31d9154ba514",
"bucketName":"bucket",
"totalStoredData":0.011384611174500622,
"totalSegments":0.21667078722222222,
"objectCount":0.10833539361111111,
"metadataSize":1.2241899478055554e-8,
"repairEgress":0,
"getEgress":0,
"auditEgress":0,
"since":"2006-01-02T15:00:00Z",
"before":"2022-04-27T23:59:59Z"
}
]
```
#### POST /api/v0/projects/create
Creates new Project with given info.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
Request body example:
```json
{
"name": "new project"
}
```
A successful response body:
```json
{
"id":"f4f2688e-8dae-4401-8ff1-31d9154ba514",
"name":"new project",
"description":"",
"partnerId":"00000000-0000-0000-0000-000000000000",
"userAgent":null,
"ownerId":"f0ef7918-c8f0-4a9c-94fe-2260fb2a7877",
"rateLimit":null,
"burstLimit":null,
"maxBuckets":null,
"createdAt":"2022-04-27T13:23:59.013381+03:00",
"memberCount":0,
"storageLimit":"15 GB",
"bandwidthLimit":"15 GB",
"segmentLimit":15000
}
```
#### PATCH /api/v0/projects/update/{uuid string}
Updates project with given info.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
Request body example:
```json
{
"name": "awesome project",
"description": "random stuff",
"bandwidthLimit": 1000000000,
"storageLimit": 1000000000
}
```
A successful response body:
```json
{
"id":"f4f2688e-8dae-4401-8ff1-31d9154ba514",
"name":"awesome project",
"description":"random stuff",
"partnerId":"00000000-0000-0000-0000-000000000000",
"userAgent":null,
"ownerId":"f0ef7918-c8f0-4a9c-94fe-2260fb2a7877",
"rateLimit":null,
"burstLimit":null,
"maxBuckets":null,
"createdAt":"2022-04-27T13:23:59.013381+03:00",
"memberCount":0,
"storageLimit":"1 GB",
"bandwidthLimit":"1 GB",
"segmentLimit":15000
}
```
#### DELETE /api/v0/projects/delete/{uuid string}
Deletes project by id.
Note: all the buckets and access grants have to be deleted first and there should not be any usage during current month for paid tier users.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
### Macaroon API key API Endpoints
#### POST /api/v0/apikeys/create
Creates new macaroon API key.
!!!WARNING!!! Project ID is used as encryption salt. Please don't send it to anyone. We're going to fix it soon.
Request body example:
```json
{
"name": "new api key",
"projectID": "229193d4-0d71-49e8-b9a1-b367b74ed3e3"
}
```
A successful response body:
```json
{
"key": "13YqdodV5HKad2anjvy6ibtxRtHuD5hUJdsLRpRdQrT4vZ9C2wPJjsQ42L8SeTqMHeW97cwYgxT2FnDjEf3b7Mg5dfUcxm8N157Esq9",
"keyInfo": {
"id": "d7a60196-688a-4edc-a561-fd859d04e5a1",
"projectId": "229193d4-0d71-49e8-b9a1-b367b74ed3e3",
"partnerId": "00000000-0000-0000-0000-000000000000",
"userAgent": null,
"name": "new api key",
"createdAt": "2022-05-06T14:14:30.076498+03:00"
}
}
```
### User Endpoints
#### GET /api/v0/users/
Returns User entity by request context.
A successful response body:
```json
{
"id": "00fe2cef-9412-4c9c-bc42-e57cc062bb7d",
"fullName": "Test",
"shortName": "",
"email": "test@test.com",
"partnerId": "00000000-0000-0000-0000-000000000000",
"userAgent": null,
"projectLimit": 1,
"isProfessional": false,
"position": "",
"companyName": "",
"employeeCount": "",
"haveSalesContact": false,
"paidTier": false,
"isMFAEnabled": false,
"mfaRecoveryCodeCount": 0
}
```