Soumyajit94298's picture
initial
8419546
from fastapi import APIRouter, Depends, HTTPException, Body
from sqlalchemy.orm import Session
from server.utils.database import get_db
from fastapi.encoders import jsonable_encoder
from server.controllers.mail import MailContactFilter, MailSummary,MailDate
from server.utils.summarize import summarize,summarize_week
import json
from server.crud.mail import (
get_all_mails,
get_top_n_mails,
get_contact_id_by_email,
get_mails_by_contact_id,
get_mails_by_date_range,
)
router = APIRouter(prefix="/mails")
@router.get("/all")
def read_all_mails(db: Session = Depends(get_db)):
mails = get_all_mails(db)
return jsonable_encoder([
{
"id": str(mail.id),
"bodyPlainRedacted": mail.bodyPlainRedacted
}
for mail in mails
])
@router.get("/topk")
def read_all_mails(db: Session = Depends(get_db),topk: int=10):
mails = get_top_n_mails(db,topk=topk)
return jsonable_encoder([
{
"id": str(mail.id),
"bodyPlainRedacted": mail.bodyPlainRedacted
}
for mail in mails
])
@router.post("/by-contact")
def get_mails_for_contact(payload: MailContactFilter, db: Session = Depends(get_db))-> MailSummary :
contact_id = payload.contact_id
user_email = payload.user_email
if not contact_id and not user_email:
raise HTTPException(status_code=400, detail="Either contact_id or user_email must be provided")
if user_email:
contact_id = get_contact_id_by_email(db, user_email)
if contact_id is None:
raise HTTPException(status_code=404, detail="User email not found")
mails = get_mails_by_contact_id(db, contact_id)
full_text=""
for i in mails:
full_text+=i.bodyPlainRedacted
obj=MailSummary()
obj.full_mail=full_text
obj.result=summarize(full_text)
return obj
@router.post("/weekly")
def get_summary_weekly(payload:MailDate, db: Session=Depends(get_db))->MailSummary:
star_date=payload.start_date
end_date=payload.end_date
mails=get_mails_by_date_range(db,start_date=star_date, end_date=end_date)
full_text=""
for i in mails:
full_text+=i.bodyPlainRedacted
obj=MailSummary()
res=summarize_week(full_text)
if res:
obj.result={"summary":res}
return obj
else:
obj.result={"summary":"No mail found"}
return obj