from fastapi import APIRouter,Depends, Query from fastapi.responses import JSONResponse from fastapi import HTTPException from db_setup import get_session from sqlalchemy.ext.asyncio import AsyncSession from inbox.views import Email from dotenv import load_dotenv load_dotenv() router = APIRouter() @router.get("/email/fetch") async def fetch_email(top:int=Query(100),skip:int=Query(0,ge=0),token=Query(...),session: AsyncSession = Depends(get_session)): try: if not token: raise HTTPException(status_code=401,detail="Unauthorized") service=Email(session=session,token=token) data=await service.service_email(top,skip) value=data.get("value") items_lst=[] for item in value: message_id=item.get("id") service_per_email=await service.get_email_by_id(message_id) items_lst.append({"message_id":message_id,"email_contents":service_per_email}) return JSONResponse(content={"data":items_lst,"status_code":200}) except HTTPException: raise except Exception as e: raise HTTPException(status_code=500,detail=str(e)) @router.get("/inbox/fetch") async def fetch_inbox( record_id: str | None = Query(None), search: str | None = Query(None), top: int | None = Query(None), skip: int = Query(0, ge=0), session: AsyncSession = Depends(get_session), ): try: service=Email(session=session) if record_id: item=await service.get_inbox_message_by_id(record_id) return JSONResponse(content={"data":item,"total":1,"status_code":200}) items=await service.get_inbox_messages(top,skip,search) total=await service.count_inbox_messages(search) return JSONResponse(content={"data":items,"total":total,"status_code":200}) except HTTPException: raise except Exception as e: raise HTTPException(status_code=500,detail=str(e))