feat: integrate MinIO for real file storage
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from fastapi import APIRouter, Depends, UploadFile, File, Form
|
||||
from uuid import uuid4
|
||||
from typing import Optional
|
||||
|
||||
from app.dependencies import get_ingest_job_repository
|
||||
from app.schemas.upload import UploadAssetRequest, UploadAssetResponse
|
||||
from app.core.storage import get_minio_service, MinIOService
|
||||
from app.schemas.upload import UploadAssetResponse
|
||||
from packages.adapters.in_memory import InMemoryIngestJobRepository
|
||||
from packages.application import SubmitIngestJobCommand, SubmitIngestJobUseCase
|
||||
from apps.worker.worker_app.tasks.ingest import ingest_asset
|
||||
@@ -11,35 +13,42 @@ router = APIRouter()
|
||||
|
||||
|
||||
@router.post("", response_model=UploadAssetResponse)
|
||||
def upload_asset(
|
||||
request: UploadAssetRequest,
|
||||
async def upload_asset(
|
||||
file: UploadFile = File(...),
|
||||
workspace_id: str = Form(...),
|
||||
project_id: str = Form(...),
|
||||
library_id: str = Form(...),
|
||||
ingest_job_repository: InMemoryIngestJobRepository = Depends(get_ingest_job_repository),
|
||||
storage_service: MinIOService = Depends(get_minio_service),
|
||||
) -> UploadAssetResponse:
|
||||
"""
|
||||
Upload asset and trigger ingest pipeline.
|
||||
|
||||
Real implementation would:
|
||||
Real implementation:
|
||||
1. Accept multipart/form-data with file
|
||||
2. Store file to object storage (S3, MinIO, etc.)
|
||||
2. Store file to MinIO object storage
|
||||
3. Generate storage_key
|
||||
4. Submit ingest job
|
||||
5. Enqueue worker task
|
||||
|
||||
Mock implementation:
|
||||
1. Generate mock storage_key
|
||||
2. Submit ingest job
|
||||
3. Enqueue worker task
|
||||
"""
|
||||
# Mock storage: generate storage_key
|
||||
storage_key = f"uploads/{uuid4().hex[:8]}/{request.filename}"
|
||||
# Generate storage key
|
||||
file_id = uuid4().hex[:8]
|
||||
storage_key = f"uploads/{file_id}/{file.filename}"
|
||||
|
||||
# Upload file to MinIO
|
||||
file_url = storage_service.upload_file(
|
||||
file.file,
|
||||
storage_key,
|
||||
content_type=file.content_type or "application/octet-stream",
|
||||
)
|
||||
|
||||
# Submit ingest job
|
||||
use_case = SubmitIngestJobUseCase(ingest_job_repository)
|
||||
job = use_case.execute(
|
||||
SubmitIngestJobCommand(
|
||||
workspace_id=request.workspace_id,
|
||||
project_id=request.project_id,
|
||||
library_id=request.library_id,
|
||||
workspace_id=workspace_id,
|
||||
project_id=project_id,
|
||||
library_id=library_id,
|
||||
storage_key=storage_key,
|
||||
)
|
||||
)
|
||||
@@ -50,4 +59,5 @@ def upload_asset(
|
||||
return UploadAssetResponse(
|
||||
storage_key=storage_key,
|
||||
ingest_job_id=job.id,
|
||||
url=file_url,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user