add cert_expires_at

This commit is contained in:
2025-10-15 15:10:47 -03:00
parent 54c92b3996
commit ffa04d9b15
37 changed files with 371 additions and 230 deletions

View File

@@ -1,20 +1,17 @@
from decimal import Decimal
from aws_lambda_powertools import Logger
from aws_lambda_powertools.event_handler.exceptions import (
BadRequestError,
NotFoundError,
)
from botocore.args import logger
from glom import glom
from layercake.dateutils import now, ttl
from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair, SortKey, TransactKey
from layercake.strutils import md5_hash
from boto3clients import dynamodb_client
from config import COURSE_TABLE
# @TODO Find a better way
course_layer = DynamoDBPersistenceLayer(COURSE_TABLE, dynamodb_client)
logger = Logger(__name__)
def update_progress(
@@ -119,15 +116,8 @@ def set_score(
),
)
user_id = enrollment['user']['id']
course_id = glom(enrollment, 'course.id')
exp_interval = course_layer.collection.get_item(
KeyPair(
pk=course_id,
sk=SortKey('0', path_spec='cert.exp_interval'),
),
raise_on_error=False,
default=0,
)
course_id = enrollment['course']['id']
dedup_window_offset_days = int(enrollment['dedup_window_offset_days'])
try:
if score >= 70:
@@ -138,8 +128,7 @@ def set_score(
progress=progress,
user_id=user_id,
course_id=course_id,
cert_exp_interval=int(exp_interval),
dedup_window_offset_days=int(enrollment['dedup_window_offset_days']),
dedup_window_offset_days=dedup_window_offset_days,
dynamodb_persistence_layer=dynamodb_persistence_layer,
)
@@ -165,23 +154,21 @@ def _set_status_as_completed(
*,
user_id: str,
course_id: str,
cert_exp_interval: int,
dedup_window_offset_days: int,
dynamodb_persistence_layer: DynamoDBPersistenceLayer,
) -> bool:
now_ = now()
lock_hash = md5_hash(f'{user_id}{course_id}')
cert_exp_ttl = ttl(
start_dt=now_,
days=cert_exp_interval,
)
cert_exp_reminder_ttl = ttl(
start_dt=now_,
days=cert_exp_interval - 30,
)
dedup_lock_ttl = ttl(
start_dt=now_,
days=cert_exp_interval - dedup_window_offset_days,
exp_interval = int(
dynamodb_persistence_layer.collection.get_item(
KeyPair(
pk=course_id,
sk=SortKey('0', path_spec='cert.exp_interval'),
table_name=COURSE_TABLE,
),
raise_on_error=False,
default=0,
)
)
with dynamodb_persistence_layer.transact_writer() as transact:
@@ -204,12 +191,17 @@ def _set_status_as_completed(
exc_cls=EnrollmentConflictError,
)
if cert_exp_interval:
if exp_interval:
dedup_lock_ttl = ttl(
start_dt=now_,
days=exp_interval - dedup_window_offset_days,
)
transact.put(
item={
'id': id,
'sk': 'SCHEDULE#SET_CERT_EXPIRED',
'ttl': cert_exp_ttl,
'ttl': ttl(start_dt=now_, days=exp_interval),
'created_at': now_,
}
)
@@ -217,7 +209,7 @@ def _set_status_as_completed(
item={
'id': id,
'sk': 'SCHEDULE#REMINDER_CERT_EXPIRATION_BEFORE_30_DAYS',
'ttl': cert_exp_reminder_ttl,
'ttl': ttl(start_dt=now_, days=exp_interval - 30),
'created_at': now_,
}
)