add discount

This commit is contained in:
2025-12-24 01:40:07 -03:00
parent 1a59ad9e91
commit 2459bafc5d
16 changed files with 423 additions and 132 deletions

View File

@@ -15,7 +15,7 @@ from aws_lambda_powertools.utilities.typing import LambdaContext
from api_gateway import JSONResponse
from json_encoder import JSONEncoder
from middlewares.authentication_middleware import AuthenticationMiddleware
from routes import courses, enrollments, orders, orgs, users
from routes import coupons, courses, enrollments, orders, orgs, users
logger = Logger(__name__)
tracer = Tracer()
@@ -35,6 +35,7 @@ app = APIGatewayHttpResolver(
)
app.use(middlewares=[AuthenticationMiddleware()])
app.enable_swagger(path='/swagger')
app.include_router(coupons.router, prefix='/coupons')
app.include_router(courses.router, prefix='/courses')
app.include_router(enrollments.router, prefix='/enrollments')
app.include_router(enrollments.cancel, prefix='/enrollments')

View File

@@ -0,0 +1,25 @@
from typing import Annotated
from aws_lambda_powertools.event_handler.api_gateway import Router
from aws_lambda_powertools.event_handler.exceptions import (
NotFoundError,
)
from aws_lambda_powertools.event_handler.openapi.params import Path
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair
from boto3clients import dynamodb_client
from config import ORDER_TABLE
router = Router()
dyn = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client)
class CouponNotFoundError(NotFoundError): ...
@router.get('/<coupon>')
def coupon(coupon: Annotated[str, Path(min_length=3)]):
return dyn.collection.get_item(
KeyPair('COUPON', coupon.upper()),
exc_cls=CouponNotFoundError,
)

View File

@@ -17,6 +17,7 @@ SK = 'sk'
def pytest_configure():
os.environ['TZ'] = 'America/Sao_Paulo'
os.environ['COURSE_TABLE'] = PYTEST_TABLE_NAME
os.environ['ORDER_TABLE'] = PYTEST_TABLE_NAME
os.environ['USER_TABLE'] = PYTEST_TABLE_NAME
os.environ['ENROLLMENT_TABLE'] = PYTEST_TABLE_NAME
os.environ['BUCKET_NAME'] = 'saladeaula.digital'

View File

@@ -0,0 +1,19 @@
from http import HTTPMethod, HTTPStatus
from ..conftest import HttpApiProxy, LambdaContext
def test_get_coupon(
app,
seeds,
http_api_proxy: HttpApiProxy,
lambda_context: LambdaContext,
):
r = app.lambda_handler(
http_api_proxy(
raw_path='/coupons/10off',
method=HTTPMethod.GET,
),
lambda_context,
)
assert r['statusCode'] == HTTPStatus.OK

View File

@@ -39,3 +39,8 @@
// Course scormset
{"id": "c27d1b4f-575c-4b6b-82a1-9b91ff369e0b", "sk": "SCORMSET#76c75561-d972-43ef-9818-497d8fc6edbe", "packages": [{"version": "1.2", "scormdriver": "s3://saladeaula.digital/scorm/nr-33-espacos-confinados-conteudo-de-demonstracao-scorm12/scormdriver/indexAPI.html"}]}
// Discounts
{"id": "COUPON", "sk": "PRIMEIRACOMPRA", "discount_amount": 15, "discount_type": "FIXED", "created_at": "2025-12-24T00:05:27-03:00"}
{"id": "COUPON", "sk": "10OFF", "discount_amount": 10, "discount_type": "PERCENT", "created_at": "2025-12-24T00:05:27-03:00"}