81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
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 users.permissions import PermissionTag, require_permission
|
|
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})
|
|
|
|
if service.pending_match_ids:
|
|
await service.enqueue_matching(list(service.pending_match_ids),force=False)
|
|
|
|
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))
|
|
|
|
|
|
@router.post("/inbox/{record_id}/match")
|
|
async def rematch_inbox(
|
|
record_id: str,
|
|
current_user: dict = Depends(require_permission(PermissionTag.INBOX_EDIT)),
|
|
session: AsyncSession = Depends(get_session),
|
|
):
|
|
try:
|
|
service=Email(session=session)
|
|
queued_id=await service.queue_rematch(record_id)
|
|
task_ids=await service.enqueue_matching([queued_id], force=True)
|
|
return JSONResponse(content={"data":{"queued":True,"task_ids":task_ids},"status_code":200})
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500,detail=str(e))
|