from __future__ import annotations from sanic import response from sqlalchemy import select from app.core.models.content_v3 import EncryptedContent, ContentDerivative from app.core._config import PROJECT_HOST async def s_api_v1_content_derivatives(request): cid = request.args.get('cid') if not cid: return response.json({"error": "BAD_REQUEST"}, status=400) session = request.ctx.db_session ec = (await session.execute(select(EncryptedContent).where(EncryptedContent.encrypted_cid == cid))).scalars().first() if not ec: return response.json({"error": "NOT_FOUND"}, status=404) rows = (await session.execute(select(ContentDerivative).where(ContentDerivative.content_id == ec.id))).scalars().all() out = [] for r in rows: # Derive /api/v1.5/storage/ from local_path if possible path_hash = (r.local_path or '').split('/')[-1] storage_url = f"{PROJECT_HOST}/api/v1.5/storage/{path_hash}" if path_hash else None out.append({ 'kind': r.kind, 'interval': [r.interval_start_ms, r.interval_end_ms] if r.interval_start_ms is not None else None, 'content_type': r.content_type, 'size_bytes': r.size_bytes, 'status': r.status, 'url': storage_url, }) return response.json({'cid': cid, 'derivatives': out})