chore: single endpoint to create estimate and estimate points (#897)

This commit is contained in:
pablohashescobar 2023-04-20 18:14:38 +05:30 committed by GitHub
parent e68a5382f9
commit 4dda4ec610
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 8 deletions

View File

@ -566,6 +566,11 @@ urlpatterns = [
ProjectEstimatePointEndpoint.as_view(), ProjectEstimatePointEndpoint.as_view(),
name="project-estimate-points", name="project-estimate-points",
), ),
path(
"workspaces/<str:slug>/projects/<uuid:project_id>/estimates/bulk-estimate-points/",
BulkEstimatePointEndpoint.as_view(),
name="bulk-create-estimate-points",
),
path( path(
"workspaces/<str:slug>/projects/<uuid:project_id>/estimates/<uuid:estimate_id>/bulk-estimate-points/", "workspaces/<str:slug>/projects/<uuid:project_id>/estimates/<uuid:estimate_id>/bulk-estimate-points/",
BulkEstimatePointEndpoint.as_view(), BulkEstimatePointEndpoint.as_view(),

View File

@ -146,11 +146,13 @@ class BulkEstimatePointEndpoint(BaseAPIView):
ProjectEntityPermission, ProjectEntityPermission,
] ]
def post(self, request, slug, project_id, estimate_id): def post(self, request, slug, project_id):
try: try:
estimate = Estimate.objects.get( if not request.data.get("estimate", False):
pk=estimate_id, workspace__slug=slug, project=project_id return Response(
) {"error": "Estimate is required"},
status=status.HTTP_400_BAD_REQUEST,
)
estimate_points = request.data.get("estimate_points", []) estimate_points = request.data.get("estimate_points", [])
@ -160,6 +162,18 @@ class BulkEstimatePointEndpoint(BaseAPIView):
status=status.HTTP_400_BAD_REQUEST, status=status.HTTP_400_BAD_REQUEST,
) )
estimate_serializer = EstimateSerializer(data=request.data.get("estimate"))
if not estimate_serializer.is_valid():
return Response(
estimate_serializer.errors, status=status.HTTP_400_BAD_REQUEST
)
try:
estimate = estimate_serializer.save(project_id=project_id)
except IntegrityError:
return Response(
{"errror": "Estimate with the name already exists"},
status=status.HTTP_400_BAD_REQUEST,
)
estimate_points = EstimatePoint.objects.bulk_create( estimate_points = EstimatePoint.objects.bulk_create(
[ [
EstimatePoint( EstimatePoint(
@ -178,9 +192,17 @@ class BulkEstimatePointEndpoint(BaseAPIView):
ignore_conflicts=True, ignore_conflicts=True,
) )
serializer = EstimatePointSerializer(estimate_points, many=True) estimate_point_serializer = EstimatePointSerializer(
estimate_points, many=True
)
return Response(serializer.data, status=status.HTTP_200_OK) return Response(
{
"estimate": estimate_serializer.data,
"estimate_points": estimate_point_serializer.data,
},
status=status.HTTP_200_OK,
)
except Estimate.DoesNotExist: except Estimate.DoesNotExist:
return Response( return Response(
{"error": "Estimate does not exist"}, {"error": "Estimate does not exist"},
@ -212,7 +234,6 @@ class BulkEstimatePointEndpoint(BaseAPIView):
estimate_id=estimate_id, estimate_id=estimate_id,
) )
print(estimate_points)
updated_estimate_points = [] updated_estimate_points = []
for estimate_point in estimate_points: for estimate_point in estimate_points:
# Find the data for that estimate point # Find the data for that estimate point
@ -238,7 +259,7 @@ class BulkEstimatePointEndpoint(BaseAPIView):
{"error": "Estimate does not exist"}, status=status.HTTP_400_BAD_REQUEST {"error": "Estimate does not exist"}, status=status.HTTP_400_BAD_REQUEST
) )
except Exception as e: except Exception as e:
print(e) capture_exception(e)
return Response( return Response(
{"error": "Something went wrong please try again later"}, {"error": "Something went wrong please try again later"},
status=status.HTTP_400_BAD_REQUEST, status=status.HTTP_400_BAD_REQUEST,