add deduplication window

This commit is contained in:
2025-07-14 17:25:32 -03:00
parent 6588a21c5b
commit 743fd57baf
11 changed files with 125 additions and 18 deletions

View File

@@ -56,6 +56,7 @@ app.include_router(enrollments.router, prefix='/enrollments')
app.include_router(enrollments.slots, prefix='/enrollments')
app.include_router(enrollments.enroll, prefix='/enrollments')
app.include_router(enrollments.cancel, prefix='/enrollments')
app.include_router(enrollments.deduplication_window, prefix='/enrollments')
app.include_router(orders.router, prefix='/orders')
app.include_router(users.router, prefix='/users')
app.include_router(users.logs, prefix='/users')

View File

@@ -14,10 +14,11 @@ from config import ENROLLMENT_TABLE, MEILISEARCH_API_KEY, MEILISEARCH_HOST, USER
from middlewares import Tenant, TenantMiddleware
from .cancel import router as cancel
from .deduplication_window import router as deduplication_window
from .enroll import router as enroll
from .slots import router as slots
__all__ = ['slots', 'cancel', 'enroll']
__all__ = ['slots', 'cancel', 'enroll', 'deduplication_window']
router = Router()
@@ -76,7 +77,7 @@ def get_enrollment(id: str):
+ SortKey('archived_date')
+ SortKey('cancel_policy')
+ SortKey('parent_vacancy', path_spec='vacancy')
+ SortKey('lock', path_spec='hash')
+ SortKey('lock')
+ SortKey('author')
+ SortKey('tenant')
+ SortKey('cert')

View File

@@ -18,7 +18,7 @@ user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client)
class Cancel(BaseModel):
id: UUID4 | str
lock_hash: str
lock_hash: str | None = None
course: dict = {}
vacancy: dict = {}

View File

@@ -0,0 +1,29 @@
from aws_lambda_powertools.event_handler.api_gateway import Router
from layercake.dynamodb import (
DynamoDBPersistenceLayer,
KeyPair,
)
from pydantic import BaseModel
from boto3clients import dynamodb_client
from config import ENROLLMENT_TABLE
router = Router()
enrollment_layer = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client)
class DeduplicationWindow(BaseModel):
lock_hash: str
@router.patch(
'/<id>/deduplicationwindow',
compress=True,
tags=['Enrollment'],
)
def deduplication_window(id: str, payload: DeduplicationWindow):
with enrollment_layer.transact_writer() as transact:
transact.delete(key=KeyPair(id, 'lock'))
transact.delete(key=KeyPair('lock', payload.lock_hash))
return payload

View File

@@ -250,7 +250,7 @@ def enroll(
def set_status_as_canceled(
id: str,
*,
lock_hash: str,
lock_hash: str | None = None,
author: Author,
course: Course | None = None,
vacancy_key: KeyPair | None = None,
@@ -290,8 +290,10 @@ def set_status_as_canceled(
transact.delete(key=KeyPair(id, LifecycleEvents.ACCESS_PERIOD_ENDS))
transact.delete(key=KeyPair(id, LifecycleEvents.DOES_NOT_ACCESS))
transact.delete(key=KeyPair(id, 'parent_vacancy'))
transact.delete(key=KeyPair(id, 'lock'))
transact.delete(key=KeyPair('lock', lock_hash))
if lock_hash:
transact.delete(key=KeyPair(id, 'lock'))
transact.delete(key=KeyPair('lock', lock_hash))
if vacancy_key and course:
vacancy_pk, vacancy_sk = vacancy_key.values()