chatbot_server / models /Database_Entity.py
kltn21110's picture
Upload 239 files
325b400 verified
from mongoengine import (
Document, StringField, ReferenceField, DateTimeField, BooleanField, ObjectIdField,EmbeddedDocumentField
)
from datetime import datetime
import pytz
from mongoengine import connect
import os
from dotenv import load_dotenv
load_dotenv()
MONGO_URI = os.getenv("MONGO_URI", "")
def init_db(db_name="chatbot_hmdrinks"):
connect(db_name, host=MONGO_URI)
from mongoengine import Document, StringField, IntField,ListField
class User(Document):
_id = ObjectIdField(required=True, primary_key=True)
user_name = StringField(required=True, max_length=255)
user_id = IntField(unique=True, required=True)
is_deleted = BooleanField(default=False)
date_deleted = DateTimeField(default=None)
meta = {'collection': 'users'}
class ChatHistory(Document):
_id = ObjectIdField(required=True, primary_key=True)
user = ReferenceField(User, required=True, reverse_delete_rule=2)
name_chat = StringField(required=True, unique=True, max_length=255)
is_deleted = BooleanField(default=False)
date_deleted = DateTimeField(default=None)
meta = {'collection': 'chat_history'}
from bson import ObjectId
from mongoengine import EmbeddedDocument, StringField, IntField, FloatField
class CartProduct(EmbeddedDocument):
name = StringField()
quantity = IntField(min_value=1, default=1)
size = StringField()
class DetailChat(Document):
_id = ObjectIdField(required=True, primary_key=True,default=ObjectId)
chat_history = ReferenceField(ChatHistory, required=True, reverse_delete_rule=2)
you_message = StringField()
ai_message = StringField()
data_relevant = StringField()
full_input = StringField()
source_file = StringField()
cart_id = IntField()
confirmed_order = BooleanField(default=False)
timestamp = DateTimeField(default=lambda: datetime.now(pytz.UTC))
is_deleted = BooleanField(default=False)
date_deleted = DateTimeField(default=lambda: datetime.now(pytz.UTC))
meta = {'collection': 'detail_chat',
'strict': False
}
class ChatCart(Document):
_id = ObjectIdField(primary_key=True, default=ObjectId)
chat_history = ReferenceField(ChatHistory, required=True, reverse_delete_rule=2)
created_from_detail_chat = ReferenceField(DetailChat) # Để biết cart được tạo từ đoạn chat nào
cart_products = ListField(EmbeddedDocumentField(CartProduct), default=list)
status = StringField(choices=["pending", "confirmed", "failed"], default="pending")
confirmed_order = BooleanField(default=False)
created_at = DateTimeField(default=lambda: datetime.now(pytz.UTC))
confirmed_at = DateTimeField()
note = StringField()
cart_id = IntField()
order_id = IntField()
#Backup
backup_cart_products = ListField(EmbeddedDocumentField(CartProduct), default=list)
backup_status = StringField(choices=["pending", "confirmed", "failed"], default="pending")
backup_confirmed_order = BooleanField()
meta = {
'collection': 'chat_cart',
'strict': False
}
class StopSignal(Document):
_id = ObjectIdField(primary_key=True, default=ObjectId)
chat_history = ReferenceField(ChatHistory, required=True, reverse_delete_rule=2)
is_stopped = BooleanField(default=False)
created_at = DateTimeField(default=lambda: datetime.now(pytz.UTC))
stopped_at = DateTimeField()
meta = {
'collection': 'stop_signal',
'strict': False,
'indexes': ['chat_history']
}
from mongoengine import Document, StringField, DateTimeField, DictField
class PaymentCallbackLog(Document):
_id = ObjectIdField(primary_key=True, default=ObjectId)
# Loại cổng thanh toán: momo, zalopay, vnpay,...
type = StringField(required=True, choices=["momo", "zalopay", "vnpay"])
app_trans_id = StringField() # ZaloPay
order_id = StringField() # MoMo
txn_ref = StringField() # VNPAY
raw_data = DictField()
status = StringField(choices=["success", "fail", "error", "unknown"], default="unknown")
created_at = DateTimeField(default=lambda: datetime.now(pytz.UTC))
is_refund = BooleanField()
meta = {
'collection': 'payment_callback_logs',
'strict': False
}