Skip to content

Commit

Permalink
Merge pull request #312 from jadmsaadaot/SUBMIT-task#330
Browse files Browse the repository at this point in the history
Fix accepting all update requests when accepting one
  • Loading branch information
jadmsaadaot authored Feb 27, 2025
2 parents 805f51c + 08bd56b commit 653a43b
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 19 deletions.
26 changes: 25 additions & 1 deletion submit-api/src/submit_api/resources/staff/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def get(original_package_id):
"/<int:package_id>/update-request",
methods=["POST", "PATCH", "OPTIONS"],
)
class PackageUpdateRequest(Resource):
class PackageUpdateRequests(Resource):
"""Resource for managing a package's update request."""

@staticmethod
Expand Down Expand Up @@ -125,3 +125,27 @@ def patch(package_id):
"""Accept an update request."""
accept_update_request = PackageService.accept_update_request(package_id)
return StaffPackageSchema().dump(accept_update_request), HTTPStatus.OK


@cors_preflight("POST, PATCH, OPTIONS")
@API.route(
"/<int:package_id>/update-request/<int:update_request_id>",
methods=["POST", "PATCH", "OPTIONS"],
)
class PackageUpdateRequest(Resource):
"""Resource for managing a package's update request."""

@staticmethod
@ApiHelper.swagger_decorators(API, endpoint_description="Accept a update request for a package")
@API.expect(create_update_request_model)
@API.response(
code=HTTPStatus.OK, model=package_model, description="Update Request"
)
@API.response(HTTPStatus.BAD_REQUEST, "Bad Request")
@API.response(HTTPStatus.NOT_FOUND, "Not Found")
@auth.has_one_of_roles([EpicSubmitRole.EAO_CREATE.value])
@cors.crossdomain(origin="*")
def patch(package_id, update_request_id):
"""Accept an update request."""
accept_update_request = PackageService.accept_update_request(package_id, update_request_id)
return StaffPackageSchema().dump(accept_update_request), HTTPStatus.OK
34 changes: 22 additions & 12 deletions submit-api/src/submit_api/services/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,22 +350,32 @@ def _resubmit_package(cls, package, session):
return package

@classmethod
def accept_update_request(cls, package_id):
def accept_update_request(cls, package_id, update_request_id):
"""Submit the package by updating its status and items."""
with session_scope() as session:
package = cls._get_and_validate_complete_package(package_id)

current_app.logger.info(f"Accepting update reuqest for package {package.id}")
pending_requests = [
request for request in package.update_requests
if request.status == UpdateRequestStatus.PENDING_REVIEW.value
]
if not pending_requests:
raise BadRequestError("Cannot accept an update request that is not pending")
cls._update_update_requests(
session, package, status=UpdateRequestStatus.ACCEPTED.value, active=False)
package = cls.get_package_by_id(package_id)
update_request = UpdateRequestModel.find_by_id(update_request_id)
cls._validate_accept_update_request(package, update_request)
update_request = UpdateRequestModel.find_by_id(update_request_id)
update_request.status = UpdateRequestStatus.ACCEPTED.value
update_request.active = False
session.add(update_request)
session.flush()
return package

@classmethod
def _validate_accept_update_request(cls, package, update_request):
"""Validate the accept update request."""
if not package:
raise BadRequestError("Package not found")

if not update_request:
raise BadRequestError("Update request not found")
if update_request.submission_package_id != package.id:
raise BadRequestError("Update request does not belong to the specified package")
if update_request.status != UpdateRequestStatus.PENDING_REVIEW.value:
raise BadRequestError("Update request is not pending review")

@staticmethod
def _log_activity_submission(package, action, session):
"""Log activity for package submission."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ export default function RequestSection({
onClick={() =>
acceptUpdateRequest({
packageId: updateRequest.submission_package_id,
updateRequestId: updateRequest.id,
})
}
loading={isUpdating}
Expand Down
19 changes: 13 additions & 6 deletions submit-web/src/hooks/api/usePackages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,9 +208,15 @@ const createPackageUpdateRequest = ({
});
};

const acceptUpdateRequest = ({ packageId }: { packageId: number }) => {
const acceptUpdateRequest = ({
packageId,
updateRequestId,
}: {
packageId: number;
updateRequestId: number;
}) => {
return submitRequest<SubmissionPackage>({
url: `/staff/packages/${packageId}/update-request`,
url: `/staff/packages/${packageId}/update-request/${updateRequestId}`,
method: "patch",
});
};
Expand Down Expand Up @@ -276,14 +282,15 @@ export const useAcceptUpdateRequest = ({
return useMutation({
mutationFn: acceptUpdateRequest,
...options,
onSuccess: () => {
onSuccess: (submissionPackage) => {
if (options?.onSuccess) {
options.onSuccess();
}

queryClient.invalidateQueries({
queryKey: [QUERY_KEY.SUBMISSION_PACKAGE, packageId],
});
queryClient.setQueryData(
[QUERY_KEY.SUBMISSION_PACKAGE, packageId],
submissionPackage,
);
},
});
};
Expand Down

0 comments on commit 653a43b

Please sign in to comment.