add enrollments to order

This commit is contained in:
2026-01-25 20:47:21 -03:00
parent 3719842ae9
commit 0d1258f666
11 changed files with 303 additions and 64 deletions

View File

@@ -18,7 +18,7 @@ from pydantic import (
)
from typing_extensions import NotRequired
from config import DEDUP_WINDOW_OFFSET_DAYS, USER_TABLE
from config import DEDUP_WINDOW_OFFSET_DAYS, ORDER_TABLE, USER_TABLE
class User(BaseModel):
@@ -107,6 +107,11 @@ class SeatNotFoundError(Exception):
super().__init__('Seat required')
class OrderNotFoundError(Exception):
def __init__(self, msg: str | dict):
super().__init__('Order not found')
def enroll(
enrollment: Enrollment,
*,
@@ -150,6 +155,26 @@ def enroll(
| ({'seat': seat} if seat else {})
)
if seat:
transact.condition(
key=KeyPair(str(seat['order_id']), '0'),
cond_expr='attribute_exists(sk)',
exc_cls=OrderNotFoundError,
table_name=ORDER_TABLE,
)
transact.put(
item={
'id': seat['order_id'],
'sk': f'ENROLLMENT#{enrollment.id}',
'course': course.model_dump(),
'user': user.model_dump(),
'status': 'EXECUTED',
'executed_at': now_,
'created_at': now_,
},
table_name=ORDER_TABLE,
)
# Relationships between this enrollment and its related entities
for entity in linked_entities:
# Parent knows the child