update meilis
This commit is contained in:
@@ -13,7 +13,13 @@ from aws_lambda_powertools.event_handler.middlewares import (
|
||||
BaseMiddlewareHandler,
|
||||
NextMiddleware,
|
||||
)
|
||||
from layercake.dynamodb import ComposeKey, DynamoDBCollection, KeyPair
|
||||
from layercake.dynamodb import (
|
||||
ComposeKey,
|
||||
DynamoDBCollection,
|
||||
KeyPair,
|
||||
SortKey,
|
||||
TransactKey,
|
||||
)
|
||||
from pydantic import UUID4, BaseModel
|
||||
|
||||
from auth import AuthFlowType
|
||||
@@ -117,11 +123,16 @@ def _tenant(
|
||||
raise BadRequestError('Missing tenant')
|
||||
|
||||
# Ensure user has ACL
|
||||
collection.get_item(
|
||||
KeyPair(user.id, ComposeKey(tenant_id, prefix='acls')),
|
||||
exc_cls=ForbiddenError,
|
||||
acls = collection.get_items(
|
||||
TransactKey(user.id)
|
||||
+ SortKey(ComposeKey('*', prefix='acls'))
|
||||
+ SortKey(ComposeKey(tenant_id, prefix='acls')),
|
||||
flatten_top=False,
|
||||
)
|
||||
|
||||
if not acls:
|
||||
raise ForbiddenError
|
||||
|
||||
# For root tenant, provide the default Tenant
|
||||
if tenant_id == '*':
|
||||
return Tenant(id=tenant_id, name='default')
|
||||
|
||||
@@ -1,37 +1,52 @@
|
||||
import json
|
||||
|
||||
from aws_lambda_powertools.event_handler.api_gateway import Router
|
||||
from aws_lambda_powertools.event_handler.exceptions import (
|
||||
BadRequestError,
|
||||
NotFoundError,
|
||||
)
|
||||
from elasticsearch import Elasticsearch
|
||||
from layercake.dynamodb import (
|
||||
DynamoDBCollection,
|
||||
DynamoDBPersistenceLayer,
|
||||
KeyPair,
|
||||
)
|
||||
from meilisearch import Client as Meilisearch
|
||||
|
||||
import elastic
|
||||
from boto3clients import dynamodb_client
|
||||
from config import ELASTIC_CONN, ORDER_TABLE
|
||||
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)
|
||||
order_collect = DynamoDBCollection(order_layer, exc_cls=BadRequestError)
|
||||
elastic_client = Elasticsearch(**ELASTIC_CONN)
|
||||
meili_client = Meilisearch(MEILISEARCH_HOST, MEILISEARCH_API_KEY) # noqa: F821
|
||||
|
||||
|
||||
@router.get('/', compress=True, tags=['Order'])
|
||||
@router.get(
|
||||
'/',
|
||||
compress=True,
|
||||
tags=['Order'],
|
||||
middlewares=[
|
||||
TenantMiddleware(user_layer.collection),
|
||||
],
|
||||
)
|
||||
def get_orders():
|
||||
tenant: Tenant = router.context['tenant']
|
||||
event = router.current_event
|
||||
query = event.get_query_string_value('query', '{}')
|
||||
page_size = event.get_query_string_value('page_size', '25')
|
||||
query = event.get_query_string_value('query', '')
|
||||
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_ = None
|
||||
|
||||
return elastic.search( # type: ignore
|
||||
index=ORDER_TABLE,
|
||||
page_size=int(page_size),
|
||||
query=json.loads(query),
|
||||
elastic_client=elastic_client,
|
||||
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_,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -42,4 +57,7 @@ def get_orders():
|
||||
summary='Get order',
|
||||
)
|
||||
def get_order(id: str):
|
||||
return order_collect.get_item(KeyPair(id, '0'))
|
||||
return order_layer.collection.get_item(
|
||||
KeyPair(id, '0'),
|
||||
exc_cls=NotFoundError,
|
||||
)
|
||||
|
||||
@@ -57,11 +57,11 @@ class LifecycleEvents(str, Enum):
|
||||
CERT_EXPIRATION_REMINDER_30_DAYS = 'schedules#cert_expiration_reminder_30_days'
|
||||
|
||||
# Archive the course after the certificate expires
|
||||
# COURSE_ARCHIVED = 'schedules#course_archived'
|
||||
# SET_AS_ARCHIVE = 'schedules#set_as_archive'
|
||||
ARCHIVE_IT = 'schedules#archive_it'
|
||||
|
||||
# When the access period ends for a course without a certificate
|
||||
# COURSE_EXPIRED = 'schedules#course_expired'
|
||||
# SET_AS_EXPIRE = 'schedules#set_as_expire'
|
||||
EXPIRATION = 'schedules#expiration'
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user