This commit is contained in:
2025-10-03 19:31:41 -03:00
parent 48ed8d8345
commit 5ae2128dee
29 changed files with 996 additions and 168 deletions

View File

@@ -0,0 +1,71 @@
from io import BytesIO
from aws_lambda_powertools import Logger
from aws_lambda_powertools.event_handler.api_gateway import Router
from aws_lambda_powertools.event_handler.exceptions import (
BadRequestError,
NotFoundError,
)
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
from pydantic import UUID4, BaseModel
from python_multipart import parse_form
from boto3clients import dynamodb_client
from config import COURSE_TABLE
logger = Logger(__name__)
router = Router()
dyn = DynamoDBPersistenceLayer(COURSE_TABLE, dynamodb_client)
@router.get('/<course_id>')
def get_course(course_id: str):
return dyn.collection.get_item(
KeyPair(course_id, '0'),
exc_cls=NotFoundError,
)
class Cert(BaseModel):
exp_interval: int
rawfile: bytes
class FormData(BaseModel):
id: UUID4
name: str
access_period: int
cert: Cert | None = None
@router.post('/<course_id>')
def edit_course(course_id: str):
event = router.current_event
if not event.decoded_body:
raise BadRequestError('Invalid request body')
ret = {'id': course_id}
body = BytesIO(event.decoded_body.encode())
def on_field(field):
field_name = field.field_name.decode().split('.')
if len(field_name) > 1:
field_name, subfield_name = field_name
print(field_name, subfield_name)
else:
field_name, *_ = field_name
ret[field_name] = field.value
parse_form(
event.headers, # type: ignore
body,
on_field=on_field,
on_file=on_field,
)
# print(ret.keys())
data = FormData.model_validate(ret)
print(data)
return {}

View File

@@ -0,0 +1,19 @@
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
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
from boto3clients import dynamodb_client
from config import ENROLLMENT_TABLE
logger = Logger(__name__)
router = Router()
dyn = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client)
@router.get('/<enrollment_id>')
def get_enrollment(enrollment_id: str):
return dyn.collection.get_item(
KeyPair(enrollment_id, '0'),
exc_cls=NotFoundError,
)