This commit is contained in:
2025-06-06 18:32:09 -03:00
parent 3e44761e69
commit 53613d0a48
34 changed files with 939 additions and 752 deletions

View File

@@ -11,24 +11,30 @@ from aws_lambda_powertools.event_handler.api_gateway import (
)
from aws_lambda_powertools.event_handler.exceptions import ServiceError
from aws_lambda_powertools.logging import correlation_paths
from aws_lambda_powertools.shared.json_encoder import Encoder
from aws_lambda_powertools.utilities.typing import LambdaContext
from api_gateway import JSONResponse
from middlewares import AuthenticationMiddleware
from routes import courses, enrollments, lookup, orders, orgs, settings, users, webhooks
from routes import (
courses,
enrollments,
enrollments_,
lookup,
orders,
orgs,
settings,
users,
webhooks,
)
class JSONEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, date):
return o.isoformat()
class JSONEncoder(Encoder):
def default(self, obj):
if isinstance(obj, date):
return obj.isoformat()
return super().default(o)
def foo(obj):
print(obj)
return json.dumps(obj, separators=(',', ':'), cls=JSONEncoder)
return super().default(obj)
tracer = Tracer()
@@ -48,6 +54,7 @@ app = APIGatewayHttpResolver(
app.use(middlewares=[AuthenticationMiddleware()])
app.include_router(courses.router, prefix='/courses')
app.include_router(enrollments.router, prefix='/enrollments')
app.include_router(enrollments_.router, prefix='/new/enrollments')
app.include_router(enrollments.vacancies, prefix='/enrollments')
app.include_router(enrollments.enroll, prefix='/enrollments')
app.include_router(enrollments.cancel, prefix='/enrollments')

View File

@@ -9,8 +9,11 @@ def get_dynamodb_client():
if os.getenv('AWS_LAMBDA_FUNCTION_NAME') and not running_sam_local:
return boto3.client('dynamodb')
url = 'host.docker.internal' if running_sam_local else 'localhost'
return boto3.client('dynamodb', endpoint_url=f'http://{url}:8000')
docker_host = 'host.docker.internal'
local_host = '127.0.0.1'
host = docker_host if running_sam_local else local_host
return boto3.client('dynamodb', endpoint_url=f'http://{host}:8000')
dynamodb_client = get_dynamodb_client()

View File

@@ -3,6 +3,7 @@ import os
USER_TABLE: str = os.getenv('USER_TABLE') # type: ignore
ORDER_TABLE: str = os.getenv('ORDER_TABLE') # type: ignore
ENROLLMENT_TABLE: str = os.getenv('ENROLLMENT_TABLE') # type: ignore
NEW_ENROLLMENT_TABLE: str = os.getenv('NEW_ENROLLMENT_TABLE') # type: ignore
COURSE_TABLE: str = os.getenv('COURSE_TABLE') # type: ignore
KONVIVA_API_URL: str = os.getenv('KONVIVA_API_URL') # type: ignore

View File

@@ -1,4 +1,4 @@
from typing import Annotated, Literal
from typing import Annotated, Any, Literal
from uuid import uuid4
from layercake.extra_types import CnpjStr, CpfStr, NameStr
@@ -45,3 +45,11 @@ class Enrollment(BaseModel):
course: Course
progress: int = Field(default=0, ge=0, le=100)
status: Literal['PENDING'] = 'PENDING'
def model_dump(
self,
exclude=None,
*args,
**kwargs,
) -> dict[str, Any]:
return super().model_dump(exclude={'user': {'email_verified'}}, *args, **kwargs)

View File

@@ -2,7 +2,7 @@ from http import HTTPStatus
from aws_lambda_powertools.event_handler.api_gateway import Router
from aws_lambda_powertools.event_handler.exceptions import NotFoundError
from layercake.dynamodb import DynamoDBCollection, DynamoDBPersistenceLayer, KeyPair
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
from meilisearch import Client as Meilisearch
from api_gateway import JSONResponse
@@ -18,7 +18,6 @@ from models import Course, Org
from rules.course import create_course, update_course
router = Router()
meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY)
course_layer = DynamoDBPersistenceLayer(COURSE_TABLE, dynamodb_client)
user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client)