From 55608791b05a626e9093ec8133e494c2600e35d0 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 14 Jul 2021 20:55:39 +0530 Subject: [PATCH] feature(api) - api for projects all, single, create (#89) --- api/chalicelib/blueprints/app/v1_api.py | 30 +++++++++++++++++++++++++ api/chalicelib/core/projects.py | 29 ++++++++++++++++++++---- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/api/chalicelib/blueprints/app/v1_api.py b/api/chalicelib/blueprints/app/v1_api.py index 4759dfbec..1d69bb8a3 100644 --- a/api/chalicelib/blueprints/app/v1_api.py +++ b/api/chalicelib/blueprints/app/v1_api.py @@ -95,3 +95,33 @@ def cancel_job(projectKey, jobId, context): return { 'data': jobs.update(job_id=jobId, job=job) } + +@app.route('/v1/projects', methods=['GET'], authorizer=bp_authorizers.api_key_authorizer) +def get_projects(context): + records = projects.get_projects(tenant_id=context['tenantId']) + for record in records: + del record['projectId'] + + return { + 'data': records + } + + +@app.route('/v1/projects/{projectKey}', methods=['GET'], authorizer=bp_authorizers.api_key_authorizer) +def get_project(projectKey, context): + return { + 'data': projects.get_project_by_key(tenant_id=context['tenantId'], project_key=projectKey) + } + + +@app.route('/v1/projects', methods=['POST'], authorizer=bp_authorizers.api_key_authorizer) +def create_project(context): + data = app.current_request.json_body + record = projects.create( + tenant_id=context['tenantId'], + user_id=None, + data=data, + skip_authorization=True + ) + del record['data']['projectId'] + return record diff --git a/api/chalicelib/core/projects.py b/api/chalicelib/core/projects.py index d85e9c8ca..01c87468b 100644 --- a/api/chalicelib/core/projects.py +++ b/api/chalicelib/core/projects.py @@ -95,11 +95,32 @@ def get_project(tenant_id, project_id, include_last_session=False, include_gdpr= row = cur.fetchone() return helper.dict_to_camel_case(row) +def get_project_by_key(tenant_id, project_key, include_last_session=False, include_gdpr=None): + with pg_client.PostgresClient() as cur: + query = cur.mogrify(f"""\ + SELECT + s.project_key, + s.name + {",(SELECT max(ss.start_ts) FROM public.sessions AS ss WHERE ss.project_key = %(project_key)s) AS last_recorded_session_at" if include_last_session else ""} + {',s.gdpr' if include_gdpr else ''} + FROM public.projects AS s + where s.project_key =%(project_key)s + AND s.deleted_at IS NULL + LIMIT 1;""", + {"project_key": project_key}) -def create(tenant_id, user_id, data): - admin = users.get(user_id=user_id, tenant_id=tenant_id) - if not admin["admin"] and not admin["superAdmin"]: - return {"errors": ["unauthorized"]} + cur.execute( + query=query + ) + row = cur.fetchone() + return helper.dict_to_camel_case(row) + + +def create(tenant_id, user_id, data, skip_authorization=False): + if not skip_authorization: + admin = users.get(user_id=user_id, tenant_id=tenant_id) + if not admin["admin"] and not admin["superAdmin"]: + return {"errors": ["unauthorized"]} return {"data": __create(tenant_id=tenant_id, name=data.get("name", "my first project"))}