Added recipe and flavoring vape schemas

This commit is contained in:
Chris 2020-08-29 01:57:54 +02:00
parent 2c645d1b91
commit 06879e9627
7 changed files with 214 additions and 2 deletions

View File

@ -0,0 +1,2 @@
# Vape Flavoring Json Schema

View File

@ -0,0 +1,126 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://vapesafer.info/schema/flavoring-v1.json",
"title": "Ingredient",
"description": "Flavoring used for mixing e-liquid",
"type": "object",
"properties": {
"flavoringKey": {
"description": "Unique flavoring ID",
"type": "string"
},
"brandKey": {
"description": "Unique key for flavor brand",
"type": "string"
},
"flavoringName": {
"description": "The name of the flavoring",
"type": "string"
},
"brandName": {
"description": "The name of the brand",
"type": "string"
},
"flavoringVariant": {
"description": "The version of the flavoring if more than one variant with the same name",
"type": "string"
},
"attributes": {
"type": "object",
"properties": {
"specificGravity": {
"description": "The apparent specific gravity in g/mL",
"type": "number"
},
"suggestedPercent": {
"description": "Suggested initial percent to use when mixing",
"type": "number"
},
"suggestedSteep": {
"description": "Suggested number of days this flavoring need to steep",
"type": "integer"
},
"base": {
"description": "The base used to carry this flavoring, like PG100",
"type": "string"
},
"isAdditive": {
"description": "If true the flavoring is primarily an additive and not a flavor",
"type": "boolean"
},
"isRetired": {
"description": "True if the flavoring has been retired or is no longer available",
"type": "boolean"
}
}
},
"flavorProfiles": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"ingredients": {
"description": "The ingredients that make up this ingredient",
"type": "array",
"items": {
"type": [ "string", "object" ],
"properties": {
"class": { "type":"string" },
"ingredient": { "type":"string" },
"percent": {
"type": [ "number", "object" ],
"properties": {
"min": { "type":"number" },
"max": { "type":"number" }
}
},
"isNotable": { "type": "boolean" },
"cas": { "type": "string" },
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
}
}
},
"uniqueItems": true
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
}
},
"required": [ "flavoringKey", "brandKey", "flavoringName" ]
}

View File

@ -1,5 +1,5 @@
[ [
{ "vendor":"FA", "flavor":"Apple Pie" }, { "vendor":"FA", "flavor":"Apple Pie" },
{ "vendor":"FA", "flavor":"Hazelnut" }, { "vendor":"FA", "flavor":"Hazelnut" },
{ "flavor":"WS-23 10%" } { "flavor":"WS-23 10%", "extra": { "is_additive": true } }
] ]

View File

@ -1,6 +1,6 @@
{ {
"$schema": "http://json-schema.org/draft-07/schema#", "$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://schemas.noccylabs.info/json/vape/flavorstash/v1.schema", "$id": "http://schemas.noccylabs.info/json/vape/flavorstash/flavorstash-v1.schema",
"type": "array", "type": "array",
"items": { "items": {
"type": "object", "type": "object",

View File

@ -0,0 +1 @@
# Vape Recipe Json Schema

View File

@ -0,0 +1,83 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://data.vapesafer.info/schema/recipe.schema.json",
"title": "Recipe",
"description": "An e-juice recipe",
"type": "object",
"properties": {
"url": {
"description": "Original recipe URL. Should be unique and canonical",
"type": "string"
},
"key": {
"description": "Unique identifier for this recipe. Should be slug-like and have an appropriate author prefix",
"type": "string"
},
"recipeName": {
"description": "The name of the recipe",
"type": "string"
},
"author": {
"description": "The author of the recipe",
"oneOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string" },
"url": { "type": "string" }
}
}
]
},
"license": {
"description": "The license this recipe is published under",
"type": "string"
},
"recommendedSteep": {
"description": "The recommended number of days to steep this recipe",
"type": "integer"
},
"type": {
"description": "Recipe type, such as experiment or clone",
"type": "string"
},
"recipe": {
"description": "Recipe ingredients",
"type": "array",
"items": {
"type": "object",
"properties": {
"key": { "type": "string" },
"vendor": { "type": "string" },
"flavor": { "type": "string" },
"percent": { "type": "number" },
"optional": { "type": "boolean" },
"subs": {
"description": "Possible substitutes for this ingredient",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": { "type": "string" },
"vendor": { "type": "string" },
"flavor": { "type": "string" },
"percent": { "type": "number" },
"note": { "type": "string" }
}
}
}
}
},
"note": { "type": "string" }
},
"required": [ "flavor", "percent" ]
}
},
"required": [ "recipeName", "recipe" ]
}