67 lines
3.3 KiB
Python
67 lines
3.3 KiB
Python
import json
|
|
import logging
|
|
import pydapper
|
|
|
|
from ..schemas import model
|
|
from .. import local_db
|
|
from BreCal.database.sql_queries import SQLQuery
|
|
|
|
def GetParticipant(options):
|
|
"""
|
|
:param options: A dictionary containing all the paramters for the Operations
|
|
options["user_id"]: **Id of user**. *Example: 2*. User id returned by login call.
|
|
"""
|
|
|
|
try:
|
|
pooledConnection = local_db.getPoolConnection()
|
|
commands = pydapper.using(pooledConnection)
|
|
if "user_id" in options and options["user_id"]:
|
|
# query = SQLQuery.get_participant_by_user_id()
|
|
query = ("SELECT p.id as id, p.name as name, p.street as street, p.postal_code as postal_code, p.city as city, p.type as type, p.flags as flags, " +
|
|
"p.created as created, p.modified as modified, p.deleted as deleted FROM participant p " +
|
|
"INNER JOIN user u WHERE u.participant_id = p.id and u.id = %s") % options["user_id"]
|
|
data = commands.query(query, model=model.Participant)
|
|
for participant in data:
|
|
port_query = "SELECT port_id FROM participant_port_map WHERE participant_id=?id?"
|
|
for record in commands.query(port_query, model=model.Port_Assignment, param={"id" : participant.id}, buffered=False):
|
|
pa = model.Port_Assignment(record.port_id)
|
|
participant.ports.append(pa.port_id)
|
|
else:
|
|
# query = SQLQuery.get_participants()
|
|
if "participant_id" in options:
|
|
# list only participants that are assigned to the same ports than participant of caller
|
|
query = ("SELECT p.id as id, name, street, postal_code, city, type, flags, p.created, p.modified, p.deleted " +
|
|
"FROM participant p " +
|
|
"JOIN participant_port_map ON p.id = participant_port_map.participant_id " +
|
|
"WHERE participant_port_map.port_id IN " +
|
|
"(SELECT port_id FROM participant_port_map where participant_id = %s) " +
|
|
"GROUP BY id " +
|
|
"ORDER BY p.name") % options["participant_id"]
|
|
else:
|
|
query = ("SELECT p.id as id, name, street, postal_code, city, type, flags, p.created, p.modified, p.deleted " +
|
|
"FROM participant p " +
|
|
"JOIN participant_port_map ON p.id = participant_port_map.participant_id " +
|
|
"GROUP BY id " +
|
|
"ORDER BY p.name")
|
|
|
|
data = commands.query(query, model=model.Participant)
|
|
for participant in data:
|
|
port_query = "SELECT port_id FROM participant_port_map WHERE participant_id=?id?"
|
|
for record in commands.query(port_query, model=model.Port_Assignment, param={"id" : participant.id}, buffered=False):
|
|
pa = model.Port_Assignment(record.port_id)
|
|
participant.ports.append(pa.port_id)
|
|
|
|
return json.dumps(data, default=model.obj_dict), 200, {'Content-Type': 'application/json; charset=utf-8'}
|
|
|
|
except Exception as ex:
|
|
logging.error(ex)
|
|
print(ex)
|
|
result = {}
|
|
result["error_field"] = "call failed"
|
|
return json.dumps("call failed"), 500
|
|
|
|
finally:
|
|
if pooledConnection is not None:
|
|
pooledConnection.close()
|
|
|