8
use serde::Serialize;
9
use smbcloud_ascapi_aso::app_store_version::Platform;
10
use smbcloud_ascapi_aso::prelude::*;
11
-use smbcloud_ascapi_aso::review_submission::STATE_READY_FOR_REVIEW;
11
+use smbcloud_ascapi_aso::review_submission::OPEN_STATES;
12
use smbcloud_ascapi_core::Client;
13
14
/// What [`submit_for_review`] will do, worked out from reads only.
19
pub version_string: Option<String>,
20
pub platform: String,
21
pub app_version_state: Option<String>,
22
- /// An open (`READY_FOR_REVIEW`) submission for this app and platform to
23
- /// reuse. `None` means a new one gets created.
22
+ /// An open submission for this app and platform to reuse: a draft
23
+ /// (`READY_FOR_REVIEW`), or one App Review sent back
24
+ /// (`UNRESOLVED_ISSUES`), which is how a rejected version is
25
+ /// resubmitted. `None` means a new one gets created.
26
pub existing_submission_id: Option<String>,
27
+ /// That submission's state, when there is one.
28
+ pub existing_submission_state: Option<String>,
29
/// Whether the open submission already carries an item. App Store
30
/// Connect allows one item per version, so when this is true the item
31
/// step is skipped.
56
let platform = version.attributes.platform;
57
58
let open = client
55
- .list_review_submissions(app_id, Some(platform), &[STATE_READY_FOR_REVIEW])
59
+ .list_review_submissions(app_id, Some(platform), &OPEN_STATES)
60
.await
61
.map_err(|error| error.to_string())?;
62
let existing = open.into_iter().next();
63
+ let existing_submission_state = existing
64
+ .as_ref()
65
+ .and_then(|submission| submission.attributes.state.clone());
66
67
let existing_submission_has_items = match &existing {
68
Some(submission) => !client
87
platform: platform_name(platform).to_string(),
88
app_version_state: version.attributes.app_version_state,
89
existing_submission_id: existing.map(|submission| submission.id),
90
+ existing_submission_state,
91
existing_submission_has_items,
92
})
93
}