File size: 4,462 Bytes
325b400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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
    }