Spaces:
Sleeping
Sleeping
| 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 | |
| } |