import urllib.parse as parse from aws_lambda_powertools.event_handler.api_gateway import Router from aws_lambda_powertools.event_handler.exceptions import ( NotFoundError, ) from layercake.dynamodb import ( DynamoDBPersistenceLayer, KeyPair, ) from meilisearch import Client as Meilisearch from boto3clients import dynamodb_client from config import MEILISEARCH_API_KEY, MEILISEARCH_HOST, ORDER_TABLE, USER_TABLE from middlewares import Tenant, TenantMiddleware router = Router() user_layer = DynamoDBPersistenceLayer(USER_TABLE, dynamodb_client) order_layer = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client) meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY) # noqa: F821 @router.get( '/', compress=True, tags=['Order'], middlewares=[ TenantMiddleware(user_layer.collection), ], ) def get_orders(): 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', 'create_date:desc') page = int(event.get_query_string_value('page', '1')) hits_per_page = int(event.get_query_string_value('hitsPerPage', '25')) filter_ = parse.unquote(event.get_query_string_value('filter', '')) if tenant.id != '*': filter_ = f'tenant = {tenant.id}' return meili_client.index(ORDER_TABLE).search( query, { 'sort': [sort], 'locales': ['pt'], 'page': page, 'hitsPerPage': hits_per_page, 'filter': filter_, }, ) @router.get( '/', compress=True, tags=['Order'], summary='Get order', ) def get_order(id: str): return order_layer.collection.get_item( KeyPair(id, '0'), exc_cls=NotFoundError, )