from __future__ import annotations from typing import Annotated from fastapi import APIRouter, Depends, status from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent from v1.memories.dependencies import get_memories_service from v1.memories.schemas import ( MemoryListResponse, UserMemoryPartialUpdate, UserMemoryUpdate, WorkMemoryPartialUpdate, WorkMemoryUpdate, ) from v1.memories.service import MemoriesService router = APIRouter(prefix="/memories", tags=["memories"]) @router.get("", response_model=MemoryListResponse) async def get_all_memories( service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> MemoryListResponse: result = await service.get_all_memories() return MemoryListResponse( user_memory=result["user_memory"], work_memory=result["work_memory"], ) @router.get("/user", response_model=UserMemoryContent | None) async def get_user_memory( service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> UserMemoryContent | None: return await service.get_user_memory() @router.get("/work", response_model=WorkProfileContent | None) async def get_work_memory( service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> WorkProfileContent | None: return await service.get_work_memory() @router.put("/user", response_model=UserMemoryContent, status_code=status.HTTP_200_OK) async def update_user_memory( payload: UserMemoryUpdate, service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> UserMemoryContent: return await service.update_user_memory( content=payload.content, ) @router.put("/work", response_model=WorkProfileContent, status_code=status.HTTP_200_OK) async def update_work_memory( payload: WorkMemoryUpdate, service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> WorkProfileContent: return await service.update_work_memory( content=payload.content, ) @router.patch("/user", response_model=UserMemoryContent) async def patch_user_memory( payload: UserMemoryPartialUpdate, service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> UserMemoryContent: return await service.patch_user_memory( content=payload.content, ) @router.patch("/work", response_model=WorkProfileContent) async def patch_work_memory( payload: WorkMemoryPartialUpdate, service: Annotated[MemoriesService, Depends(get_memories_service)], ) -> WorkProfileContent: return await service.patch_work_memory( content=payload.content, )