Skip to content

Commit da9383e

Browse files
committed
feat: enhance expense service with timezone-aware datetime and improve balance retrieval
1 parent 9cdc317 commit da9383e

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

backend/app/expenses/service.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections import defaultdict
2-
from datetime import datetime, timedelta
2+
from datetime import datetime, timedelta, timezone
33
from typing import Any, Dict, List, Optional
44

55
from app.config import logger
@@ -1093,7 +1093,7 @@ async def get_friends_balance_summary(self, user_id: str) -> Dict[str, Any]:
10931093

10941094
for result in results:
10951095
friend_id = result["_id"]
1096-
total_balance = result["totalBalance"]
1096+
total_balance = result.get("totalBalance", 0)
10971097

10981098
# Get friend details from map
10991099
friend_details = friends_map.get(friend_id)
@@ -1129,7 +1129,9 @@ async def get_friends_balance_summary(self, user_id: str) -> Dict[str, Any]:
11291129
"netBalance": round(total_balance, 2),
11301130
"owesYou": total_balance > 0,
11311131
"breakdown": breakdown,
1132-
"lastActivity": datetime.utcnow(), # TODO: Calculate actual last activity
1132+
"lastActivity": datetime.now(
1133+
timezone.utc
1134+
), # TODO: Calculate actual last activity
11331135
}
11341136

11351137
friends_balance.append(friend_data)

backend/tests/expenses/test_expense_service.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import asyncio
22
from datetime import datetime, timedelta, timezone
3+
from typing import Any
34
from unittest.mock import AsyncMock, MagicMock, patch
45

56
import pytest
@@ -1612,7 +1613,9 @@ async def test_get_friends_balance_summary_success(expense_service):
16121613
# Group Beta: Main owes Friend2 70 (balance: -70 for Main)
16131614
# Total for Friend2: -70 (Main owes Friend2 70)
16141615

1615-
def sync_mock_settlements_aggregate_cursor_factory(pipeline, *args, **kwargs):
1616+
def sync_mock_settlements_aggregate_cursor_factory(
1617+
_pipeline: Any, *_args: Any, **_kwargs: Any
1618+
) -> AsyncMock:
16161619
# The optimized version returns aggregated results for all friends in one go
16171620
mock_agg_cursor = AsyncMock()
16181621
mock_agg_cursor.to_list.return_value = [

0 commit comments

Comments
 (0)