Skip to content

Commit e58cc92

Browse files
committed
feat: add linked product info to promoted_get response
- Add include=inAppPurchaseV2,subscription to getPromotedPurchase API call - Enrich formatPromotedPurchase() with linkedProduct info (name, productId, type) - Add PromotedPurchaseIncludedResource model for included resource parsing
1 parent 1cd9c22 commit e58cc92

2 files changed

Lines changed: 32 additions & 3 deletions

File tree

Sources/asc-mcp/Models/Marketing/PromotedPurchaseModels.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,22 @@ public struct ASCPromotedPurchasesResponse: Codable, Sendable {
1111
/// Single promoted purchase response
1212
public struct ASCPromotedPurchaseResponse: Codable, Sendable {
1313
public let data: ASCPromotedPurchase
14+
public let included: [PromotedPurchaseIncludedResource]?
15+
}
16+
17+
/// Included resource in promoted purchase response (IAP or subscription)
18+
public struct PromotedPurchaseIncludedResource: Codable, Sendable {
19+
public let type: String
20+
public let id: String
21+
public let attributes: PromotedPurchaseIncludedAttributes?
22+
}
23+
24+
/// Attributes for included IAP/subscription resources
25+
public struct PromotedPurchaseIncludedAttributes: Codable, Sendable {
26+
public let name: String?
27+
public let productId: String?
28+
public let inAppPurchaseType: String?
29+
public let state: String?
1430
}
1531

1632
/// Promoted purchase resource

Sources/asc-mcp/Workers/PromotedPurchasesWorker/PromotedPurchasesWorker+Handlers.swift

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ extension PromotedPurchasesWorker {
7474
do {
7575
let response: ASCPromotedPurchaseResponse = try await httpClient.get(
7676
"/v1/promotedPurchases/\(promotedPurchaseId)",
77+
parameters: ["include": "inAppPurchaseV2,subscription"],
7778
as: ASCPromotedPurchaseResponse.self
7879
)
7980

80-
let purchase = formatPromotedPurchase(response.data)
81+
let purchase = formatPromotedPurchase(response.data, included: response.included)
8182

8283
let result = [
8384
"success": true,
@@ -254,13 +255,25 @@ extension PromotedPurchasesWorker {
254255

255256
// MARK: - Formatting
256257

257-
private func formatPromotedPurchase(_ purchase: ASCPromotedPurchase) -> [String: Any] {
258-
return [
258+
private func formatPromotedPurchase(_ purchase: ASCPromotedPurchase, included: [PromotedPurchaseIncludedResource]? = nil) -> [String: Any] {
259+
var result: [String: Any] = [
259260
"id": purchase.id,
260261
"type": purchase.type,
261262
"visibleForAllUsers": purchase.attributes?.visibleForAllUsers.jsonSafe ?? NSNull(),
262263
"enabled": purchase.attributes?.enabled.jsonSafe ?? NSNull(),
263264
"state": purchase.attributes?.state.jsonSafe ?? NSNull()
264265
]
266+
267+
// Add linked product info from included resources
268+
if let included = included, let resource = included.first {
269+
result["linkedProduct"] = [
270+
"type": resource.type,
271+
"id": resource.id,
272+
"name": resource.attributes?.name.jsonSafe ?? NSNull(),
273+
"productId": resource.attributes?.productId.jsonSafe ?? NSNull()
274+
] as [String: Any]
275+
}
276+
277+
return result
265278
}
266279
}

0 commit comments

Comments
 (0)