feat(doc): add new doc and register into mongodb

This commit is contained in:
YuehuCao 2025-09-11 22:23:46 +08:00
parent cea505cbdd
commit 1c70143f2d
2 changed files with 33 additions and 21 deletions

View File

@ -55,7 +55,7 @@ class EmailSendStatusDoc(Document):
indexes = [
"email_id",
"tenant_id"
]
]
class EmailTrackingDoc(Document):
email_id: str
@ -83,7 +83,7 @@ class EmailTrackingDoc(Document):
indexes = [
"email_id",
"tenant_id"
]
]
class EmailBounceDoc(Document):
email: str
@ -104,5 +104,25 @@ class EmailBounceDoc(Document):
indexes = [
"email",
"tenant_id"
]
]
class UsageLogDoc(Document):
timestamp: datetime = datetime.utcnow() # timestamp
tenant_id: str # tenant id
operation: str # operation type
request_id: str # request id # TODO: use true one
units: int # units
status: str # operation status
latency_ms: int # latency time(milliseconds)
bytes_in: int # input bytes
bytes_out: int # output bytes
key_id: Optional[str] = None # API Key ID
extra: dict = {} # extra information
class Settings:
name = "usage_log_doc"
indexes = [
"tenant_id",
"request_id",
"key_id"
]

View File

@ -1,15 +1,12 @@
from webapi.config.site_settings import site_settings
from beanie import init_beanie
from motor.motor_asyncio import AsyncIOMotorClient
from backend.models.models import MessageTemplateDoc, EmailSenderDoc, EmailSendStatusDoc, EmailTrackingDoc, EmailBounceDoc
from backend.models.models import MessageTemplateDoc, EmailSenderDoc, EmailSendStatusDoc, EmailTrackingDoc, EmailBounceDoc, UsageLogDoc
import os
# MongoDB config
# TODO: for non-local environment, use the following config
#MONGODB_URI = os.getenv('MONGODB_URI', 'mongodb+srv://jetli:8IHKx6dZK8BfugGp@freeleaps2.hanbj.mongodb.net/')
#MONGODB_NAME = os.getenv('MONGODB_NAME', 'freeleaps2')
MONGODB_URI = os.getenv('MONGODB_URI', 'mongodb://localhost:27017/')
MONGODB_NAME = os.getenv('MONGODB_NAME', 'interview')
MONGODB_URI = os.getenv('MONGODB_URI')
MONGODB_NAME = os.getenv('MONGODB_NAME')
# create MongoDB client
client = AsyncIOMotorClient(
@ -26,7 +23,8 @@ document_models = [
EmailSenderDoc,
EmailSendStatusDoc,
EmailTrackingDoc,
EmailBounceDoc
EmailBounceDoc,
UsageLogDoc
]
def register(app):
@ -40,13 +38,7 @@ def register(app):
async def initiate_database():
"""initiate Beanie database connection"""
try:
await init_beanie(
database=client[MONGODB_NAME],
document_models=document_models
)
print(f"✅ database initialized successfully: {MONGODB_NAME}")
print(f" URI: {MONGODB_URI}")
except Exception as e:
print(f"❌ database initialization failed: {e}")
raise
await init_beanie(
database=client[MONGODB_NAME],
document_models=document_models
)