add user if exists on konviva

This commit is contained in:
2025-07-11 13:55:32 -03:00
parent bd6fbf7166
commit 1b710c81f6
23 changed files with 1633 additions and 68 deletions

View File

@@ -15,9 +15,9 @@ from config import ELASTIC_CONN, ENROLLMENT_TABLE, USER_TABLE
from .cancel import router as cancel
from .enroll import router as enroll
from .vacancies import router as vacancies
from .slots import router as slots
__all__ = ['vacancies', 'cancel', 'enroll']
__all__ = ['slots', 'cancel', 'enroll']
router = Router()

View File

@@ -1,28 +1,19 @@
from aws_lambda_powertools.event_handler.api_gateway import Router
from elasticsearch import Elasticsearch
from layercake.dynamodb import (
DynamoDBCollection,
DynamoDBPersistenceLayer,
KeyPair,
)
from pydantic import UUID4, BaseModel
from boto3clients import dynamodb_client
from config import ELASTIC_CONN, ENROLLMENT_TABLE, USER_TABLE
from config import ENROLLMENT_TABLE, USER_TABLE
from middlewares.audit_log_middleware import AuditLogMiddleware
from middlewares.authentication_middleware import User
from rules.enrollment import set_status_as_canceled
from .vacancies import router as vacancies
__all__ = ['vacancies']
router = Router()
elastic_client = Elasticsearch(**ELASTIC_CONN)
enrollment_layer = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client)
user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client)
user_collect = DynamoDBCollection(user_layer)
class Cancel(BaseModel):
@@ -37,7 +28,11 @@ class Cancel(BaseModel):
compress=True,
tags=['Enrollment'],
middlewares=[
AuditLogMiddleware('ENROLLMENT_CANCEL', user_collect, ('id', 'course'))
AuditLogMiddleware(
'ENROLLMENT_CANCEL',
collection=user_layer.collection,
audit_attrs=('id', 'course'),
),
],
)
def cancel(id: str, payload: Cancel):

View File

@@ -18,7 +18,7 @@ from config import (
)
from middlewares import Tenant, TenantMiddleware
from models import Course, Enrollment, User
from rules.enrollment import DeduplicationWindow, Vacancy, enroll
from rules.enrollment import DeduplicationWindow, Slot, enroll
router = Router()
@@ -32,16 +32,16 @@ processor = BatchProcessor()
class Item(BaseModel):
user: User
course: Course
vacancy: Vacancy | None = None
slot: Slot | None = None
deduplication_window: DeduplicationWindow | None = None
schedule_date: datetime | None = None
@property
def id(self) -> str:
if not self.vacancy:
if not self.slot:
return str(uuid.uuid4())
_, idx = self.vacancy.sk.split('#')
_, idx = self.slot.sk.split('#')
return idx
@@ -81,7 +81,7 @@ def handler(record: Item, context: dict):
'name': tenant.name,
},
deduplication_window=record.deduplication_window,
vacancy=record.vacancy,
slot=record.slot,
persistence_layer=enrollment_layer,
)

View File

@@ -1,39 +0,0 @@
from aws_lambda_powertools.event_handler.api_gateway import Router
from layercake.dynamodb import (
ComposeKey,
DynamoDBCollection,
DynamoDBPersistenceLayer,
PartitionKey,
)
from boto3clients import dynamodb_client
from config import (
ENROLLMENT_TABLE,
USER_TABLE,
)
from middlewares import Tenant, TenantMiddleware
router = Router()
enrollment_layer = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client)
user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client)
user_collect = DynamoDBCollection(user_layer)
enrollment_collect = DynamoDBCollection(enrollment_layer)
@router.get(
'/vacancies',
compress=True,
tags=['Enrollment'],
middlewares=[
TenantMiddleware(user_collect),
],
)
def get_vacancies():
tenant: Tenant = router.context['tenant']
return enrollment_collect.query(
PartitionKey(
ComposeKey(str(tenant.id), prefix='vacancies'),
)
)