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': '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)