feat: Introduce lists and reviews apps, refactor user list functionality from accounts, and add user profile fields.

This commit is contained in:
pacnpal
2025-12-26 09:27:44 -05:00
parent ed04b30469
commit cd8868a591
37 changed files with 5900 additions and 281 deletions

View File

@@ -2456,3 +2456,56 @@ class RideFilterMetadataAPIView(APIView):
# Reuse the same filter extraction logic
view = HybridRideAPIView()
return view._extract_filters(query_params)
# === MANUFACTURER & DESIGNER LISTS ===
class BaseCompanyListAPIView(APIView):
permission_classes = [permissions.AllowAny]
role = None
def get(self, request: Request) -> Response:
if not MODELS_AVAILABLE:
return Response(
{"detail": "Models not available"},
status=status.HTTP_501_NOT_IMPLEMENTED
)
companies = (
Company.objects.filter(roles__contains=[self.role])
.annotate(ride_count=Count("manufactured_rides" if self.role == "MANUFACTURER" else "designed_rides"))
.only("id", "name", "slug", "roles", "description")
.order_by("name")
)
data = [
{
"id": c.id,
"name": c.name,
"slug": c.slug,
"description": c.description,
"ride_count": c.ride_count,
}
for c in companies
]
return Response({
"results": data,
"count": len(data)
})
@extend_schema(
summary="List manufacturers",
description="List all companies with MANUFACTURER role.",
responses={200: OpenApiTypes.OBJECT},
tags=["Rides"],
)
class ManufacturerListAPIView(BaseCompanyListAPIView):
role = "MANUFACTURER"
@extend_schema(
summary="List designers",
description="List all companies with DESIGNER role.",
responses={200: OpenApiTypes.OBJECT},
tags=["Rides"],
)
class DesignerListAPIView(BaseCompanyListAPIView):
role = "DESIGNER"