|
|
@@ -24,9 +24,15 @@ import json
|
|
|
import mysql.connector
|
|
|
import time
|
|
|
import datetime
|
|
|
+import copy
|
|
|
|
|
|
#conn = mysql.connector.connect(user='bus', password='bus', host='localhost', database='busdb', port=3306)
|
|
|
-conn = mysql.connector.connect(user='busapi', password='bus', host='localhost', database='busdb', port=5506)
|
|
|
+
|
|
|
+_USER = 'busapi'
|
|
|
+_PASSWORD = 'bus'
|
|
|
+_HOST = 'localhost'
|
|
|
+_DATABASE = 'busdb'
|
|
|
+_PORT = 5506
|
|
|
|
|
|
Function = [
|
|
|
"User",
|
|
|
@@ -57,6 +63,66 @@ USER_FIELDS = ["username", "comment", "first_name", "last_name", "phone",
|
|
|
"shipping_address", "shipping_city", "shipping_state", "shipping_zip",
|
|
|
"shipping_name", "shipping_country_code", "shipping_country_name"]
|
|
|
|
|
|
+def Request(ctx):
|
|
|
+ _conn = mysql.connector.connect(user=_USER, password=_PASSWORD, host=_HOST, database=_DATABASE, port=_PORT)
|
|
|
+
|
|
|
+ res = {}
|
|
|
+ if "function" in ctx:
|
|
|
+ if ctx["function"] == "CardInfo":
|
|
|
+ res = CardInfo(_conn, ctx)
|
|
|
+ elif ctx["function"] == "UserInfo":
|
|
|
+ res = UserInfo(_conn, ctx)
|
|
|
+ elif ctx["function"] == "User":
|
|
|
+ res = User(_conn, ctx)
|
|
|
+ elif ctx["function"] == "Card":
|
|
|
+ res = Card(_conn, ctx)
|
|
|
+ elif ctx["function"] == "Pass":
|
|
|
+ res = Pass(_conn, ctx)
|
|
|
+
|
|
|
+ _conn.close()
|
|
|
+
|
|
|
+ return res
|
|
|
+
|
|
|
+
|
|
|
+def CardInfo(db, ctx):
|
|
|
+ card_res = {}
|
|
|
+
|
|
|
+ action = "get"
|
|
|
+ if "action" in ctx:
|
|
|
+ action = ctx["action"]
|
|
|
+
|
|
|
+ if action == "get":
|
|
|
+
|
|
|
+ cardid = -1
|
|
|
+ if "logical_card_id" in ctx:
|
|
|
+ cardid = ctx["logical_card_id"]
|
|
|
+ card_res["logical_card_id"] = cardid
|
|
|
+
|
|
|
+ card_res = Card(db, {"action":"get", "logical_card_id": cardid})
|
|
|
+ card_res["pass"] = []
|
|
|
+
|
|
|
+ ## through each of the passes on the card
|
|
|
+ ##
|
|
|
+ pass_query = "select user_pass_id from user_pass where logical_card_id = %s and active = 1 and expired = 0 order by queue_order asc"
|
|
|
+ pass_cursor = db.cursor()
|
|
|
+ pass_cursor.execute(pass_query, [card_res["logical_card_id"]])
|
|
|
+ pass_rows = pass_cursor.fetchall()
|
|
|
+ for pass_row in pass_rows:
|
|
|
+
|
|
|
+ pass_res = Pass(db, {"action":"get", "user_pass_id":pass_row[0]})
|
|
|
+ card_res["pass"].append(pass_res)
|
|
|
+
|
|
|
+ elif action == "search":
|
|
|
+
|
|
|
+ card_res["cards"] = []
|
|
|
+ res_cardid = Card(db, ctx)
|
|
|
+ for cid in res_cardid["logical_card_ids"]:
|
|
|
+ _c = CardInfo(db, {"action":"get", "logical_card_id":cid})
|
|
|
+ card_res["cards"].append(_c)
|
|
|
+
|
|
|
+ return card_res
|
|
|
+
|
|
|
+
|
|
|
def UserInfo(db, ctx):
|
|
|
res = {}
|
|
|
userid = -1
|
|
|
@@ -79,7 +145,11 @@ def UserInfo(db, ctx):
|
|
|
query = "select " + ",".join(fields) + " from users where userid = %s"
|
|
|
cursor.execute(query, [userid])
|
|
|
row = cursor.fetchone()
|
|
|
- for idx,f in enumerate(pass_fields):
|
|
|
+ if row is None:
|
|
|
+ res["api_comment"] = "user not found"
|
|
|
+ return res
|
|
|
+
|
|
|
+ for idx,f in enumerate(user_fields):
|
|
|
res["user"][f] = row[idx]
|
|
|
|
|
|
## go through each card and fill in card data and pass data
|
|
|
@@ -90,26 +160,11 @@ def UserInfo(db, ctx):
|
|
|
card_cursor.execute(query, [userid])
|
|
|
rows = card_cursor.fetchall()
|
|
|
for row in rows:
|
|
|
-
|
|
|
- card_res = Card(db, {"action":"get", "logical_card_id": row[0]})
|
|
|
- card_res["pass"] = []
|
|
|
-
|
|
|
- ## finally, go through each pass
|
|
|
- ##
|
|
|
- pass_query = "select user_pass_id from user_pass where logical_card_id = %s and active = 1 and expired = 0 order by queue_order asc"
|
|
|
- pass_cursor = db.cursor()
|
|
|
- pass_cursor.execute(pass_query, [card_res["logical_card_id"]])
|
|
|
- pass_rows = pass_cursor.fetchall()
|
|
|
- for pass_row in pass_rows:
|
|
|
-
|
|
|
- pass_res = Pass(db, {"action":"get", "user_pass_id":pass_row[0]})
|
|
|
- card_res["pass"].append(pass_res)
|
|
|
-
|
|
|
+ card_res = CardInfo(db, {"logical_card_id":row[0]})
|
|
|
res["card"].append(card_res)
|
|
|
|
|
|
return res
|
|
|
|
|
|
-
|
|
|
def Pass(db, ctx):
|
|
|
res = {}
|
|
|
passid = -1
|
|
|
@@ -127,12 +182,15 @@ def Pass(db, ctx):
|
|
|
cursor.execute(query, [passid])
|
|
|
row = cursor.fetchone()
|
|
|
|
|
|
- res["user_pass_id"] = passid
|
|
|
- for idx,f in enumerate(pass_fields):
|
|
|
- if isinstance(row[idx], datetime.datetime):
|
|
|
- res[f] = row[idx].strftime("%Y-%M-%d %H:%m:%S")
|
|
|
- else:
|
|
|
- res[f] = row[idx]
|
|
|
+ if row is not None:
|
|
|
+ res["user_pass_id"] = passid
|
|
|
+ for idx,f in enumerate(pass_fields):
|
|
|
+ if isinstance(row[idx], datetime.datetime):
|
|
|
+ res[f] = row[idx].strftime("%Y-%M-%d %H:%m:%S")
|
|
|
+ else:
|
|
|
+ res[f] = row[idx]
|
|
|
+ else:
|
|
|
+ res["api_comment"] = "pass not found"
|
|
|
|
|
|
|
|
|
elif (ctx["action"] == "add"):
|
|
|
@@ -185,12 +243,15 @@ def Card(db, ctx):
|
|
|
cursor.execute(query, [cardid])
|
|
|
row = cursor.fetchone()
|
|
|
|
|
|
- res["logical_card_id"] = cardid
|
|
|
- for idx,f in enumerate(card_fields):
|
|
|
- if isinstance(row[idx], datetime.datetime):
|
|
|
- res[f] = row[idx].strftime("%Y-%M-%d %H:%m:%S")
|
|
|
- else:
|
|
|
- res[f] = row[idx]
|
|
|
+ if row is not None:
|
|
|
+ res["logical_card_id"] = cardid
|
|
|
+ for idx,f in enumerate(card_fields):
|
|
|
+ if isinstance(row[idx], datetime.datetime):
|
|
|
+ res[f] = row[idx].strftime("%Y-%M-%d %H:%m:%S")
|
|
|
+ else:
|
|
|
+ res[f] = row[idx]
|
|
|
+ else:
|
|
|
+ res["api_comment"] = "card not found"
|
|
|
|
|
|
elif (ctx["action"] == "add"):
|
|
|
|
|
|
@@ -215,6 +276,9 @@ def Card(db, ctx):
|
|
|
update_val.append(cardid)
|
|
|
|
|
|
query = "update user_card set " + ",".join(update_field) + " where logical_card_id = %s"
|
|
|
+
|
|
|
+ print(">>>", query, update_val)
|
|
|
+
|
|
|
cursor.execute(query, update_val)
|
|
|
res["logical_card_id"] = cardid
|
|
|
|
|
|
@@ -226,14 +290,23 @@ def Card(db, ctx):
|
|
|
|
|
|
query = "select logical_card_id from user_card where "
|
|
|
|
|
|
+ n_search = 0
|
|
|
+
|
|
|
+ if "logical_card_id" in ctx:
|
|
|
+ query += " logical_card_id = %s"
|
|
|
+ field_vals.append( ctx["logical_card_id"])
|
|
|
+ n_search += 1
|
|
|
+
|
|
|
if "mag_token" in ctx:
|
|
|
query += " mag_token like %s "
|
|
|
- field_vals.append( '%' + ctx["mag_token"])
|
|
|
+ field_vals.append( '%' + ctx["mag_token"] + '%')
|
|
|
+ n_search += 1
|
|
|
|
|
|
if "rfid_token" in ctx:
|
|
|
if len(field_vals)>0: query += " and "
|
|
|
query += " rfid_token like %s "
|
|
|
- field_vals.append( '%' + ctx["rfid_token"])
|
|
|
+ field_vals.append( '%' + ctx["rfid_token"] + '%')
|
|
|
+ n_search += 1
|
|
|
|
|
|
query_limit = " "
|
|
|
if "limit" in ctx:
|
|
|
@@ -241,13 +314,13 @@ def Card(db, ctx):
|
|
|
search_vals.append(ctx["limit"])
|
|
|
query += query_limit
|
|
|
|
|
|
- cursor.execute(query, field_vals)
|
|
|
+ res["logical_card_ids"] = []
|
|
|
|
|
|
- res["cardids"] = []
|
|
|
-
|
|
|
- rows = cursor.fetchall()
|
|
|
- for row in rows:
|
|
|
- res["cardids"].append(row[0])
|
|
|
+ if n_search > 0:
|
|
|
+ cursor.execute(query, field_vals)
|
|
|
+ rows = cursor.fetchall()
|
|
|
+ for row in rows:
|
|
|
+ res["logical_card_ids"].append(row[0])
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
@@ -269,12 +342,15 @@ def User(db, ctx):
|
|
|
cursor.execute(query, [userid])
|
|
|
row = cursor.fetchone()
|
|
|
|
|
|
- res["userid"] = userid
|
|
|
- for idx,f in enumerate(user_fields):
|
|
|
- if isinstance(row[idx], datetime.datetime):
|
|
|
- res[f] = row[idx].strftime("%Y-%M-%d %H:%m:%S")
|
|
|
- else:
|
|
|
- res[f] = row[idx]
|
|
|
+ if row is not None:
|
|
|
+ res["userid"] = userid
|
|
|
+ for idx,f in enumerate(user_fields):
|
|
|
+ if isinstance(row[idx], datetime.datetime):
|
|
|
+ res[f] = row[idx].strftime("%Y-%M-%d %H:%m:%S")
|
|
|
+ else:
|
|
|
+ res[f] = row[idx]
|
|
|
+ else:
|
|
|
+ res["api_comment"] = "user not found"
|
|
|
|
|
|
|
|
|
elif (ctx["action"] == "add"):
|
|
|
@@ -395,5 +471,15 @@ def main(db):
|
|
|
res = UserInfo(db, {"userid":348})
|
|
|
print("userinfo:", json.dumps(res, indent=2))
|
|
|
|
|
|
+ print("---------")
|
|
|
+ print("---------")
|
|
|
+ print("---------")
|
|
|
+
|
|
|
+ res = Request({"function":"CardInfo", "action":"search", "logical_card_id":1})
|
|
|
+ print("request.card.search:", res)
|
|
|
+
|
|
|
if __name__ == "__main__":
|
|
|
+ conn = mysql.connector.connect(user=_USER, password=_PASSWORD, host=_HOST, database=_DATABASE, port=_PORT)
|
|
|
main(conn)
|
|
|
+ conn.close()
|
|
|
+
|