|
19 | 19 | from purchase.services.funding_impact_service import FundingImpactService |
20 | 20 | from purchase.services.funding_overview_service import FundingOverviewService |
21 | 21 | from referral.services.referral_bonus_service import ReferralBonusService |
| 22 | +from user.models import User |
22 | 23 | from user.permissions import IsModerator |
23 | 24 | from user.related_models.follow_model import Follow |
24 | 25 |
|
| 26 | +#Temporary function for testing different user data, will be removed before release |
| 27 | +def _resolve_target_user(request) -> User | None: |
| 28 | + """Return the user specified by ?user_id, falling back to the requester.""" |
| 29 | + user_id = request.query_params.get("user_id") |
| 30 | + if user_id: |
| 31 | + try: |
| 32 | + return User.objects.get(id=user_id) |
| 33 | + except User.DoesNotExist: |
| 34 | + return None |
| 35 | + return request.user |
| 36 | + |
25 | 37 |
|
26 | 38 | class FundraiseViewSet(viewsets.ModelViewSet): |
27 | 39 | queryset = Fundraise.objects.all() |
@@ -302,14 +314,20 @@ def close(self, request, *args, **kwargs): |
302 | 314 |
|
303 | 315 | @action(detail=False, methods=["get"], permission_classes=[IsAuthenticated]) |
304 | 316 | def funding_overview(self, request, *args, **kwargs): |
305 | | - """Return funding overview metrics for the authenticated user.""" |
306 | | - data = self.funding_overview_service.get_funding_overview(request.user) |
| 317 | + """Return funding overview metrics. Accepts optional ?user_id param.""" |
| 318 | + user = _resolve_target_user(request) |
| 319 | + if user is None: |
| 320 | + return Response({"error": "User not found"}, status=404) |
| 321 | + data = self.funding_overview_service.get_funding_overview(user) |
307 | 322 | serializer = FundingOverviewSerializer(data) |
308 | 323 | return Response(serializer.data) |
309 | 324 |
|
310 | 325 | @action(detail=False, methods=["get"], permission_classes=[IsAuthenticated]) |
311 | 326 | def funding_impact(self, request, *args, **kwargs): |
312 | | - """Return funding impact metrics for the authenticated user.""" |
313 | | - data = self.funding_impact_service.get_funding_impact_overview(request.user) |
| 327 | + """Return funding impact metrics. Accepts optional ?user_id param.""" |
| 328 | + user = _resolve_target_user(request) |
| 329 | + if user is None: |
| 330 | + return Response({"error": "User not found"}, status=404) |
| 331 | + data = self.funding_impact_service.get_funding_impact_overview(user) |
314 | 332 | serializer = FundingImpactSerializer(data) |
315 | 333 | return Response(serializer.data) |
0 commit comments