Pārlūkot izejas kodu

follow event: follow for nft and add market api

CJYen 3 gadi atpakaļ
vecāks
revīzija
0acb1dbb9f
1 mainītis faili ar 86 papildinājumiem un 10 dzēšanām
  1. 86 10
      main.py

+ 86 - 10
main.py

@@ -42,28 +42,46 @@ async def callback(request: fastapi.Request):
 def handle_follow(event):
     # get user id when follow
     real_user_id = event.source.user_id
-    rand_num = str(randrange(99999))
-    # db connect
+
+    # db connect and search
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4')
     table = db['users']
+    table2 = db['nft']
+    result1 = table.find_one(userid=real_user_id)
+    result2 = table2.find_one(userid=real_user_id)
+
+    # 都存在db的話
+    if result1 and result2:
+        db.close()
+        line_bot_api.reply_message(
+            event.reply_token,
+            TextSendMessage(text='很高興再見到您!'))
 
-    print(rand_num)
-    user_id = event.source.user_id + rand_num
-    result = table.find_one(userid=real_user_id)
+    # 只存在user,新增nft給他
+    elif result1 and not result2:
+        # prepare nft for new follower
+        result3 = table2.find_one(userid=None) or table2.find_one(userid='')
+        result3['userid'] = real_user_id
+        table2.update(dict(result3), ['id'])
 
-    if result:
         db.close()
+
         line_bot_api.reply_message(
             event.reply_token,
             TextSendMessage(text='很高興再見到您!'))
 
-    else:
-        # create user account
+    # 只存在nft,新加到user
+    elif result2 and not result1:
+        # create user account api
         url = 'https://nft-api-staging.joyso.io/api/v1/accounts'
         headers = {'Authorization': 'Basic bmZ0OmMxOTEzOWMzYjM3YjdjZWU3ZmY3OTFiZGU3NzdjZWNl'}
+
         # setup for temp use (unique id)
+        rand_num = str(randrange(99999))
+        user_id = event.source.user_id + rand_num
         data = 'uid=' + user_id
         r = requests.post(url=url, headers=headers, data=data)
+
         # extract the account address
         dict_str = json.loads(r.text)
         user_account = dict_str['account']
@@ -76,16 +94,58 @@ def handle_follow(event):
             border=5)
         qr.add_data(user_address)
         qr.make(fit=True)
+        img_qr = qr.make_image(fill='black', back_color='white')
+        filename = "/var/www/ArkCard-Linebot/ArkCard-web/qrcode/" + real_user_id + '.png'
+        img_save = img_qr.save(filename)
+
+        # add to db
+        data = dict(userid=real_user_id, useraddress=user_address)
+        table.insert(data)
+
+        db.close()
+        line_bot_api.reply_message(
+            event.reply_token,
+            TextSendMessage(text='很高興再見到您!'))
+
+    # 都不存在,兩種都新建
+    else:
+        # create user account api
+        url = 'https://nft-api-staging.joyso.io/api/v1/accounts'
+        headers = {'Authorization': 'Basic bmZ0OmMxOTEzOWMzYjM3YjdjZWU3ZmY3OTFiZGU3NzdjZWNl'}
+
+        # setup for temp use (unique id)
+        rand_num = str(randrange(99999))
+        user_id = event.source.user_id + rand_num
+        data = 'uid=' + user_id
+        r = requests.post(url=url, headers=headers, data=data)
+
+        # extract the account address
+        dict_str = json.loads(r.text)
+        user_account = dict_str['account']
+        user_address = user_account['address']
 
+        # generate qr code from user id
+        qr = qrcode.QRCode(
+            version=1,
+            box_size=10,
+            border=5)
+        qr.add_data(user_address)
+        qr.make(fit=True)
         img_qr = qr.make_image(fill='black', back_color='white')
         filename = "/var/www/ArkCard-Linebot/ArkCard-web/qrcode/" + real_user_id + '.png'
         img_save = img_qr.save(filename)
 
         # add to db
-        result = "/qrcode/"+str(real_user_id)+'.png'
-        data = dict(userid=real_user_id, useraddress=user_address, base=result)
+        data = dict(userid=real_user_id, useraddress=user_address)
         table.insert(data)
+
+        # prepare nft for new follower
+        result3 = table2.find_one(userid=None) or table2.find_one(userid='')
+        result3['userid'] = real_user_id
+        table2.update(dict(result3), ['id'])
+
         db.close()
+
         line_bot_api.reply_message(
             event.reply_token,
             TextSendMessage(text='歡迎加入好友'))
@@ -241,6 +301,22 @@ def shop(userid):
     return rows
     db.close()
 
+# market
+@app.get("/market")
+def market():
+    # db connect
+    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4')
+
+    sql = 'SELECT * FROM arkcard.nft WHERE userid IS NULL OR userid="" LIMIT 10'
+    result = db.query(sql)
+    rows = {}
+    i = 0
+    for row in result:
+        rows[i] = row
+        i += 1
+    return rows
+    db.close()
+
 @app.post("/buy")
 async def buy(userModel : models.BuyNft):
     # db connect