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_,
}
)

View File

@@ -23,10 +23,10 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
# r = dyn.get_item(KeyPair(new_image['id'], 'KONVIVA'))
try:
result = konviva.cancel_enrollment(r['enrollment_id'])
r = konviva.cancel_enrollment(r['enrollment_id'])
except Exception as exc:
logger.exception(exc)
return False
else:
logger.info('Enrollment canceled', result=result)
logger.info('Enrollment canceled', result=r)
return True

View File

@@ -35,10 +35,10 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
except konviva.EmailAlreadyExistsError as exc:
logger.exception(exc, email=new_image['email'])
result = konviva.get_users_by_email(new_image['email'])
user_id = glom(result, '0.IDUsuario')
r = konviva.get_users_by_email(new_image['email'])
user_id = glom(r, '0.IDUsuario')
if not result:
if not r:
raise UserNotFoundError('User not found')
except Exception:
raise

View File

@@ -31,10 +31,10 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
payload.update(CPF=new_image['cpf'])
try:
result = konviva.update_user(id=user_id, **payload)
r = konviva.update_user(id=user_id, **payload)
except Exception as exc:
logger.exception(exc)
return False
else:
logger.info('User updated', result=result, payload=payload)
logger.info('User updated', result=r, payload=payload)
return True

View File

@@ -20,7 +20,7 @@ Globals:
Architectures:
- x86_64
Layers:
- !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:96
- !Sub arn:aws:lambda:sa-east-1:336641857101:layer:layercake:99
Environment:
Variables:
TZ: America/Sao_Paulo

View File

@@ -497,7 +497,7 @@ dev = [
[[package]]
name = "layercake"
version = "0.10.1"
version = "0.11.0"
source = { directory = "../layercake" }
dependencies = [
{ name = "arnparse" },