HR-ATS-Portal/backend/inbox/models.py

73 lines
3.3 KiB
Python

from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Boolean, UUID
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import relationship
from sqlmodel import SQLModel
from datetime import datetime
from users.models import Users
from sqlalchemy.ext.asyncio import AsyncSession
import uuid
class Inbox(SQLModel,table=True):
id=Column(Integer,primary_key=True,autoincrement=True)
user_id = Column(UUID,ForeignKey("users.id"))
alert_id=Column(UUID,ForeignKey("inbox_alerts.id"))
alerts=relationship("Inbox_Alerts",back_populates="inbox",foreign_keys=[alert_id])
message_id=Column(UUID,ForeignKey("inbox_messages.id"))
messages=relationship("Inbox_Messages",back_populates="inbox",foreign_keys=[message_id])
created_at=Column(DateTime,default=datetime.now)
updated_at=Column(DateTime,default=datetime.now)
# is_active=Column(Boolean,default=True)
# is_deleted=Column(Boolean,default=False)
# user=relationship("Users",back_populates="inbox",foreign_keys=[user_id])
class Inbox_Alerts(SQLModel,table=True):
id=Column(UUID,primary_key=True,default=uuid.uuid4)
alert_sender_name=Column(String,nullable=False)
alert_sender_email=Column(String,nullable=False)
is_read=Column(Boolean,default=False)
recieve_time=Column(DateTime,default=datetime.now)
class Inbox_Messages(SQLModel,table=True):
id=Column(UUID,primary_key=True,default=uuid.uuid4)
full_email_response=Column(JSONB,nullable=True)
message_subject=Column(String,nullable=False)
message_body=Column(String,nullable=False)
message_sent_time=Column(String,nullable=False)
# message_status=Column(String,nullable=False)
message_received_time=Column(String,nullable=False)
message_from=Column(String,nullable=False)
message_to=Column(String,nullable=False)
message_cc=Column(String,nullable=True)
message_bcc=Column(String,nullable=True)
message_attachments=Column(JSONB,nullable=True)
message_read=Column(Boolean,default=False)
attachment=Column(Boolean,default=False)
message_reply=Column(String,nullable=True)
file_path=Column(String,nullable=True)
@classmethod
async def insert_email(cls,session:AsyncSession,email_data:dict):
email=cls(
message_subject=email_data.get("subject"),
message_body=email_data.get("body"),
# message_type=email_data.get("type"),
message_sent_time=email_data.get("sentDateTime"),
message_read=email_data.get("isRead"),
message_received_time=email_data.get("receivedDateTime"),
message_from=email_data.get("from").get("emailAddress").get("address"),
message_to=",".join([r["emailAddress"]["address"] for r in email_data.get("toRecipients", [])]),
message_cc=",".join([r["emailAddress"]["address"] for r in email_data.get("ccRecipients", [])]),
message_bcc=",".join([r["emailAddress"]["address"] for r in email_data.get("bccRecipients", [])]),
message_attachments=email_data.get("attachments"),
attachment=email_data.get("hasAttachments"),
message_reply=",".join([r["emailAddress"]["address"] for r in email_data.get("replyTo", [])]),
full_email_response=email_data,
)
session.add(email)
await session.commit()
return email