diff --git a/api.saladeaula.digital/app/routes/courses/__init__.py b/api.saladeaula.digital/app/routes/courses/__init__.py index 2541807..59727b6 100644 --- a/api.saladeaula.digital/app/routes/courses/__init__.py +++ b/api.saladeaula.digital/app/routes/courses/__init__.py @@ -3,9 +3,9 @@ from datetime import datetime from http import HTTPStatus from io import BytesIO from typing import Annotated, Any +from urllib.parse import urlparse import requests -from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler.api_gateway import Response, Router from aws_lambda_powertools.event_handler.exceptions import ( BadRequestError, @@ -21,7 +21,6 @@ from boto3clients import dynamodb_client, s3_client from config import BUCKET_NAME, COURSE_TABLE, PAPERFORGE_API from form_data import parse -logger = Logger(__name__) router = Router() dyn = DynamoDBPersistenceLayer(COURSE_TABLE, dynamodb_client) @@ -134,6 +133,25 @@ def sample(course_id: str, s3_uri: Annotated[str, Body(embed=True)]): ) +@router.post('//template') +def template(course_id: str, s3_uri: Annotated[str, Body(embed=True)]): + parsed = urlparse(s3_uri) + + bucket = parsed.netloc + object_key = parsed.path.lstrip('/') + + r = s3_client.get_object(Bucket=bucket, Key=object_key) + + return Response( + body=r['Body'].read(), + content_type='text/html', + status_code=HTTPStatus.OK, + headers={ + 'Content-Disposition': f'attachment; filename="{course_id}.html"', + }, + ) + + def _datefmt(dt: datetime) -> str: months = [ 'Janeiro', diff --git a/api.saladeaula.digital/app/routes/orders/__init__.py b/api.saladeaula.digital/app/routes/orders/__init__.py index 498433d..24da2c8 100644 --- a/api.saladeaula.digital/app/routes/orders/__init__.py +++ b/api.saladeaula.digital/app/routes/orders/__init__.py @@ -1,4 +1,3 @@ -from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler.api_gateway import Router from aws_lambda_powertools.event_handler.exceptions import ( NotFoundError, @@ -8,7 +7,6 @@ from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair from boto3clients import dynamodb_client from config import ORDER_TABLE -logger = Logger(__name__) router = Router() dyn = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client) diff --git a/api.saladeaula.digital/app/routes/users/__init__.py b/api.saladeaula.digital/app/routes/users/__init__.py index 4ce0fc9..f7919a5 100644 --- a/api.saladeaula.digital/app/routes/users/__init__.py +++ b/api.saladeaula.digital/app/routes/users/__init__.py @@ -1,4 +1,3 @@ -from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler.api_gateway import Router from aws_lambda_powertools.event_handler.exceptions import ( NotFoundError, @@ -13,7 +12,6 @@ from .orgs import router as orgs __all__ = ['emails', 'orgs'] -logger = Logger(__name__) router = Router() dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) diff --git a/api.saladeaula.digital/app/routes/users/emails.py b/api.saladeaula.digital/app/routes/users/emails.py index 81cec01..e9c29bc 100644 --- a/api.saladeaula.digital/app/routes/users/emails.py +++ b/api.saladeaula.digital/app/routes/users/emails.py @@ -1,11 +1,9 @@ -from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler.api_gateway import Router from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair from boto3clients import dynamodb_client from config import USER_TABLE -logger = Logger(__name__) router = Router() dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) diff --git a/api.saladeaula.digital/app/routes/users/orgs.py b/api.saladeaula.digital/app/routes/users/orgs.py index 013c12d..3114234 100644 --- a/api.saladeaula.digital/app/routes/users/orgs.py +++ b/api.saladeaula.digital/app/routes/users/orgs.py @@ -1,11 +1,9 @@ -from aws_lambda_powertools import Logger from aws_lambda_powertools.event_handler.api_gateway import Router from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair from boto3clients import dynamodb_client from config import USER_TABLE -logger = Logger(__name__) router = Router() dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) @@ -13,9 +11,11 @@ dyn = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) @router.get('//orgs') def get_orgs(user_id: str): start_key = router.current_event.get_query_string_value('start_key', None) + limit = int(router.current_event.get_query_string_value('limit', '25')) return dyn.collection.query( # Post-migration (users): rename `orgs` to `ORG` key=KeyPair(user_id, 'orgs#'), start_key=start_key, + limit=limit, ) diff --git a/api.saladeaula.digital/tests/routes/test_courses.py b/api.saladeaula.digital/tests/routes/test_courses.py index de6949d..a12f2a8 100644 --- a/api.saladeaula.digital/tests/routes/test_courses.py +++ b/api.saladeaula.digital/tests/routes/test_courses.py @@ -82,3 +82,23 @@ def test_sample( lambda_context, ) assert r['statusCode'] == HTTPStatus.OK + + +def test_template( + app, + seeds, + dynamodb_persistence_layer: DynamoDBPersistenceLayer, + http_api_proxy: HttpApiProxy, + lambda_context: LambdaContext, +): + r = app.lambda_handler( + http_api_proxy( + raw_path='/courses/2a8963fc-4694-4fe2-953a-316d1b10f1f5/template', + method=HTTPMethod.POST, + body={ + 's3_uri': 's3://saladeaula.digital/certs/samples/cipa-grau-de-risco-1.html', + }, + ), + lambda_context, + ) + assert r['statusCode'] == HTTPStatus.OK