/
db.py
169 lines (127 loc) · 5.18 KB
/
db.py
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
from datetime import datetime
from pymongo import MongoClient, ReturnDocument
from config import DB_PASS
from bson.objectid import ObjectId
# binary options trading database api functions
class BinaryDB:
def __init__(self):
self.client = MongoClient("mongodb+srv://dgn_fly:{}@cluster0-a8pky.mongodb.net/test?retryWrites=true&w=majority".format(DB_PASS))
self.db = self.client.binary
def create_user(self, tgram_uid, first_name, last_name):
# create user and a demo account for initial use populated with 10,000 credits
# leave ngn_balance empty till user makes deposit
# create db collection user
self.users = self.db.users
self.tgram_uid = tgram_uid
self.first_name = first_name
self.last_name = last_name
# self.ngn_balance = ngn_balance
# check if user exists and return
result = self.users.find_one({"tgram_uid": self.tgram_uid})
if result:
return result
# insert the following data into the collection user
self.user_id = self.users.insert_one({
"tgram_uid": self.tgram_uid,
"first_name": self.first_name,
"last_name": self.last_name,
"join_date": datetime.utcnow(),
"active_acct": 'demo',
"account": {
"demo_balance": 10000,
"ngn_balance": None
}
}).inserted_id
return self.user_id
def update_user_ngn_balance(self, tgram_uid, ngn_balance):
# update the users ngn_balance after confirming
self.tgram_uid = tgram_uid
self.ngn_balance = ngn_balance
self.users = self.db.users
result = self.users.find_one_and_update({ "tgram_uid": self.tgram_uid }, {'$set': { "account.ngn_balance": self.ngn_balance }}, return_document=ReturnDocument.AFTER)
return result
def switch_acount(self, tgram_uid, account):
self.tgram_uid = tgram_uid
self.account = account
self.users = self.db.users
result = self.users.find_one_and_update({ "tgram_uid": self.tgram_uid }, {'$set': { "active_acct": self.account }}, return_document=ReturnDocument.AFTER)
return result
def deposit(self, tgram_uid, amount):
self.tgram_uid = tgram_uid
self.amount = amount
# create deposit collection
self.deposits = self.db.deposits
self.deposit_id = self.deposits.insert_one({
"tgram_uid": self.tgram_uid,
"amount": self.amount,
"status": 'pending'
}).inserted_id
return self.deposit_id
# escrow database api functions
class Escrow:
def __init__(self):
self.client = MongoClient("mongodb+srv://dgn_fly:{}@cluster0-a8pky.mongodb.net/test?retryWrites=true&w=majority".format(DB_PASS))
self.db = self.client.escrow
def create_user(self, tgram_uid, first_name, last_name):
self.users = self.db.users
self.tgram_uid = tgram_uid
self.first_name = first_name
self.last_name = last_name
# check if user exists and return
result = self.users.find_one({"tgram_uid": self.tgram_uid})
if result:
return result
self.user_id = self.users.insert_one({
"tgram_uid": self.tgram_uid,
"first_name": self.first_name,
"last_name": self.last_name,
"join_date": datetime.utcnow(),
"sell_offers": 0,
"buy_offers": 0
}).inserted_id
return self.user_id
def create_offer(self, tgram_uid, offer_type, amount, coin, price, status):
self.offers = self.db.offers
self.tgram_uid = tgram_uid
self.offer_type = offer_type
self.amount = amount
self.coin = coin
self.price = price
self.status = status
offer_id = self.offers.insert_one({
"tgram_uid": self.tgram_uid,
"offer_type": self.offer_type,
"amount": self.amount,
"coin": self.coin,
"price": self.price,
"status": self.status,
"filled_by": None,
"fill_method": None,
"fill_status": 'waiting'
}).inserted_id
return offer_id
def get_offers(self, coin, offer_type):
self.offers = self.db.offers
self.coin = coin
self.offer_type = offer_type
result = self.offers.find({"offer_type": self.offer_type, "coin": self.coin, "status": 'confirmed', "fill_status": 'waiting'})
return result
def get_user_offers(self, tgram_uid):
self.offers = self.db.offers
self.tgram_uid = tgram_uid
result = self.offers.find({"tgram_uid": self.tgram_uid})
return result
def add_fill_method(self, offer_id, method):
self.offers = self.db.offers
self.offer_id = offer_id
self.method = method
result = self.offers.find_one_and_update({"_id": self.offer_id}, {'$set': { "fill_method": self.method }}, return_document=ReturnDocument.AFTER)
return result
def fill(self, tgram_uid, offer_id, status):
self.offers = self.db.offers
self.tgram_uid = tgram_uid
self.offer_id = ObjectId(offer_id)
self.status = status
result = self.offers.find_one_and_update({"_id": self.offer_id}, {'$set': { "fill_status": self.status, "filled_by": self.tgram_uid }}, return_document=ReturnDocument.AFTER)
print("inside fill db function", result)
return result