71 lines
2.9 KiB
Python
71 lines
2.9 KiB
Python
import schemas
|
|
from chalicelib.utils import pg_client
|
|
|
|
|
|
def add_favorite_session(context: schemas.CurrentContext, project_id, session_id):
|
|
with pg_client.PostgresClient() as cur:
|
|
cur.execute(
|
|
cur.mogrify(f"""\
|
|
INSERT INTO public.user_favorite_sessions(user_id, session_id)
|
|
VALUES (%(userId)s,%(session_id)s)
|
|
RETURNING session_id;""",
|
|
{"userId": context.user_id, "session_id": session_id})
|
|
)
|
|
row = cur.fetchone()
|
|
if row:
|
|
return {"data": {"sessionId": session_id}}
|
|
return {"errors": ["something went wrong"]}
|
|
|
|
|
|
def remove_favorite_session(context: schemas.CurrentContext, project_id, session_id):
|
|
with pg_client.PostgresClient() as cur:
|
|
cur.execute(
|
|
cur.mogrify(f"""\
|
|
DELETE FROM public.user_favorite_sessions
|
|
WHERE user_id = %(userId)s
|
|
AND session_id = %(session_id)s
|
|
RETURNING session_id;""",
|
|
{"userId": context.user_id, "session_id": session_id})
|
|
)
|
|
row = cur.fetchone()
|
|
if row:
|
|
return {"data": {"sessionId": session_id}}
|
|
return {"errors": ["something went wrong"]}
|
|
|
|
|
|
def favorite_session(context: schemas.CurrentContext, project_id, session_id):
|
|
if favorite_session_exists(user_id=context.user_id, session_id=session_id):
|
|
return remove_favorite_session(context=context, project_id=project_id,
|
|
session_id=session_id)
|
|
|
|
return add_favorite_session(context=context, project_id=project_id, session_id=session_id)
|
|
|
|
|
|
def favorite_session_exists(session_id, user_id=None):
|
|
with pg_client.PostgresClient() as cur:
|
|
cur.execute(
|
|
cur.mogrify(
|
|
f"""SELECT session_id
|
|
FROM public.user_favorite_sessions
|
|
WHERE
|
|
session_id = %(session_id)s
|
|
{'AND user_id = %(userId)s' if user_id else ''};""",
|
|
{"userId": user_id, "session_id": session_id})
|
|
)
|
|
r = cur.fetchone()
|
|
return r is not None
|
|
|
|
|
|
def get_start_end_timestamp(project_id, user_id):
|
|
with pg_client.PostgresClient() as cur:
|
|
cur.execute(
|
|
cur.mogrify(
|
|
"""SELECT max(start_ts) AS max_start_ts, min(start_ts) AS min_start_ts
|
|
FROM public.user_favorite_sessions INNER JOIN sessions USING(session_id)
|
|
WHERE
|
|
user_favorite_sessions.user_id = %(userId)s
|
|
AND project_id = %(project_id)s;""",
|
|
{"userId": user_id, "project_id": project_id})
|
|
)
|
|
r = cur.fetchone()
|
|
return (0, 0) if r is None else (r["min_start_ts"], r["max_start_ts"])
|