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] implement resolution center API in Spaceship::ConnectAPI #20726

Merged
merged 7 commits into from Nov 12, 2022
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
5 changes: 5 additions & 0 deletions spaceship/lib/spaceship/connect_api.rb
Expand Up @@ -68,6 +68,11 @@
require 'spaceship/connect_api/models/sandbox_tester'
require 'spaceship/connect_api/models/territory'

require 'spaceship/connect_api/models/resolution_center_message'
require 'spaceship/connect_api/models/resolution_center_thread'
require 'spaceship/connect_api/models/review_rejection'
require 'spaceship/connect_api/models/actor'

module Spaceship
class ConnectAPI
# Defined in the App Store Connect API docs:
Expand Down
26 changes: 26 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/actor.rb
@@ -0,0 +1,26 @@
require_relative '../model'
module Spaceship
class ConnectAPI
class Actor
include Spaceship::ConnectAPI::Model

attr_accessor :actor_type
attr_accessor :user_first_name
attr_accessor :user_last_name
attr_accessor :user_email
attr_accessor :api_key_id

attr_mapping({
actorType: 'actor_type',
userFirstName: 'user_first_name',
userLastName: 'user_last_name',
userEmail: 'user_email',
apiKeyId: 'api_key_id'
})

def self.type
return 'actors'
end
end
end
end
@@ -0,0 +1,29 @@
require_relative '../model'
require_relative './actor'
require_relative './review_rejection'

module Spaceship
class ConnectAPI
class ResolutionCenterMessage
include Spaceship::ConnectAPI::Model

attr_accessor :message_body
attr_accessor :created_date
attr_accessor :rejections
attr_accessor :from_actor

attr_mapping({
messageBody: 'message_body',
createdDate: 'created_date',

# includes
rejections: 'rejections',
fromActor: 'from_actor'
})

def self.type
return 'resolutionCenterMessages'
end
end
end
end
@@ -0,0 +1,67 @@
require_relative '../model'

module Spaceship
class ConnectAPI
class ResolutionCenterThread
include Spaceship::ConnectAPI::Model

attr_accessor :state
attr_accessor :can_developer_add_node
attr_accessor :objectionable_content
attr_accessor :thread_type
attr_accessor :created_date
attr_accessor :last_message_response_date

attr_accessor :resolution_center_messages
attr_accessor :app_store_version

module ThreadType
REJECTION_BINARY = 'REJECTION_BINARY'
REJECTION_METADATA = 'REJECTION_METADATA'
REJECTION_REVIEW_SUBMISSION = 'REJECTION_REVIEW_SUBMISSION'
APP_MESSAGE_ARC = 'APP_MESSAGE_ARC'
APP_MESSAGE_ARB = 'APP_MESSAGE_ARB'
APP_MESSAGE_COMM = 'APP_MESSAGE_COMM'
end

attr_mapping({
state: 'state',
canDeveloperAddNote: 'can_developer_add_node',
objectionableContent: 'objectionable_content',
threadType: 'thread_type',
createdDate: 'created_date',
lastMessageResponseDate: 'last_message_response_date',

# includes
resolutionCenterMessages: 'resolution_center_messages',
appStoreVersion: 'app_store_version'
})

def self.type
return "resolutionCenterThreads"
end

#
# API
#

def self.all(client: nil, filter:, includes: nil)
client ||= Spaceship::ConnectAPI
resps = client.get_resolution_center_threads(filter: filter, includes: includes).all_pages
return resps.flat_map(&:to_models)
end

def fetch_messages(client: nil, filter: {}, includes: nil)
client ||= Spaceship::ConnectAPI
resps = client.get_resolution_center_messages(thread_id: id, filter: filter, includes: includes).all_pages
return resps.flat_map(&:to_models)
end

def fetch_rejection_reasons(client: nil, includes: nil)
client ||= Spaceship::ConnectAPI
resp = client.get_review_rejection(filter: { 'resolutionCenterMessage.resolutionCenterThread': id }, includes: includes)
return resp.to_models
end
end
end
end
19 changes: 19 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/review_rejection.rb
@@ -0,0 +1,19 @@
require_relative '../model'

module Spaceship
class ConnectAPI
class ReviewRejection
include Spaceship::ConnectAPI::Model

attr_accessor :reasons

attr_mapping({
reasons: 'reasons'
})

def self.type
return 'reviewRejections'
end
end
end
end
12 changes: 12 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/review_submission.rb
Expand Up @@ -69,6 +69,18 @@ def add_app_store_version_to_review_items(client: nil, app_store_version_id:)
resp = client.post_review_submission_item(review_submission_id: id, app_store_version_id: app_store_version_id)
return resp.to_models.first
end

def fetch_resolution_center_threads(client: nil)
client ||= Spaceship::ConnectAPI
resp = client.get_resolution_center_threads(filter: { reviewSubmission: id }, includes: 'reviewSubmission')
return resp.to_models
end

def latest_resolution_center_messages(client: nil)
client ||= Spaceship::ConnectAPI
threads = fetch_resolution_center_threads(client: client)
threads.first.fetch_messages(client: client)
end
end
end
end
23 changes: 23 additions & 0 deletions spaceship/lib/spaceship/connect_api/tunes/tunes.rb
Expand Up @@ -1252,6 +1252,29 @@ def get_territories(filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
tunes_request_client.get("territories", params)
end

#
# resolutionCenter
#
# As of 2022-11-11:
# This is not official available throught the App Store Connect API using an API Key.
# This is only works with Apple ID auth.
#

def get_resolution_center_threads(filter: {}, includes: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes)
tunes_request_client.get('resolutionCenterThreads', params)
end

def get_resolution_center_messages(thread_id:, filter: {}, includes: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes)
tunes_request_client.get("resolutionCenterThreads/#{thread_id}/resolutionCenterMessages", params)
end

def get_review_rejection(filter: {}, includes: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes)
tunes_request_client.get("reviewRejections", params)
end
end
end
end
Expand Down