diff --git a/config.ru b/config.ru index 687555d..5b6a8cb 100644 --- a/config.ru +++ b/config.ru @@ -72,6 +72,10 @@ class AppleAppV1 < Hanami::API status(204) end + patch "cancel_submission" do + json(DOMAIN.cancel_review_submission(**env[:app_store_connect_params].merge(params))) + end + patch "start" do DOMAIN.start_release(**env[:app_store_connect_params].merge(params)) status(204) diff --git a/lib/app_store/connect.rb b/lib/app_store/connect.rb index e7f2559..e943bcb 100644 --- a/lib/app_store/connect.rb +++ b/lib/app_store/connect.rb @@ -25,6 +25,8 @@ def self.prepare_release(**params) = new(**params).prepare_release(**params.slic def self.create_review_submission(**params) = new(**params).create_review_submission(**params.slice(:build_number, :version)) + def self.cancel_review_submission(**params) = new(**params).cancel_review_submission(**params.slice(:build_number, :version)) + def self.release(**params) = new(**params).release(**params.slice(:build_number)) def self.start_release(**params) = new(**params).start_release(**params.slice(:build_number)) @@ -244,6 +246,22 @@ def submit_review(submission, edit_version) end end + def cancel_review_submission(build_number:, version:) + execute do + edit_version = app + .get_app_store_versions(includes: "build", filter: INFLIGHT_RELEASE_FILTERS) + .find { |v| v.build&.version == build_number.to_s && v.version_string == version } + raise VersionNotFoundError unless edit_version + + sub = app.get_in_progress_review_submission(platform: IOS_PLATFORM) + + raise SubmissionNotFoundError unless sub + sub.cancel_submission + + version_data(app.get_edit_app_store_version(includes: VERSION_DATA_INCLUDES)) + end + end + # no of api calls: 2 def release(build_number: nil) execute do diff --git a/lib/app_store/errors.rb b/lib/app_store/errors.rb index c2fb3c3..2109065 100644 --- a/lib/app_store/errors.rb +++ b/lib/app_store/errors.rb @@ -61,6 +61,18 @@ def as_json end end + class SubmissionNotFoundError < StandardError + MSG = "No in progress review submission found" + + def initialize(msg = MSG) + super + end + + def as_json + AppStore.error_as_json(:submission, :not_found, MSG) + end + end + class BuildMismatchError < StandardError MSG = "The build on the release in app store does not match the build number"