X-Git-Url: https://git.cweiske.de/ouya-game-data.git/blobdiff_plain/2f78136951fdac9223cc13c45fccdb1f631ce696..0ff78a0e28922628de5e75cf2161d2c2a186fb8a:/schema.json diff --git a/schema.json b/schema.json index 752d182..f071196 100644 --- a/schema.json +++ b/schema.json @@ -1,34 +1,37 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://example.com/ouya-game.schema.json", + "$id": "http://cweiske.de/ouya-game.schema.json", "title": "OUYA game metadata", "description": "Game data importable in OUYA API servers.", "type": "object", "required": [ - "package", + "packageName", "title", "releases", "media", "developer" ], - "additionalProperties": false, + "additionalProperties": false, "properties": { - "package": { - "description": "Java package name", - "type": "string" + "packageName": { + "description": "Java package names", + "type": "string", + "examples": [ + "com.vendor.gamename" + ] }, - + "title": { "description": "Game name", "type": "string" }, - + "description": { "description": "Text describing the game. Newlines (CRLF) allowed", "type": "string" }, - + "players": { "description": "How many players can play this game at the same time?", "type": "array", @@ -37,7 +40,7 @@ "minimum": 1 } }, - + "genres": { "description": "Categories", "type": "array", @@ -66,7 +69,9 @@ "Sim/Strategy", "Sports", "Utility", - "Video" + "Video", + + "Open Source" ] } }, @@ -86,15 +91,18 @@ ], "additionalProperties": false, "properties": { - + "name": { - "description": "Human readable version number ('1.6')", - "type": "string" + "description": "Human readable version number", + "type": "string", + "examples": [ + "1.6" + ] }, "versionCode": { "description": "APK-internal version code. Run \"aapt dump badging file.apk\", field \"versionCode\"", - "type": "string" + "type": ["string", "null"] }, "uuid": { @@ -105,7 +113,7 @@ "date": { "description": "When the version has been released", "type": "string", - "format": "date" + "format": "date|datetime" }, "latest": { @@ -145,7 +153,71 @@ "media": { "type": "object", - "FIXME": "" + "required": [ + "discover", + "large" + ], + "additionalProperties": false, + "properties": { + "discover": { + "description": "Image for the OUYA discover store. FIXME: Size", + "type": "string", + "format": "url" + }, + + "large": { + "description": "Large game cover image for the store details page.", + "type": "string", + "format": "url" + }, + + "video": { + "description": "Video for the store details page. Vimeo and Youtube URLs supported", + "type": "string", + "format": "url" + }, + + "screenshots": { + "description": "Additional images for the store details page.", + "type": "array", + "items": { + "type": "string", + "format": "url" + } + }, + + "details": { + "description": "Images and videos for the details page. Can be in any order. If no detail images and videos are given, the large image, video and screenshots are used instead", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "url" + ], + "additionalProperties": false, + "properties": { + "type": { + "description": "Medium type: image or video", + "type": "string", + "enum": ["image", "video"] + }, + + "url": { + "description": "Image URL or video URL. Vimeo and Youtube URLs supported", + "type": "string", + "format": "url" + }, + + "thumb": { + "description": "Small preview image", + "type": "string", + "format": "url" + } + } + } + } + } }, "developer": { @@ -155,31 +227,32 @@ ], "additionalProperties": false, "properties": { - + "uuid": { "description": "Unique ID for the developer", "type": "string" }, - + "name": { "description": "Developer (company or person) name", "type": "string" }, - + "supportEmail": { "description": "E-Mail address for support questions", "type": "string", "format": "email" }, - + "supportPhone": { "description": "Telephone number", "type": "string" }, - + "founder": { "description": "If the developer was an OUYA founder", - "type": "boolean" + "type": "boolean", + "default": false } } }, @@ -226,19 +299,20 @@ "type": "object", "additionalProperties": false, "properties": { - + "likeCount": { "description": "Number of likes this game has", "type": "number", "minimum": 0 }, - + "average": { - "description": "Average rating for this game (0-5)", + "description": "Average rating for this game", "type": "number", - "minimum": 0 + "minimum": 0, + "maximum": 5 }, - + "count": { "description": "Number of ratings", "type": "number", @@ -248,9 +322,63 @@ }, "products": { + "description": "Items that could be bought via the discover store", "type": "array", "items": { - "FIXME": "" + "type": "object", + "required": [ + "identifier", + "name", + "description", + "localPrice", + "originalPrice", + "currency" + ], + "additionalProperties": false, + "properties": { + + "promoted": { + "description": "If this product is the currently promoted/visible one", + "type": "boolean" + }, + + "identifier": { + "description": "Internal key", + "type": "string", + "examples": [ + "full_version" + ] + }, + + "name": { + "description": "Human readable name", + "type": "string", + "examples": [ + "Unlock full game" + ] + }, + + "description": { + "description": "Explanation of the features you will buy", + "type": "string" + }, + + "localPrice": { + "description": "Current price (maybe discounted)", + "type": "number" + }, + + "originalPrice": { + "description": "Previous price", + "type": "number" + }, + + "currency": { + "description": "Three-letter currency code, depending on the player that was logged in", + "type": "string", + "enum": ["EUR", "USD"] + } + } } } }