Zero-Knowledge-Platform/backend/app/api/children.py
2026-10-08 02:41:41 +05:30

61 lines
2.2 KiB
Python

from fastapi import APIRouter, Depends
from motor.motor_asyncio import AsyncIOMotorDatabase
from app.dependencies.auth import get_current_owner_id
from app.db.mongo import get_database
from app.schemas.records import ChildCreateRequest, ChildRecordResponse, ChildUpdateRequest
from app.services.records import create_child, delete_child, get_child, list_children, update_child
router = APIRouter(prefix="/parents/{parent_id}/children", tags=["children"])
@router.post("", response_model=ChildRecordResponse)
async def create_child_record(
parent_id: str,
payload: ChildCreateRequest,
owner_id: str = Depends(get_current_owner_id),
database: AsyncIOMotorDatabase = Depends(get_database),
) -> ChildRecordResponse:
if payload.parentId != parent_id:
payload = ChildCreateRequest(parentId=parent_id, iv=payload.iv, ciphertext=payload.ciphertext)
return await create_child(database, owner_id, payload)
@router.get("", response_model=list[ChildRecordResponse])
async def list_child_records(
parent_id: str,
owner_id: str = Depends(get_current_owner_id),
database: AsyncIOMotorDatabase = Depends(get_database),
) -> list[ChildRecordResponse]:
return await list_children(database, owner_id, parent_id)
@router.get("/{child_id}", response_model=ChildRecordResponse)
async def get_child_record(
parent_id: str,
child_id: str,
owner_id: str = Depends(get_current_owner_id),
database: AsyncIOMotorDatabase = Depends(get_database),
) -> ChildRecordResponse:
return await get_child(database, owner_id, parent_id, child_id)
@router.put("/{child_id}", response_model=ChildRecordResponse)
async def update_child_record(
parent_id: str,
child_id: str,
payload: ChildUpdateRequest,
owner_id: str = Depends(get_current_owner_id),
database: AsyncIOMotorDatabase = Depends(get_database),
) -> ChildRecordResponse:
return await update_child(database, owner_id, parent_id, child_id, payload)
@router.delete("/{child_id}", status_code=204)
async def delete_child_record(
parent_id: str,
child_id: str,
owner_id: str = Depends(get_current_owner_id),
database: AsyncIOMotorDatabase = Depends(get_database),
) -> None:
await delete_child(database, owner_id, parent_id, child_id)