Skip to content

Commit

Permalink
Updated README
Browse files Browse the repository at this point in the history
  • Loading branch information
Andcool-Systems committed Feb 5, 2024
1 parent e15a25e commit 59ea4aa
Show file tree
Hide file tree
Showing 2 changed files with 252 additions and 9 deletions.
259 changes: 251 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Page redirection is handled through the nginx proxy server. The API consists of

- `/file/` – Endpoint where all files are located.
- `/api` – Main API endpoint
- - `/upload` – Endpoint for receiving file upload requests.
- - `/upload/` – Endpoint for receiving file upload requests.
- - `/delete/` – Request to delete a file.
- - `/login` – Log in with login and password.
- - `/register` – Create a new account with a login and password.
Expand All @@ -30,6 +30,7 @@ This section will be referred to as `1.1` in the documentation.
```json
{
"status": "error",
"message": "Auth error",
"auth_error": {
"message": "error message",
"errorId": <error code>
Expand Down Expand Up @@ -61,11 +62,14 @@ If the file type cannot be determined, the API returns the file in download mode
| 404 | File not found | The file referenced by the code does not exist |

### Upload a file to the server
`POST /api/upload?include_ext=false`
`POST /api/upload/{group_id}?include_ext=false`
The request body should contain the file to be uploaded.
Only one file is allowed, and its size should not exceed 100MB.
The maximum request frequency is **2 per minute**.

**Query params:**
> The `group_id` parameter indicates the group to which the file should be uploaded. The parameter can take the value `private`, which means that the file must be linked to a personal account. When passing the `group_id` parameter other than the `private` Authorization header is required.
**Request body:**
> **The `Content-Type` header of the request must be a `multipart/form-data`**
The file must be have `file` key in request body.
Expand Down Expand Up @@ -93,10 +97,13 @@ On successful execution, the API returns a `200` HTTP code along with a JSON res
```

#### Possible Errors
| Error Code | Description | Possible Reasons |
| ---------- | ----------------------------------- | ------------------------------------ |
| 400 | No file uploaded | No file is given in the request body |
| 413 | File size exceeds the limit (100MB) | The file size exceeds 100MB |
| Error Code | message | Possible Reasons |
| ---------- | ----------------------------------- | ------------------------------------------------------------------------------ |
| 400 | No file uploaded | No file is given in the request body |
| 413 | File size exceeds the limit (100MB) | The file size exceeds 100MB |
| 400 | Invalid group id | `group_id` parameter contains non-numerical value |
| 404 | Group not found | The group wuth provided `group_id` not found |
| 403 | You are not in the group | Group is exists, but you are has not permissions to upload files in this group |

### Delete a file
`GET /api/delete/<file_url>?key=<unique key>`
Expand Down Expand Up @@ -184,17 +191,20 @@ Errors described in section `1.1` may occur as well.


### Get a list of files.
`GET /api/get_files`
`GET /api/get_files/{group_id}`
It takes the `Authorization` header containing the access token.
Retrieves a list of all files associated with this account.

> The `group_id` parameter shows which group to get the files from. If the parameter is set to `private`, the files will be taken from a personal account, otherwise Authorization header is required
#### Response Example

```json
{
"status": "success",
"message": "files got successfully",
"username": "My cool username",
"is_group_owner": true,
"data": [
{
"file_url": "4yn-8yjhsu",
Expand All @@ -220,4 +230,237 @@ Retrieves a list of all files associated with this account.

#### Possible Errors

Errors described in section `1.1` may occur as well.
Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | ------------------------ | ------------------------------------------------------------------------------ |
| 400 | Invalid group id | `group_id` parameter contains non-numerical value |
| 404 | Group not found | The group wuth provided `group_id` not found |
| 403 | You are not in the group | Group is exists, but you are has not permissions to upload files in this group |


### Transfer local files to an account.
`POST /api/transfer`
It takes the `Authorization` header containing the access token.

> The request transfers local files to the account. The endpoint takes files from the `data` field in the request body and sequentially binds each file to an account. If the binding of any file failed, then these files will be returned in the response body in the `unsuccess` field. The file is transferred by their `file_url` and `key`
#### Request body example
```json
{
"data":[
{
"file_url": "4yn-8yjhsu",
"key": "6b9a1c1b-5594-4cb9-8d49-99a4c28782a1"
},
{
"file_url": "4yn-8yjhsR",
"key": "6b9a1c1b-5594-4cb9-8d49-99a4c28782a1"
}
]
}
```

#### Response example

```json
{
"status": "success",
"message": "transfered",
"unsuccess": [
{
"file_url": "4yn-8yjhsR",
"key": "6b9a1c1b-5594-4cb9-8d49-99a4c28782a1"
}
]
}

```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | ------------------------------- | ---------------------------------------------- |
| 400 | Couldn't parse request body | No request body provided |
| 400 | No `data` field in request body | Couldn't not find `data` field in request body |

## Groups

### Create file group
`POST /api/create_group`
It takes the `Authorization` header containing the access token.
> Creates a group with the passed name. The maximum length of a group name is 50 characters.
#### Request body example
```json
{
"group_name": "New group"
}
```

#### Response example

```json
{
"status": "success",
"message": "created",
"name": "New group",
"group_id": 12345678,
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | ------------------------------------- | ---------------------------------------------------- |
| 400 | No `group_name` provided | Couldn't not find `group_name` field in request body |
| 400 | Group name length exceeded (50 chars) | Too long group name |

### Delete file group
`DELETE /api/delete_group/{group_id}`
It takes the `Authorization` header containing the access token.
> Deletes a group with the passed `group_id`.

#### Response example

```json
{
"status": "success",
"message": "deleted"
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | -------------------------------------------------- | -------------------------------------- |
| 404 | Group not found | Group with passed `group_id` not found |
| 403 | You dont have any permissions to delete this group | You are not owner of this group |

### Generate a new invite link
`GET /api/generate_invite/{group_id}`
It takes the `Authorization` header containing the access token.
> Generates a invite link for group with the passed `group_id`.

#### Response example

```json
{
"status": "success",
"message": "created",
"invite_link": "https://fu.andcool.ru/invite/DSAfd4-hpoqFDFj"
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | ----------------------------- | -------------------------------------- |
| 404 | Group not found | Group with passed `group_id` not found |
| 403 | You dont have any permissions | You are not owner of this group |

### Join to a group
`POST /api/join/{invite_link}`
It takes the `Authorization` header containing the access token.
> Joins to a group by passed `invite_link`.

#### Response example

```json
{
"status": "success",
"message": "created",
"name": "New group",
"group_id": 12345678,
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | ---------------------------- | ----------------------------- |
| 404 | Invite link not found | Could not found a invite link |
| 400 | You are already in the group | You are already in the group |


### Leave from group
`POST /api/leave/{group_id}`
It takes the `Authorization` header containing the access token.
> Leaves from group with passed `group_id`

#### Response example
```json
{
"status": "success",
"message": "leaved"
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | ------------------------ | -------------------------------------- |
| 404 | Group not found | Group with passed `group_id` not found |
| 400 | You are not in the group | You are not in the group |


### Get info about invite link
`GET /api/invite_info/{invite_link}`
It takes the `Authorization` header containing the access token.
> Gives an information about group about invite link.

#### Response example
```json
{
"status": "success",
"message": "created",
"name": "New group",
"group_id": 12345678,
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
| Error Code | message | Possible Reasons |
| ---------- | --------------------- | ----------------------------- |
| 404 | Invite link not found | Could not found a invite link |


### Get all group from account
`GET /api/get_groups`
It takes the `Authorization` header containing the access token.
> Get list of groups linked to an account.

#### Response example
```json
{
"status": "success",
"message": "groups got successfully",
"groups": [
{
"name": "Bim-Bim",
"group_id": 12345679
},
{
"name": "Bam-Bam",
"group_id": 12345677
}
]
}
```

#### Possible Errors

Errors described in section `1.1` may occur as well.
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ async def upload_file(
if token_db.user not in group.members:
return JSONResponse(
content={"status": "error", "message": "You are not in the group"},
status_code=400,
status_code=403,
)
else:
group_id = -1
Expand Down

0 comments on commit 59ea4aa

Please sign in to comment.