[server]: Use a GSI to fetch data in return_all_data

This commit is contained in:
2025-03-01 13:02:28 +00:00
parent 13e624f64e
commit 0a89b740bf

View File

@ -1,25 +1,31 @@
import boto3
import json import json
import os import os
import boto3
dynamodb = boto3.resource('dynamodb') dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['TABLE_NAME']) table = dynamodb.Table(os.environ['TABLE_NAME'])
def lambda_handler(event, context): def lambda_handler(event, context):
try: try:
items = [] # Check if objectType is present in query string parameters
response = table.scan()
items.extend(response.get('Items', []))
# continue to scan while there are more pages
while 'LastEvaluatedKey' in response:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
items.extend(response.get('Items', []))
if 'queryStringParameters' in event and event['queryStringParameters'] and 'objectType' in event['queryStringParameters']: if 'queryStringParameters' in event and event['queryStringParameters'] and 'objectType' in event['queryStringParameters']:
objectType = event['queryStringParameters']['objectType'] objectType = event['queryStringParameters']['objectType']
items = [item for item in items if item['objectType'] == objectType]
# Query using objectType as the key (assumes GSI is created on objectType)
response = table.query(
IndexName='objectTypeIndex', # Name of GSI
KeyConditionExpression=boto3.dynamodb.conditions.Key('objectType').eq(objectType)
)
items = response.get('Items', [])
else:
# Fallback to scanning the table (not recommended for large tables)
items = []
response = table.scan()
items.extend(response.get('Items', []))
while 'LastEvaluatedKey' in response:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
items.extend(response.get('Items', []))
return { return {
'statusCode': 200, 'statusCode': 200,