Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[spaceship] Initial support for updated review submissions flow #19751

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions spaceship/lib/spaceship/connect_api.rb
Expand Up @@ -62,6 +62,8 @@
require 'spaceship/connect_api/models/app_store_version_phased_release'
require 'spaceship/connect_api/models/app_store_version'
require 'spaceship/connect_api/models/idfa_declaration'
require 'spaceship/connect_api/models/review_submission'
require 'spaceship/connect_api/models/review_submission_item'
require 'spaceship/connect_api/models/reset_ratings_request'
require 'spaceship/connect_api/models/sandbox_tester'
require 'spaceship/connect_api/models/territory'
Expand Down
43 changes: 43 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/app.rb
@@ -1,6 +1,7 @@
require_relative '../model'
require_relative './build'

# rubocop:disable Metrics/ClassLength
module Spaceship
class ConnectAPI
class App
Expand Down Expand Up @@ -414,6 +415,47 @@ def enable_educational_discount
})
end

#
# Review Submissions
#

def get_ready_review_submission(client: nil, platform:, includes: nil)
client ||= Spaceship::ConnectAPI
filter = {
state: [
Spaceship::ConnectAPI::ReviewSubmission::ReviewSubmissionState::READY_FOR_REVIEW
].join(","),
platform: platform
}

return get_review_submissions(client: client, filter: filter, includes: includes).first
end

def get_in_progress_review_submission(client: nil, platform:, includes: nil)
client ||= Spaceship::ConnectAPI
filter = {
state: [
Spaceship::ConnectAPI::ReviewSubmission::ReviewSubmissionState::WAITING_FOR_REVIEW
].join(","),
platform: platform
}

return get_review_submissions(client: client, filter: filter, includes: includes).first
end

# appStoreVersionForReview,items
def get_review_submissions(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
client ||= Spaceship::ConnectAPI
resps = client.get_review_submissions(app_id: id, filter: filter, includes: includes, limit: limit, sort: sort).all_pages
return resps.flat_map(&:to_models)
end

def create_review_submission(client: nil, platform:)
client ||= Spaceship::ConnectAPI
resp = client.post_review_submission(app_id: id, platform: platform)
return resp.to_models.first
end

#
# Users
#
Expand All @@ -434,3 +476,4 @@ def remove_users(client: nil, user_ids: nil)
end
end
end
# rubocop:enable Metrics/ClassLength
1 change: 1 addition & 0 deletions spaceship/lib/spaceship/connect_api/models/app_info.rb
Expand Up @@ -25,6 +25,7 @@ module AppStoreState
WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
DEVELOPER_REJECTED = "DEVELOPER_REJECTED"
DEVELOPER_REMOVED_FROM_SALE = "DEVELOPER_REMOVED_FROM_SALE"
READY_FOR_REVIEW = "READY_FOR_REVIEW"
REJECTED = "REJECTED"
PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION"
METADATA_REJECTED = "METADATA_REJECTED"
Expand Down
73 changes: 73 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/review_submission.rb
@@ -0,0 +1,73 @@
require_relative '../model'
require_relative './review_submission_item'

module Spaceship
class ConnectAPI
class ReviewSubmission
include Spaceship::ConnectAPI::Model

attr_accessor :platform
attr_accessor :state
attr_accessor :submitted_date

attr_accessor :app_store_version_for_review
attr_accessor :items
attr_accessor :last_updated_by_actor
attr_accessor :submitted_by_actor

module ReviewSubmissionState
CANCELING = "CANCELING"
COMPLETE = "COMPLETE"
IN_REVIEW = "IN_REVIEW"
READY_FOR_REVIEW = "READY_FOR_REVIEW"
WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
end

attr_mapping({
"platform" => "platform",
"state" => "state",
"submittedDate" => "submitted_date",

"appStoreVersionForReview" => "app_store_version_for_review",
"items" => "items",
"lastUpdatedByActor" => "last_updated_by_actor",
"submittedByActor" => "submitted_by_actor",
})

def self.type
return "reviewSubmissions"
end

#
# API
#

# appStoreVersionForReview,items,submittedByActor,lastUpdatedByActor
def self.get(client: nil, review_submission_id:, includes: nil)
client ||= Spaceship::ConnectAPI
resp = client.get_review_submission(review_submission_id: review_submission_id, includes: includes)
return resp.to_models.first
end

def submit_for_review(client: nil)
client ||= Spaceship::ConnectAPI
attributes = { submitted: true }
resp = client.patch_review_submission(review_submission_id: id, attributes: attributes)
return resp.to_models.first
end

def cancel_submission(client: nil)
client ||= Spaceship::ConnectAPI
attributes = { canceled: true }
resp = client.patch_review_submission(review_submission_id: id, attributes: attributes)
return resp.to_models.first
end

def add_app_store_version_to_review_items(client: nil, app_store_version_id:)
client ||= Spaceship::ConnectAPI
resp = client.post_review_submission_item(review_submission_id: id, app_store_version_id: app_store_version_id)
return resp.to_models.first
end
end
end
end
@@ -0,0 +1,40 @@
require_relative '../model'

module Spaceship
class ConnectAPI
class ReviewSubmissionItem
include Spaceship::ConnectAPI::Model

attr_accessor :state

attr_accessor :app_store_version_experiment
attr_accessor :app_store_version
attr_accessor :app_store_product_page_version
attr_accessor :app_event

attr_mapping({
"state" => "state",

"appStoreVersionExperiment" => "app_store_version_experiment",
"appStoreVersion" => "app_store_version",
"appCustomProductPageVersion" => "app_store_product_page_version",
"appEvent" => "app_event",
})

def self.type
return "reviewSubmissionItems"
end

#
# API
#

# appCustomProductPageVersion,appEvent,appStoreVersion,appStoreVersionExperiment
def self.all(client: nil, review_submission_id:, includes: nil, limit: nil, sort: nil)
client ||= Spaceship::ConnectAPI
resps = client.get_review_submission_items(review_submission_id: review_submission_id, includes: includes, limit: limit, sort: sort).all_pages
return resps.flat_map(&:to_models)
end
end
end
end
83 changes: 83 additions & 0 deletions spaceship/lib/spaceship/connect_api/tunes/tunes.rb
Expand Up @@ -1126,6 +1126,89 @@ def delete_idfa_declaration(idfa_declaration_id: nil)
tunes_request_client.delete("idfaDeclarations/#{idfa_declaration_id}", params)
end

#
# reviewSubmissions
#

def get_review_submissions(app_id:, filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
tunes_request_client.get("apps/#{app_id}/reviewSubmissions", params)
end

def get_review_submission(review_submission_id:, filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
tunes_request_client.get("reviewSubmissions/#{review_submission_id}", params)
end

def post_review_submission(app_id:, platform:)
body = {
data: {
type: "reviewSubmissions",
attributes: {
platform: platform
},
relationships: {
app: {
data: {
type: "apps",
id: app_id
}
}
}
}
}

tunes_request_client.post("reviewSubmissions", body)
end

def patch_review_submission(review_submission_id:, attributes: nil)
body = {
data: {
type: "reviewSubmissions",
id: review_submission_id,
attributes: attributes,
}
}

tunes_request_client.patch("reviewSubmissions/#{review_submission_id}", body)
end

#
# reviewSubmissionItems
#

def get_review_submission_items(review_submission_id:, filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
tunes_request_client.get("reviewSubmissions/#{review_submission_id}/items", params)
end

def post_review_submission_item(review_submission_id:, app_store_version_id: nil)
body = {
data: {
type: "reviewSubmissionItems",
relationships: {
reviewSubmission: {
data: {
type: "reviewSubmissions",
id: review_submission_id
}
}
}
}
}

unless app_store_version_id.nil?
body[:data][:relationships][:appStoreVersion] = {
data: {
type: "appStoreVersions",
id: app_store_version_id
}
}
end

tunes_request_client.post("reviewSubmissionItems", body)
end

#
# sandboxTesters
#
Expand Down