[server]: Only use Decimal values in update_average_punctuality

This commit is contained in:
2025-03-24 23:23:08 +00:00
parent 1a8a9a33ab
commit 23cdf227eb

View File

@ -1,10 +1,13 @@
import json import json
import boto3 import boto3
import requests import requests
import os
from decimal import Decimal
dynamodb = boto3.resource("dynamodb") dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("punctuality_by_objectID") table = dynamodb.Table("punctuality_by_objectID")
API_URL = "https://281bc6mcm5.execute-api.us-east-1.amazonaws.com/transient_data?objectType=IrishRailTrain" API_URL = "https://your-api-endpoint.com" # Replace with your actual API URL
def fetch_train_data(): def fetch_train_data():
response = requests.get(API_URL) response = requests.get(API_URL)
@ -16,21 +19,25 @@ def fetch_train_data():
def update_punctuality(objectID, new_punctuality): def update_punctuality(objectID, new_punctuality):
new_punctuality = Decimal(str(new_punctuality)) # Ensure Decimal type for DynamoDB
response = table.get_item(Key={"objectID": objectID}) response = table.get_item(Key={"objectID": objectID})
if "Item" in response: if "Item" in response:
item = response["Item"] item = response["Item"]
old_avg = float(item["average_punctuality"]) old_avg = Decimal(str(item["average_punctuality"]))
count = int(item["count"]) count = int(item["count"])
# Calculate new average
new_avg = ((old_avg * count) + new_punctuality) / (count + 1) new_avg = ((old_avg * count) + new_punctuality) / (count + 1)
count += 1 count += 1
# Update the DynamoDB table
table.update_item( table.update_item(
Key={"objectID": objectID}, Key={"objectID": objectID},
UpdateExpression="SET average_punctuality = :avg, count = :cnt", UpdateExpression="SET average_punctuality = :avg, count = :cnt",
ExpressionAttributeValues={":avg": new_avg, ":cnt": count} ExpressionAttributeValues={":avg": new_avg, ":cnt": count}
) )
else: else:
# Insert new train punctuality record
table.put_item( table.put_item(
Item={"objectID": objectID, "average_punctuality": new_punctuality, "count": 1} Item={"objectID": objectID, "average_punctuality": new_punctuality, "count": 1}
) )