From cfea8b588904ae2060532f092b61df332c9e2c83 Mon Sep 17 00:00:00 2001 From: dongli Date: Sun, 15 Dec 2024 21:20:45 -0800 Subject: [PATCH] Fix more decimal conversion issues --- .../backend/services/project/models.py | 15 +++++++++++- .../payment/stripe_manager_controller.py | 24 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/apps/payment/backend/services/project/models.py b/apps/payment/backend/services/project/models.py index 1af0b1f..d57083b 100644 --- a/apps/payment/backend/services/project/models.py +++ b/apps/payment/backend/services/project/models.py @@ -2,7 +2,8 @@ from datetime import datetime from typing import List, Optional from beanie import Document -from pydantic import BaseModel +from bson import Decimal128 +from pydantic import BaseModel, validator from decimal import Decimal from backend.services.project.constants import MilestoneStatus @@ -16,6 +17,18 @@ class Milestone(BaseModel): expected_payment: Decimal actual_paid: Decimal + @validator("expected_payment", pre=True) + def convert_decimal128_expected_payment(cls, value): + if isinstance(value, Decimal128): + return value.to_decimal() # Convert MongoDB Decimal128 to Python Decimal + return value + + @validator("actual_paid", pre=True) + def convert_decimal128_actual_paid(cls, value): + if isinstance(value, Decimal128): + return value.to_decimal() # Convert MongoDB Decimal128 to Python Decimal + return value + class ProjectDoc(Document): product_id: str diff --git a/apps/payment/webapi/routes/payment/stripe_manager_controller.py b/apps/payment/webapi/routes/payment/stripe_manager_controller.py index 36e28d0..e22ffc0 100644 --- a/apps/payment/webapi/routes/payment/stripe_manager_controller.py +++ b/apps/payment/webapi/routes/payment/stripe_manager_controller.py @@ -3,6 +3,8 @@ from backend.application.payment_hub import PaymentHub from typing import Dict, Optional, Tuple from decimal import Decimal +from backend.services.project.models import ProjectDoc + router = APIRouter() payment_hub = PaymentHub() @@ -190,6 +192,28 @@ async def fetch_checkout_session_url( async def invoke_checkout_session_webhook(): return await payment_hub.invoke_checkout_session_webhook() +@router.get( + "/test/{user_id}", + operation_id="test", + summary="test user_id", + description="test user_id", +) +async def test( + user_id: str +): + return user_id + +@router.get( + "/testproj/{project_id}", + operation_id="test", + summary="test project_id", + description="test project_id", +) +async def test_project( + project_id: str +): + return await ProjectDoc.get(project_id) +