# Multimedia Repository Documentation
## Overview
The `MultimediaRepo` class is a repository for managing multimedia files (e.g., images, audio, video) using GridFS in MongoDB. It provides methods to upload, retrieve, update, and delete files in GridFS.
## Class Initialization
```python
MultimediaRepo(db: database.Database)
```
- Parameters:
- `db: database.Database`: The MongoDB database instance.
## Methods
### `get_all(limit: int = 0) -> list[dict]`
- Retrieve all files from GridFS.
- Parameters:
- `limit: int`: (Optional) The maximum number of files to retrieve. Default is 0, which retrieves all files.
- Returns:
- `list[dict]`: A list of dictionaries, each representing a file in GridFS.
### `upload(file_data: bytes, content_type: str) -> ObjectId`
- Upload a file to GridFS.
- Parameters:
- `file_data: bytes`: The binary data of the file to be uploaded.
- `content_type: str`: The MIME type of the file (e.g., "image/jpeg", "audio/mp3").
- Returns:
- `ObjectId`: The `_id` of the newly uploaded file in GridFS.
### `get(file_id: ObjectId) -> Optional[bytes]`
- Retrieve a file from GridFS by its `_id`.
- Parameters:
- `file_id: ObjectId`: The `_id` of the file to retrieve from GridFS.
- Returns:
- `Optional[bytes]`: The binary data of the retrieved file, or `None` if the file does not exist.
### `update(file_id: ObjectId, new_file_data: bytes, content_type: str) -> None`
- Update an existing file in GridFS.
- Parameters:
- `file_id: ObjectId`: The `_id` of the file to update in GridFS.
- `new_file_data: bytes`: The new binary data of the file to be updated.
- `content_type: str`: The MIME type of the new file data (e.g., "image/jpeg", "audio/mp3").
- Returns:
- `None`
- Note: This method deletes the existing file with the specified `_id` and uploads the new file data with the same `_id`.
### `delete(file_id: ObjectId) -> None`
- Delete a file from GridFS.
- Parameters:
- `file_id: ObjectId`: The `_id` of the file to be deleted from GridFS.
- Returns:
- `None`
- Exception:
- Raises `NoFile` exception if the file with the specified `_id` does not exist in GridFS.
## Example Usage
```python
db = ... # MongoDB database instance
multimedia_repo = MultimediaRepo(db)
# Upload a file
file_data = b'binary file data'
content_type = 'image/jpeg'
file_id = multimedia_repo.upload(file_data, content_type)
# Retrieve a file
retrieved_file_data = multimedia_repo.get(file_id)
# Update a file
new_file_data = b'new binary file data'
multimedia_repo.update(file_id, new_file_data, content_type)
# Delete a file
multimedia_repo.delete(file_id)
```