59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
from layercake.dateutils import now
|
|
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair, TransactItems
|
|
|
|
from models import Course, Org
|
|
|
|
|
|
def create_course(
|
|
course: Course,
|
|
org: Org,
|
|
/,
|
|
persistence_layer: DynamoDBPersistenceLayer,
|
|
):
|
|
now_ = now()
|
|
transact = TransactItems(persistence_layer.table_name)
|
|
transact.put(
|
|
item={
|
|
'sk': '0',
|
|
'tenant__org_id': {org.id},
|
|
'create_date': now_,
|
|
**course.model_dump(),
|
|
}
|
|
)
|
|
transact.put(
|
|
item={
|
|
'id': course.id,
|
|
'sk': 'metadata#tenant',
|
|
'org_id': org.id,
|
|
'name': org.name,
|
|
'create_date': now_,
|
|
}
|
|
)
|
|
return persistence_layer.transact_write_items(transact)
|
|
|
|
|
|
def update_course(
|
|
id: str,
|
|
course: Course,
|
|
/,
|
|
persistence_layer: DynamoDBPersistenceLayer,
|
|
):
|
|
now_ = now()
|
|
transact = TransactItems(persistence_layer.table_name)
|
|
transact.update(
|
|
key=KeyPair(id, '0'),
|
|
update_expr='SET #name = :name, access_period = :access_period, \
|
|
cert = :cert, update_date = :update_date',
|
|
expr_attr_names={
|
|
'#name': 'name',
|
|
},
|
|
expr_attr_values={
|
|
':name': course.name,
|
|
':cert': course.cert.model_dump() if course.cert else None,
|
|
':access_period': course.access_period,
|
|
':update_date': now_,
|
|
},
|
|
cond_expr='attribute_exists(sk)',
|
|
)
|
|
return persistence_layer.transact_write_items(transact)
|