Upsert playstore manifest¶
Summary¶
Source repository:
jef-systems/jef-playstore-backendSource SHA:
6ceeeefc95a4a88ab42d116f11f75b65357c4965Source run id:
26344481220Module:
PlaystoreLambda function:
playstore-manifest-upsertHTTP method:
POSTInvocation mode:
asyncPackage mode:
no-packageAPI category:
Playstore Complex No Package Async POST APIsAPI path:
/playstore-manifest-upsertEndpoint URL:
https://efj8o1q96l.execute-api.ap-southeast-1.amazonaws.com/prod/playstore-manifest-upsertDocumentation scope:
lambda-complex-no-packages
Async Confirmation Rule¶
This write API is documented as an async accepted request, not final write success. Use the corresponding GET API to confirm the final state.
Description¶
POST endpoint that accepts APK release metadata from the b1 Android APK build workflow and upserts one jef-playstore-manifests record by package_name using gsi_2 index get-by-package-name.
API Gateway Response¶
{
"status_code": 202,
"message": "This endpoint returns 202 when the request is accepted. The Lambda function continues processing asynchronously."
}
Payload Example¶
{
"name": "JEF Demo App",
"slug": "jef-demo-app",
"version": "28",
"package_name": "com.jef.demo",
"scheme": "jefdemo",
"icon": "./assets/images/icon.png",
"idempotency_key": "8d4e7d32-2f6f-4d13-9b8e-0f4e98ef0001",
"apk_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"object_key": "github-artifacts/com.jef.demo/28/release.apk",
"file_name": "release.apk"
}
Payload Schema¶
{
"root": {
"type": "M",
"required": true,
"attributes": {
"name": {
"type": "S",
"required": true,
"regex": "^[A-Za-z0-9 .,'_-]{1,120}$"
},
"slug": {
"type": "S",
"required": true,
"regex": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"version": {
"type": "S",
"required": true,
"regex": "^(?:[0-9]+|[0-9]+[.][0-9]+[.][0-9]+)$"
},
"package_name": {
"type": "S",
"required": true,
"regex": "^[a-zA-Z][a-zA-Z0-9_]*(?:[.][a-zA-Z][a-zA-Z0-9_]*){1,}$"
},
"scheme": {
"type": "S",
"required": false,
"regex": "^[a-z][a-z0-9+.-]{1,80}$"
},
"icon": {
"type": "S",
"required": false,
"regex": "^.{0,500}$"
},
"idempotency_key": {
"type": "S",
"required": true,
"regex": "^[A-Za-z0-9._:-]{1,160}$"
},
"apk_sha256": {
"type": "S",
"required": true,
"regex": "^[A-Fa-f0-9]{64}$"
},
"object_key": {
"type": "S",
"required": true,
"regex": "^github-artifacts/[A-Za-z0-9_.]+/(?:[0-9]+|[0-9]+[.][0-9]+[.][0-9]+)/release[.]apk$"
},
"file_name": {
"type": "S",
"required": true,
"regex": "^release[.]apk$"
}
}
}
}
Response Schema¶
{
"root": {
"type": "M",
"required": true,
"attributes": {
"is_accepted": {
"type": "BOOL",
"required": true
},
"is_saved": {
"type": "BOOL",
"required": true
},
"is_idempotent": {
"type": "BOOL",
"required": false
},
"exists": {
"type": "BOOL",
"required": true
},
"message_type": {
"type": "S",
"required": true
},
"message": {
"type": "S",
"required": true
},
"operation": {
"type": "S",
"required": true
},
"status_code": {
"type": "N",
"required": true
},
"package_name": {
"type": "S",
"required": false
},
"version": {
"type": "S",
"required": false
},
"object_key": {
"type": "S",
"required": false
},
"file_name": {
"type": "S",
"required": false
},
"apk_sha256": {
"type": "S",
"required": false
},
"manifest_id": {
"type": "S",
"required": false
},
"release_status": {
"type": "S",
"required": false
},
"failure_code": {
"type": "S",
"required": false
},
"failure_reason": {
"type": "S",
"required": false
},
"item": {
"type": "M",
"required": false
}
}
}
}
Request Payload¶
{
"name": "JEF Demo App",
"slug": "jef-demo-app",
"version": "28",
"package_name": "com.jef.demo",
"scheme": "jefdemo",
"icon": "./assets/images/icon.png",
"idempotency_key": "8d4e7d32-2f6f-4d13-9b8e-0f4e98ef0001",
"apk_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"object_key": "github-artifacts/com.jef.demo/28/release.apk",
"file_name": "release.apk"
}
CMD curl¶
curl -X POST "https://efj8o1q96l.execute-api.ap-southeast-1.amazonaws.com/prod/playstore-manifest-upsert" \
-H "Content-Type: application/json" \
--data-raw '{"name":"JEF Demo App","slug":"jef-demo-app","version":"28","package_name":"com.jef.demo","scheme":"jefdemo","icon":"./assets/images/icon.png","idempotency_key":"8d4e7d32-2f6f-4d13-9b8e-0f4e98ef0001","apk_sha256":"0000000000000000000000000000000000000000000000000000000000000000","object_key":"github-artifacts/com.jef.demo/28/release.apk","file_name":"release.apk"}'
PowerShell curl¶
curl.exe -X POST "https://efj8o1q96l.execute-api.ap-southeast-1.amazonaws.com/prod/playstore-manifest-upsert" `
-H "Content-Type: application/json" `
--data-raw '{"name":"JEF Demo App","slug":"jef-demo-app","version":"28","package_name":"com.jef.demo","scheme":"jefdemo","icon":"./assets/images/icon.png","idempotency_key":"8d4e7d32-2f6f-4d13-9b8e-0f4e98ef0001","apk_sha256":"0000000000000000000000000000000000000000000000000000000000000000","object_key":"github-artifacts/com.jef.demo/28/release.apk","file_name":"release.apk"}'