73 lines
3.3 KiB
Python
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 |