Parcourir la source

extending api for admin ui usage

clementinecomputing il y a 5 ans
Parent
commit
07f2976c38
1 fichiers modifiés avec 130 ajouts et 44 suppressions
  1. 130 44
      server/scripts/PopufareAPI.py

+ 130 - 44
server/scripts/PopufareAPI.py

@@ -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()
+