29 lines
1 KiB
Python
29 lines
1 KiB
Python
# Third party modules
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
|
|
# Module imports
|
|
from plane.app.permissions import WorkspaceEntityPermission
|
|
from plane.app.serializers import WorkspaceEstimateSerializer
|
|
from plane.app.views.base import BaseAPIView
|
|
from plane.db.models import Estimate, Project
|
|
from plane.utils.cache import cache_response
|
|
|
|
|
|
class WorkspaceEstimatesEndpoint(BaseAPIView):
|
|
permission_classes = [WorkspaceEntityPermission]
|
|
use_read_replica = True
|
|
|
|
@cache_response(60 * 60 * 2)
|
|
def get(self, request, slug):
|
|
estimate_ids = Project.objects.filter(workspace__slug=slug, estimate__isnull=False).values_list(
|
|
"estimate_id", flat=True
|
|
)
|
|
estimates = (
|
|
Estimate.objects.filter(pk__in=estimate_ids, workspace__slug=slug)
|
|
.prefetch_related("points")
|
|
.select_related("workspace", "project")
|
|
)
|
|
|
|
serializer = WorkspaceEstimateSerializer(estimates, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|