import urllib.parse as parse from aws_lambda_powertools.event_handler.api_gateway import Router from layercake.dynamodb import ( DynamoDBPersistenceLayer, SortKey, TransactKey, ) from meilisearch import Client as Meilisearch import meili from boto3clients import dynamodb_client from config import ENROLLMENT_TABLE, MEILISEARCH_API_KEY, MEILISEARCH_HOST, USER_TABLE 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', 'deduplication_window'] router = Router() enrollment_layer = DynamoDBPersistenceLayer(ENROLLMENT_TABLE, dynamodb_client) user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY) @router.get( '/', compress=True, tags=['Enrollment'], middlewares=[ TenantMiddleware(user_layer.collection), ], ) def get_enrollments(): tenant: Tenant = router.context['tenant'] event = router.current_event query = parse.unquote(event.get_query_string_value('q', '')) sort = event.get_query_string_value('sort', 'created_at:desc') page = int(event.get_query_string_value('page', '1')) hits_per_page = int(event.get_query_string_value('hitsPerPage', '25')) filter_ = meili.parse(event.get_query_string_value('filter', '')) if tenant.id != '*': filter_ = [ { 'attr': 'tenant_id', 'op': '=', 'value': tenant.id, }, ] + filter_ return meili_client.index(ENROLLMENT_TABLE).search( query, { 'sort': [sort], 'locales': ['pt'], 'page': page, 'hitsPerPage': hits_per_page, 'filter': meili.encode(filter_), }, ) @router.get('/', compress=True, tags=['Enrollment']) def get_enrollment(id: str): return enrollment_layer.collection.get_items( TransactKey(id) + SortKey('0') + SortKey('STARTED', rename_key='started_at', path_spec='started_at') + SortKey('COMPLETED', rename_key='completed_at', path_spec='completed_at') + SortKey('FAILED', rename_key='failed_at', path_spec='failed_at') + SortKey('CANCELED', rename_key='canceled') + SortKey('ARCHIVED', rename_key='archived_at', path_spec='archived_at') + SortKey('CANCEL_POLICY', rename_key='cancel_policy') + SortKey('LOCK', rename_key='lock') + SortKey('parent_vacancy', path_spec='vacancy') + SortKey('author') + SortKey('tenant') )