- Enable backend tests in CI (remove if: false) - Fix test_products_helpers.py to pass current_user parameter - Fix test_routines_helpers.py to include short_id in products - Fix llm_context.py to use product_effect_profile correctly - All 221 tests passing
9077 lines
211 KiB
JSON
9077 lines
211 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "innercontext API",
|
|
"version": "0.1.0"
|
|
},
|
|
"paths": {
|
|
"/auth/session/sync": {
|
|
"post": {
|
|
"tags": [
|
|
"auth"
|
|
],
|
|
"summary": "Sync Session",
|
|
"operationId": "sync_session_auth_session_sync_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SessionSyncRequest"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Payload"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthSessionResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/auth/me": {
|
|
"get": {
|
|
"tags": [
|
|
"auth"
|
|
],
|
|
"summary": "Get Me",
|
|
"operationId": "get_me_auth_me_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthSessionResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/products": {
|
|
"get": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "List Products",
|
|
"operationId": "list_products_products_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "category",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Category"
|
|
}
|
|
},
|
|
{
|
|
"name": "brand",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Brand"
|
|
}
|
|
},
|
|
{
|
|
"name": "targets",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
}
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Targets"
|
|
}
|
|
},
|
|
{
|
|
"name": "is_medication",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Medication"
|
|
}
|
|
},
|
|
{
|
|
"name": "is_tool",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Tool"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProductWithInventory"
|
|
},
|
|
"title": "Response List Products Products Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Create Product",
|
|
"operationId": "create_product_products_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductPublic"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/products/parse-text": {
|
|
"post": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Parse Product Text",
|
|
"operationId": "parse_product_text_products_parse_text_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductParseRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductParseResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/products/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "List Products Summary",
|
|
"operationId": "list_products_summary_products_summary_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "category",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Category"
|
|
}
|
|
},
|
|
{
|
|
"name": "brand",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Brand"
|
|
}
|
|
},
|
|
{
|
|
"name": "targets",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
}
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Targets"
|
|
}
|
|
},
|
|
{
|
|
"name": "is_medication",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Medication"
|
|
}
|
|
},
|
|
{
|
|
"name": "is_tool",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Tool"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProductListItem"
|
|
},
|
|
"title": "Response List Products Summary Products Summary Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/products/{product_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Get Product",
|
|
"operationId": "get_product_products__product_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "product_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Product Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductWithInventory"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Update Product",
|
|
"operationId": "update_product_products__product_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "product_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Product Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductPublic"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Delete Product",
|
|
"operationId": "delete_product_products__product_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "product_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Product Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/products/{product_id}/inventory": {
|
|
"get": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "List Product Inventory",
|
|
"operationId": "list_product_inventory_products__product_id__inventory_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "product_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Product Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProductInventory"
|
|
},
|
|
"title": "Response List Product Inventory Products Product Id Inventory Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Create Product Inventory",
|
|
"operationId": "create_product_inventory_products__product_id__inventory_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "product_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Product Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InventoryCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductInventory"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/products/suggest": {
|
|
"post": {
|
|
"tags": [
|
|
"products"
|
|
],
|
|
"summary": "Suggest Shopping",
|
|
"operationId": "suggest_shopping_products_suggest_post",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ShoppingSuggestionResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/inventory/{inventory_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"inventory"
|
|
],
|
|
"summary": "Get Inventory",
|
|
"operationId": "get_inventory_inventory__inventory_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "inventory_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Inventory Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductInventory"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"inventory"
|
|
],
|
|
"summary": "Update Inventory",
|
|
"operationId": "update_inventory_inventory__inventory_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "inventory_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Inventory Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InventoryUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProductInventory"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"inventory"
|
|
],
|
|
"summary": "Delete Inventory",
|
|
"operationId": "delete_inventory_inventory__inventory_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "inventory_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Inventory Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/profile": {
|
|
"get": {
|
|
"tags": [
|
|
"profile"
|
|
],
|
|
"summary": "Get Profile",
|
|
"operationId": "get_profile_profile_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/UserProfilePublic"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Response Get Profile Profile Get"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"profile"
|
|
],
|
|
"summary": "Upsert Profile",
|
|
"operationId": "upsert_profile_profile_patch",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserProfileUpdate"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserProfilePublic"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/health/medications": {
|
|
"get": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "List Medications",
|
|
"operationId": "list_medications_health_medications_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "kind",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/MedicationKind"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Kind"
|
|
}
|
|
},
|
|
{
|
|
"name": "product_name",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Product Name"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MedicationEntry"
|
|
},
|
|
"title": "Response List Medications Health Medications Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Create Medication",
|
|
"operationId": "create_medication_health_medications_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationEntry"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health/medications/{medication_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Get Medication",
|
|
"operationId": "get_medication_health_medications__medication_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "medication_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Medication Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationEntry"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Update Medication",
|
|
"operationId": "update_medication_health_medications__medication_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "medication_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Medication Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationEntry"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Delete Medication",
|
|
"operationId": "delete_medication_health_medications__medication_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "medication_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Medication Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health/medications/{medication_id}/usages": {
|
|
"get": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "List Usages",
|
|
"operationId": "list_usages_health_medications__medication_id__usages_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "medication_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Medication Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MedicationUsage"
|
|
},
|
|
"title": "Response List Usages Health Medications Medication Id Usages Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Create Usage",
|
|
"operationId": "create_usage_health_medications__medication_id__usages_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "medication_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Medication Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UsageCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationUsage"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health/usages/{usage_id}": {
|
|
"patch": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Update Usage",
|
|
"operationId": "update_usage_health_usages__usage_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "usage_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Usage Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UsageUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MedicationUsage"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Delete Usage",
|
|
"operationId": "delete_usage_health_usages__usage_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "usage_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Usage Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health/lab-results": {
|
|
"get": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "List Lab Results",
|
|
"operationId": "list_lab_results_health_lab_results_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "q",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Q"
|
|
}
|
|
},
|
|
{
|
|
"name": "test_code",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Code"
|
|
}
|
|
},
|
|
{
|
|
"name": "flag",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResultFlag"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Flag"
|
|
}
|
|
},
|
|
{
|
|
"name": "flags",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ResultFlag"
|
|
},
|
|
"title": "Flags"
|
|
}
|
|
},
|
|
{
|
|
"name": "without_flag",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"title": "Without Flag"
|
|
}
|
|
},
|
|
{
|
|
"name": "from_date",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "From Date"
|
|
}
|
|
},
|
|
{
|
|
"name": "to_date",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "To Date"
|
|
}
|
|
},
|
|
{
|
|
"name": "latest_only",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"title": "Latest Only"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"maximum": 200,
|
|
"minimum": 1,
|
|
"default": 50,
|
|
"title": "Limit"
|
|
}
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"default": 0,
|
|
"title": "Offset"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LabResultListResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Create Lab Result",
|
|
"operationId": "create_lab_result_health_lab_results_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LabResultCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LabResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health/lab-results/{result_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Get Lab Result",
|
|
"operationId": "get_lab_result_health_lab_results__result_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "result_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Result Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LabResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Update Lab Result",
|
|
"operationId": "update_lab_result_health_lab_results__result_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "result_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Result Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LabResultUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LabResult"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"health"
|
|
],
|
|
"summary": "Delete Lab Result",
|
|
"operationId": "delete_lab_result_health_lab_results__result_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "result_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Result Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/routines": {
|
|
"get": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "List Routines",
|
|
"operationId": "list_routines_routines_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "from_date",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "From Date"
|
|
}
|
|
},
|
|
{
|
|
"name": "to_date",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "To Date"
|
|
}
|
|
},
|
|
{
|
|
"name": "part_of_day",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PartOfDay"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Part Of Day"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Create Routine",
|
|
"operationId": "create_routine_routines_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Routine"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/routines/suggest": {
|
|
"post": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Suggest Routine",
|
|
"operationId": "suggest_routine_routines_suggest_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuggestRoutineRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineSuggestion"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/routines/suggest-batch": {
|
|
"post": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Suggest Batch",
|
|
"operationId": "suggest_batch_routines_suggest_batch_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuggestBatchRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BatchSuggestion"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/routines/grooming-schedule": {
|
|
"get": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "List Grooming Schedule",
|
|
"operationId": "list_grooming_schedule_routines_grooming_schedule_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/GroomingSchedule"
|
|
},
|
|
"type": "array",
|
|
"title": "Response List Grooming Schedule Routines Grooming Schedule Get"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Create Grooming Schedule",
|
|
"operationId": "create_grooming_schedule_routines_grooming_schedule_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GroomingScheduleCreate"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GroomingSchedule"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/routines/{routine_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Get Routine",
|
|
"operationId": "get_routine_routines__routine_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "routine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Routine Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Update Routine",
|
|
"operationId": "update_routine_routines__routine_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "routine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Routine Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Routine"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Delete Routine",
|
|
"operationId": "delete_routine_routines__routine_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "routine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Routine Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/routines/{routine_id}/steps": {
|
|
"post": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Add Step",
|
|
"operationId": "add_step_routines__routine_id__steps_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "routine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Routine Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineStepCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineStep"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/routines/steps/{step_id}": {
|
|
"patch": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Update Step",
|
|
"operationId": "update_step_routines_steps__step_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "step_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Step Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineStepUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RoutineStep"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Delete Step",
|
|
"operationId": "delete_step_routines_steps__step_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "step_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Step Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/routines/grooming-schedule/{entry_id}": {
|
|
"patch": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Update Grooming Schedule",
|
|
"operationId": "update_grooming_schedule_routines_grooming_schedule__entry_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "entry_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Entry Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GroomingScheduleUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GroomingSchedule"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"routines"
|
|
],
|
|
"summary": "Delete Grooming Schedule",
|
|
"operationId": "delete_grooming_schedule_routines_grooming_schedule__entry_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "entry_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Entry Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/skincare/analyze-photos": {
|
|
"post": {
|
|
"tags": [
|
|
"skincare"
|
|
],
|
|
"summary": "Analyze Skin Photos",
|
|
"operationId": "analyze_skin_photos_skincare_analyze_photos_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"multipart/form-data": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Body_analyze_skin_photos_skincare_analyze_photos_post"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkinPhotoAnalysisResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/skincare": {
|
|
"get": {
|
|
"tags": [
|
|
"skincare"
|
|
],
|
|
"summary": "List Snapshots",
|
|
"operationId": "list_snapshots_skincare_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "from_date",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "From Date"
|
|
}
|
|
},
|
|
{
|
|
"name": "to_date",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "To Date"
|
|
}
|
|
},
|
|
{
|
|
"name": "overall_state",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/OverallSkinState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Overall State"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConditionSnapshotPublic"
|
|
},
|
|
"title": "Response List Snapshots Skincare Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"skincare"
|
|
],
|
|
"summary": "Create Snapshot",
|
|
"operationId": "create_snapshot_skincare_post",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SnapshotCreate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkinConditionSnapshotPublic"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/skincare/{snapshot_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"skincare"
|
|
],
|
|
"summary": "Get Snapshot",
|
|
"operationId": "get_snapshot_skincare__snapshot_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "snapshot_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Snapshot Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkinConditionSnapshotPublic"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"skincare"
|
|
],
|
|
"summary": "Update Snapshot",
|
|
"operationId": "update_snapshot_skincare__snapshot_id__patch",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "snapshot_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Snapshot Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SnapshotUpdate"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SkinConditionSnapshotPublic"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"skincare"
|
|
],
|
|
"summary": "Delete Snapshot",
|
|
"operationId": "delete_snapshot_skincare__snapshot_id__delete",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "snapshot_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Snapshot Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Successful Response"
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ai-logs": {
|
|
"get": {
|
|
"tags": [
|
|
"ai-logs"
|
|
],
|
|
"summary": "List Ai Logs",
|
|
"operationId": "list_ai_logs_ai_logs_get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "endpoint",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Endpoint"
|
|
}
|
|
},
|
|
{
|
|
"name": "success",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Success"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"in": "query",
|
|
"required": false,
|
|
"schema": {
|
|
"type": "integer",
|
|
"default": 50,
|
|
"title": "Limit"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AICallLogPublic"
|
|
},
|
|
"title": "Response List Ai Logs Ai Logs Get"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ai-logs/{log_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"ai-logs"
|
|
],
|
|
"summary": "Get Ai Log",
|
|
"operationId": "get_ai_log_ai_logs__log_id__get",
|
|
"security": [
|
|
{
|
|
"HTTPBearer": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "log_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Log Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AICallLog"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/health-check": {
|
|
"get": {
|
|
"summary": "Health Check",
|
|
"operationId": "health_check_health_check_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"AICallLog": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"endpoint": {
|
|
"type": "string",
|
|
"title": "Endpoint"
|
|
},
|
|
"model": {
|
|
"type": "string",
|
|
"title": "Model"
|
|
},
|
|
"system_prompt": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "System Prompt"
|
|
},
|
|
"user_input": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Input"
|
|
},
|
|
"response_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Response Text"
|
|
},
|
|
"prompt_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Prompt Tokens"
|
|
},
|
|
"completion_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Completion Tokens"
|
|
},
|
|
"total_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Total Tokens"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Duration Ms"
|
|
},
|
|
"finish_reason": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Finish Reason"
|
|
},
|
|
"tool_trace": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Tool Trace"
|
|
},
|
|
"success": {
|
|
"type": "boolean",
|
|
"title": "Success",
|
|
"default": true
|
|
},
|
|
"error_detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Error Detail"
|
|
},
|
|
"validation_errors": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Validation Errors"
|
|
},
|
|
"validation_warnings": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Validation Warnings"
|
|
},
|
|
"auto_fixed": {
|
|
"type": "boolean",
|
|
"title": "Auto Fixed",
|
|
"default": false
|
|
},
|
|
"reasoning_chain": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Reasoning Chain",
|
|
"description": "LLM reasoning/thinking process (MEDIUM thinking level)"
|
|
},
|
|
"thoughts_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Thoughts Tokens",
|
|
"description": "Thinking tokens (thoughtsTokenCount) - separate from output budget"
|
|
},
|
|
"tool_use_prompt_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Tool Use Prompt Tokens",
|
|
"description": "Tool use prompt tokens (toolUsePromptTokenCount)"
|
|
},
|
|
"cached_content_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Cached Content Tokens",
|
|
"description": "Cached content tokens (cachedContentTokenCount)"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"endpoint",
|
|
"model"
|
|
],
|
|
"title": "AICallLog"
|
|
},
|
|
"AICallLogPublic": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"created_at": {
|
|
"title": "Created At"
|
|
},
|
|
"endpoint": {
|
|
"type": "string",
|
|
"title": "Endpoint"
|
|
},
|
|
"model": {
|
|
"type": "string",
|
|
"title": "Model"
|
|
},
|
|
"prompt_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Prompt Tokens"
|
|
},
|
|
"completion_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Completion Tokens"
|
|
},
|
|
"total_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Total Tokens"
|
|
},
|
|
"duration_ms": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Duration Ms"
|
|
},
|
|
"tool_trace": {
|
|
"anyOf": [
|
|
{
|
|
"additionalProperties": true,
|
|
"type": "object"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Tool Trace"
|
|
},
|
|
"success": {
|
|
"type": "boolean",
|
|
"title": "Success"
|
|
},
|
|
"error_detail": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Error Detail"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"created_at",
|
|
"endpoint",
|
|
"model",
|
|
"success"
|
|
],
|
|
"title": "AICallLogPublic",
|
|
"description": "List-friendly view: omits large text fields."
|
|
},
|
|
"AbsorptionSpeed": {
|
|
"type": "string",
|
|
"enum": [
|
|
"very_fast",
|
|
"fast",
|
|
"moderate",
|
|
"slow",
|
|
"very_slow"
|
|
],
|
|
"title": "AbsorptionSpeed"
|
|
},
|
|
"ActiveIngredient": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"percent": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 100.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Percent"
|
|
},
|
|
"functions": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/IngredientFunction"
|
|
},
|
|
"type": "array",
|
|
"title": "Functions"
|
|
},
|
|
"strength_level": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/StrengthLevel"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"irritation_potential": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/StrengthLevel"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"name"
|
|
],
|
|
"title": "ActiveIngredient"
|
|
},
|
|
"AuthHouseholdMembershipPublic": {
|
|
"properties": {
|
|
"household_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Household Id"
|
|
},
|
|
"role": {
|
|
"$ref": "#/components/schemas/HouseholdRole"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"household_id",
|
|
"role"
|
|
],
|
|
"title": "AuthHouseholdMembershipPublic"
|
|
},
|
|
"AuthIdentityPublic": {
|
|
"properties": {
|
|
"issuer": {
|
|
"type": "string",
|
|
"title": "Issuer"
|
|
},
|
|
"subject": {
|
|
"type": "string",
|
|
"title": "Subject"
|
|
},
|
|
"email": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Email"
|
|
},
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Name"
|
|
},
|
|
"preferred_username": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Preferred Username"
|
|
},
|
|
"groups": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Groups"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"issuer",
|
|
"subject"
|
|
],
|
|
"title": "AuthIdentityPublic"
|
|
},
|
|
"AuthProfilePublic": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"birth_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Birth Date"
|
|
},
|
|
"sex_at_birth": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sex At Birth"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"user_id",
|
|
"created_at",
|
|
"updated_at"
|
|
],
|
|
"title": "AuthProfilePublic"
|
|
},
|
|
"AuthSessionResponse": {
|
|
"properties": {
|
|
"user": {
|
|
"$ref": "#/components/schemas/AuthUserPublic"
|
|
},
|
|
"identity": {
|
|
"$ref": "#/components/schemas/AuthIdentityPublic"
|
|
},
|
|
"profile": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AuthProfilePublic"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"user",
|
|
"identity"
|
|
],
|
|
"title": "AuthSessionResponse"
|
|
},
|
|
"AuthUserPublic": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"role": {
|
|
"$ref": "#/components/schemas/Role"
|
|
},
|
|
"household_membership": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AuthHouseholdMembershipPublic"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"role"
|
|
],
|
|
"title": "AuthUserPublic"
|
|
},
|
|
"BarrierState": {
|
|
"type": "string",
|
|
"enum": [
|
|
"intact",
|
|
"mildly_compromised",
|
|
"compromised"
|
|
],
|
|
"title": "BarrierState"
|
|
},
|
|
"BatchSuggestion": {
|
|
"properties": {
|
|
"days": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/DayPlan"
|
|
},
|
|
"type": "array",
|
|
"title": "Days"
|
|
},
|
|
"overall_reasoning": {
|
|
"type": "string",
|
|
"title": "Overall Reasoning"
|
|
},
|
|
"validation_warnings": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Validation Warnings"
|
|
},
|
|
"auto_fixes_applied": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Auto Fixes Applied"
|
|
},
|
|
"response_metadata": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResponseMetadata"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"days",
|
|
"overall_reasoning"
|
|
],
|
|
"title": "BatchSuggestion"
|
|
},
|
|
"Body_analyze_skin_photos_skincare_analyze_photos_post": {
|
|
"properties": {
|
|
"photos": {
|
|
"items": {
|
|
"type": "string",
|
|
"contentMediaType": "application/octet-stream"
|
|
},
|
|
"type": "array",
|
|
"title": "Photos"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"photos"
|
|
],
|
|
"title": "Body_analyze_skin_photos_skincare_analyze_photos_post"
|
|
},
|
|
"DayPlan": {
|
|
"properties": {
|
|
"date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "Date"
|
|
},
|
|
"am_steps": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SuggestedStep"
|
|
},
|
|
"type": "array",
|
|
"title": "Am Steps"
|
|
},
|
|
"pm_steps": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SuggestedStep"
|
|
},
|
|
"type": "array",
|
|
"title": "Pm Steps"
|
|
},
|
|
"reasoning": {
|
|
"type": "string",
|
|
"title": "Reasoning"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"date",
|
|
"am_steps",
|
|
"pm_steps",
|
|
"reasoning"
|
|
],
|
|
"title": "DayPlan"
|
|
},
|
|
"DayTime": {
|
|
"type": "string",
|
|
"enum": [
|
|
"am",
|
|
"pm",
|
|
"both"
|
|
],
|
|
"title": "DayTime"
|
|
},
|
|
"GroomingAction": {
|
|
"type": "string",
|
|
"enum": [
|
|
"shaving_razor",
|
|
"shaving_oneblade",
|
|
"dermarolling"
|
|
],
|
|
"title": "GroomingAction"
|
|
},
|
|
"GroomingSchedule": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"day_of_week": {
|
|
"type": "integer",
|
|
"maximum": 6.0,
|
|
"minimum": 0.0,
|
|
"title": "Day Of Week"
|
|
},
|
|
"action": {
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"day_of_week",
|
|
"action"
|
|
],
|
|
"title": "GroomingSchedule"
|
|
},
|
|
"GroomingScheduleCreate": {
|
|
"properties": {
|
|
"day_of_week": {
|
|
"type": "integer",
|
|
"title": "Day Of Week"
|
|
},
|
|
"action": {
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"day_of_week",
|
|
"action"
|
|
],
|
|
"title": "GroomingScheduleCreate"
|
|
},
|
|
"GroomingScheduleUpdate": {
|
|
"properties": {
|
|
"day_of_week": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Day Of Week"
|
|
},
|
|
"action": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "GroomingScheduleUpdate"
|
|
},
|
|
"HTTPValidationError": {
|
|
"properties": {
|
|
"detail": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ValidationError"
|
|
},
|
|
"type": "array",
|
|
"title": "Detail"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "HTTPValidationError"
|
|
},
|
|
"HouseholdRole": {
|
|
"type": "string",
|
|
"enum": [
|
|
"owner",
|
|
"member"
|
|
],
|
|
"title": "HouseholdRole"
|
|
},
|
|
"IngredientFunction": {
|
|
"type": "string",
|
|
"enum": [
|
|
"humectant",
|
|
"emollient",
|
|
"occlusive",
|
|
"exfoliant_aha",
|
|
"exfoliant_bha",
|
|
"exfoliant_pha",
|
|
"retinoid",
|
|
"antioxidant",
|
|
"soothing",
|
|
"barrier_support",
|
|
"brightening",
|
|
"anti_acne",
|
|
"ceramide",
|
|
"niacinamide",
|
|
"sunscreen",
|
|
"peptide",
|
|
"hair_growth_stimulant",
|
|
"prebiotic",
|
|
"vitamin_c",
|
|
"anti_aging"
|
|
],
|
|
"title": "IngredientFunction"
|
|
},
|
|
"InventoryCreate": {
|
|
"properties": {
|
|
"is_opened": {
|
|
"type": "boolean",
|
|
"title": "Is Opened",
|
|
"default": false
|
|
},
|
|
"opened_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Opened At"
|
|
},
|
|
"finished_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Finished At"
|
|
},
|
|
"expiry_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Expiry Date"
|
|
},
|
|
"remaining_level": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RemainingLevel"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "InventoryCreate"
|
|
},
|
|
"InventoryUpdate": {
|
|
"properties": {
|
|
"is_opened": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Opened"
|
|
},
|
|
"opened_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Opened At"
|
|
},
|
|
"finished_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Finished At"
|
|
},
|
|
"expiry_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Expiry Date"
|
|
},
|
|
"remaining_level": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RemainingLevel"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "InventoryUpdate"
|
|
},
|
|
"LabResult": {
|
|
"properties": {
|
|
"record_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Record Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"collected_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Collected At"
|
|
},
|
|
"test_code": {
|
|
"type": "string",
|
|
"title": "Test Code"
|
|
},
|
|
"test_name_original": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Name Original"
|
|
},
|
|
"test_name_loinc": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Name Loinc"
|
|
},
|
|
"value_num": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Num"
|
|
},
|
|
"value_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Text"
|
|
},
|
|
"value_bool": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Bool"
|
|
},
|
|
"unit_original": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Unit Original"
|
|
},
|
|
"unit_ucum": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Unit Ucum"
|
|
},
|
|
"ref_low": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref Low"
|
|
},
|
|
"ref_high": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref High"
|
|
},
|
|
"ref_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref Text"
|
|
},
|
|
"flag": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResultFlag"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"lab": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Lab"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"collected_at",
|
|
"test_code"
|
|
],
|
|
"title": "LabResult"
|
|
},
|
|
"LabResultCreate": {
|
|
"properties": {
|
|
"collected_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Collected At"
|
|
},
|
|
"test_code": {
|
|
"type": "string",
|
|
"title": "Test Code"
|
|
},
|
|
"test_name_original": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Name Original"
|
|
},
|
|
"test_name_loinc": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Name Loinc"
|
|
},
|
|
"value_num": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Num"
|
|
},
|
|
"value_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Text"
|
|
},
|
|
"value_bool": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Bool"
|
|
},
|
|
"unit_original": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Unit Original"
|
|
},
|
|
"unit_ucum": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Unit Ucum"
|
|
},
|
|
"ref_low": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref Low"
|
|
},
|
|
"ref_high": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref High"
|
|
},
|
|
"ref_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref Text"
|
|
},
|
|
"flag": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResultFlag"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"lab": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Lab"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"collected_at",
|
|
"test_code"
|
|
],
|
|
"title": "LabResultCreate"
|
|
},
|
|
"LabResultListResponse": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/LabResult"
|
|
},
|
|
"type": "array",
|
|
"title": "Items"
|
|
},
|
|
"total": {
|
|
"type": "integer",
|
|
"title": "Total"
|
|
},
|
|
"limit": {
|
|
"type": "integer",
|
|
"title": "Limit"
|
|
},
|
|
"offset": {
|
|
"type": "integer",
|
|
"title": "Offset"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"items",
|
|
"total",
|
|
"limit",
|
|
"offset"
|
|
],
|
|
"title": "LabResultListResponse"
|
|
},
|
|
"LabResultUpdate": {
|
|
"properties": {
|
|
"collected_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Collected At"
|
|
},
|
|
"test_code": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Code"
|
|
},
|
|
"test_name_original": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Name Original"
|
|
},
|
|
"test_name_loinc": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Test Name Loinc"
|
|
},
|
|
"value_num": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Num"
|
|
},
|
|
"value_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Text"
|
|
},
|
|
"value_bool": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Value Bool"
|
|
},
|
|
"unit_original": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Unit Original"
|
|
},
|
|
"unit_ucum": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Unit Ucum"
|
|
},
|
|
"ref_low": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref Low"
|
|
},
|
|
"ref_high": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref High"
|
|
},
|
|
"ref_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ref Text"
|
|
},
|
|
"flag": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResultFlag"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"lab": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Lab"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "LabResultUpdate"
|
|
},
|
|
"MedicationCreate": {
|
|
"properties": {
|
|
"kind": {
|
|
"$ref": "#/components/schemas/MedicationKind"
|
|
},
|
|
"product_name": {
|
|
"type": "string",
|
|
"title": "Product Name"
|
|
},
|
|
"active_substance": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Substance"
|
|
},
|
|
"formulation": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Formulation"
|
|
},
|
|
"route": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Route"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"kind",
|
|
"product_name"
|
|
],
|
|
"title": "MedicationCreate"
|
|
},
|
|
"MedicationEntry": {
|
|
"properties": {
|
|
"record_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Record Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"kind": {
|
|
"$ref": "#/components/schemas/MedicationKind"
|
|
},
|
|
"product_name": {
|
|
"type": "string",
|
|
"title": "Product Name"
|
|
},
|
|
"active_substance": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Substance"
|
|
},
|
|
"formulation": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Formulation"
|
|
},
|
|
"route": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Route"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"kind",
|
|
"product_name"
|
|
],
|
|
"title": "MedicationEntry"
|
|
},
|
|
"MedicationKind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"prescription",
|
|
"otc",
|
|
"supplement",
|
|
"herbal",
|
|
"other"
|
|
],
|
|
"title": "MedicationKind"
|
|
},
|
|
"MedicationUpdate": {
|
|
"properties": {
|
|
"kind": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/MedicationKind"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"product_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Product Name"
|
|
},
|
|
"active_substance": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Substance"
|
|
},
|
|
"formulation": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Formulation"
|
|
},
|
|
"route": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Route"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "MedicationUpdate"
|
|
},
|
|
"MedicationUsage": {
|
|
"properties": {
|
|
"record_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Record Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"medication_record_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Medication Record Id"
|
|
},
|
|
"dose_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose Value"
|
|
},
|
|
"dose_unit": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose Unit"
|
|
},
|
|
"frequency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Frequency"
|
|
},
|
|
"schedule_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Schedule Text"
|
|
},
|
|
"as_needed": {
|
|
"type": "boolean",
|
|
"title": "As Needed",
|
|
"default": false
|
|
},
|
|
"valid_from": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Valid From"
|
|
},
|
|
"valid_to": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Valid To"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"medication_record_id",
|
|
"valid_from"
|
|
],
|
|
"title": "MedicationUsage"
|
|
},
|
|
"OverallSkinState": {
|
|
"type": "string",
|
|
"enum": [
|
|
"excellent",
|
|
"good",
|
|
"fair",
|
|
"poor"
|
|
],
|
|
"title": "OverallSkinState"
|
|
},
|
|
"PartOfDay": {
|
|
"type": "string",
|
|
"enum": [
|
|
"am",
|
|
"pm"
|
|
],
|
|
"title": "PartOfDay"
|
|
},
|
|
"PriceTier": {
|
|
"type": "string",
|
|
"enum": [
|
|
"budget",
|
|
"mid",
|
|
"premium",
|
|
"luxury"
|
|
],
|
|
"title": "PriceTier"
|
|
},
|
|
"ProductCategory": {
|
|
"type": "string",
|
|
"enum": [
|
|
"cleanser",
|
|
"toner",
|
|
"essence",
|
|
"serum",
|
|
"moisturizer",
|
|
"spf",
|
|
"mask",
|
|
"exfoliant",
|
|
"hair_treatment",
|
|
"tool",
|
|
"spot_treatment",
|
|
"oil"
|
|
],
|
|
"title": "ProductCategory"
|
|
},
|
|
"ProductContext": {
|
|
"properties": {
|
|
"safe_after_shaving": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Safe After Shaving"
|
|
},
|
|
"safe_after_acids": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Safe After Acids"
|
|
},
|
|
"safe_after_retinoids": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Safe After Retinoids"
|
|
},
|
|
"safe_with_compromised_barrier": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Safe With Compromised Barrier"
|
|
},
|
|
"low_uv_only": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Low Uv Only"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "ProductContext"
|
|
},
|
|
"ProductCreate": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"brand": {
|
|
"type": "string",
|
|
"title": "Brand"
|
|
},
|
|
"line_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 128
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Line Name"
|
|
},
|
|
"sku": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sku"
|
|
},
|
|
"url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 512
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Url"
|
|
},
|
|
"barcode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Barcode"
|
|
},
|
|
"category": {
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
"recommended_time": {
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TextureType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"absorption_speed": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AbsorptionSpeed"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"leave_on": {
|
|
"type": "boolean",
|
|
"title": "Leave On"
|
|
},
|
|
"price_amount": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Amount"
|
|
},
|
|
"price_currency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 3,
|
|
"minLength": 3
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Currency"
|
|
},
|
|
"size_ml": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Size Ml"
|
|
},
|
|
"pao_months": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 60.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pao Months"
|
|
},
|
|
"inci": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Inci"
|
|
},
|
|
"actives": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActiveIngredient"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Actives"
|
|
},
|
|
"recommended_for": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
"type": "array",
|
|
"title": "Recommended For"
|
|
},
|
|
"targets": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Targets"
|
|
},
|
|
"fragrance_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Fragrance Free"
|
|
},
|
|
"essential_oils_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Essential Oils Free"
|
|
},
|
|
"alcohol_denat_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Alcohol Denat Free"
|
|
},
|
|
"pregnancy_safe": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pregnancy Safe"
|
|
},
|
|
"product_effect_profile": {
|
|
"$ref": "#/components/schemas/ProductEffectProfile"
|
|
},
|
|
"ph_min": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 14.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Min"
|
|
},
|
|
"ph_max": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 14.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Max"
|
|
},
|
|
"context_rules": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"min_interval_hours": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Min Interval Hours"
|
|
},
|
|
"max_frequency_per_week": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 14.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Max Frequency Per Week"
|
|
},
|
|
"is_medication": {
|
|
"type": "boolean",
|
|
"title": "Is Medication",
|
|
"default": false
|
|
},
|
|
"is_tool": {
|
|
"type": "boolean",
|
|
"title": "Is Tool",
|
|
"default": false
|
|
},
|
|
"needle_length_mm": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Needle Length Mm"
|
|
},
|
|
"personal_tolerance_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Personal Tolerance Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"brand",
|
|
"category",
|
|
"recommended_time",
|
|
"leave_on"
|
|
],
|
|
"title": "ProductCreate"
|
|
},
|
|
"ProductEffectProfile": {
|
|
"properties": {
|
|
"hydration_immediate": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Hydration Immediate",
|
|
"default": 0
|
|
},
|
|
"hydration_long_term": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Hydration Long Term",
|
|
"default": 0
|
|
},
|
|
"barrier_repair_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Barrier Repair Strength",
|
|
"default": 0
|
|
},
|
|
"soothing_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Soothing Strength",
|
|
"default": 0
|
|
},
|
|
"exfoliation_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Exfoliation Strength",
|
|
"default": 0
|
|
},
|
|
"retinoid_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Retinoid Strength",
|
|
"default": 0
|
|
},
|
|
"irritation_risk": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Irritation Risk",
|
|
"default": 0
|
|
},
|
|
"comedogenic_risk": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Comedogenic Risk",
|
|
"default": 0
|
|
},
|
|
"barrier_disruption_risk": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Barrier Disruption Risk",
|
|
"default": 0
|
|
},
|
|
"dryness_risk": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Dryness Risk",
|
|
"default": 0
|
|
},
|
|
"brightening_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Brightening Strength",
|
|
"default": 0
|
|
},
|
|
"anti_acne_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Anti Acne Strength",
|
|
"default": 0
|
|
},
|
|
"anti_aging_strength": {
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 0.0,
|
|
"title": "Anti Aging Strength",
|
|
"default": 0
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "ProductEffectProfile"
|
|
},
|
|
"ProductInventory": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"product_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Product Id"
|
|
},
|
|
"is_household_shared": {
|
|
"type": "boolean",
|
|
"title": "Is Household Shared",
|
|
"default": false
|
|
},
|
|
"is_opened": {
|
|
"type": "boolean",
|
|
"title": "Is Opened",
|
|
"default": false
|
|
},
|
|
"opened_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Opened At"
|
|
},
|
|
"finished_at": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Finished At"
|
|
},
|
|
"expiry_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Expiry Date"
|
|
},
|
|
"remaining_level": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RemainingLevel"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"product_id"
|
|
],
|
|
"title": "ProductInventory"
|
|
},
|
|
"ProductListItem": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"brand": {
|
|
"type": "string",
|
|
"title": "Brand"
|
|
},
|
|
"category": {
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
"recommended_time": {
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
"targets": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Targets"
|
|
},
|
|
"is_owned": {
|
|
"type": "boolean",
|
|
"title": "Is Owned"
|
|
},
|
|
"price_tier": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PriceTier"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"price_per_use_pln": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Per Use Pln"
|
|
},
|
|
"price_tier_source": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"enum": [
|
|
"category",
|
|
"fallback",
|
|
"insufficient_data"
|
|
]
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Tier Source"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"brand",
|
|
"category",
|
|
"recommended_time",
|
|
"is_owned"
|
|
],
|
|
"title": "ProductListItem"
|
|
},
|
|
"ProductParseRequest": {
|
|
"properties": {
|
|
"text": {
|
|
"type": "string",
|
|
"title": "Text"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"text"
|
|
],
|
|
"title": "ProductParseRequest"
|
|
},
|
|
"ProductParseResponse": {
|
|
"properties": {
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Name"
|
|
},
|
|
"brand": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Brand"
|
|
},
|
|
"line_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Line Name"
|
|
},
|
|
"sku": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sku"
|
|
},
|
|
"url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Url"
|
|
},
|
|
"barcode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Barcode"
|
|
},
|
|
"category": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"recommended_time": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TextureType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"absorption_speed": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AbsorptionSpeed"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"leave_on": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Leave On"
|
|
},
|
|
"price_amount": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Amount"
|
|
},
|
|
"price_currency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Currency"
|
|
},
|
|
"size_ml": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Size Ml"
|
|
},
|
|
"pao_months": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pao Months"
|
|
},
|
|
"inci": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Inci"
|
|
},
|
|
"actives": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActiveIngredient"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Actives"
|
|
},
|
|
"recommended_for": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Recommended For"
|
|
},
|
|
"targets": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Targets"
|
|
},
|
|
"fragrance_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Fragrance Free"
|
|
},
|
|
"essential_oils_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Essential Oils Free"
|
|
},
|
|
"alcohol_denat_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Alcohol Denat Free"
|
|
},
|
|
"pregnancy_safe": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pregnancy Safe"
|
|
},
|
|
"product_effect_profile": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductEffectProfile"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"ph_min": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Min"
|
|
},
|
|
"ph_max": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Max"
|
|
},
|
|
"context_rules": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"min_interval_hours": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Min Interval Hours"
|
|
},
|
|
"max_frequency_per_week": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Max Frequency Per Week"
|
|
},
|
|
"is_medication": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Medication"
|
|
},
|
|
"is_tool": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Tool"
|
|
},
|
|
"needle_length_mm": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Needle Length Mm"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "ProductParseResponse"
|
|
},
|
|
"ProductPublic": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"brand": {
|
|
"type": "string",
|
|
"title": "Brand"
|
|
},
|
|
"line_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 128
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Line Name"
|
|
},
|
|
"sku": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sku"
|
|
},
|
|
"url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 512
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Url"
|
|
},
|
|
"barcode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Barcode"
|
|
},
|
|
"category": {
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
"recommended_time": {
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TextureType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"absorption_speed": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AbsorptionSpeed"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"leave_on": {
|
|
"type": "boolean",
|
|
"title": "Leave On"
|
|
},
|
|
"price_amount": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Amount"
|
|
},
|
|
"price_currency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 3,
|
|
"minLength": 3
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Currency"
|
|
},
|
|
"size_ml": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Size Ml"
|
|
},
|
|
"pao_months": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 60.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pao Months"
|
|
},
|
|
"inci": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Inci"
|
|
},
|
|
"actives": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActiveIngredient"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Actives"
|
|
},
|
|
"recommended_for": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
"type": "array",
|
|
"title": "Recommended For"
|
|
},
|
|
"targets": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Targets"
|
|
},
|
|
"fragrance_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Fragrance Free"
|
|
},
|
|
"essential_oils_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Essential Oils Free"
|
|
},
|
|
"alcohol_denat_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Alcohol Denat Free"
|
|
},
|
|
"pregnancy_safe": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pregnancy Safe"
|
|
},
|
|
"product_effect_profile": {
|
|
"$ref": "#/components/schemas/ProductEffectProfile"
|
|
},
|
|
"ph_min": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 14.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Min"
|
|
},
|
|
"ph_max": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 14.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Max"
|
|
},
|
|
"context_rules": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"min_interval_hours": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Min Interval Hours"
|
|
},
|
|
"max_frequency_per_week": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 14.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Max Frequency Per Week"
|
|
},
|
|
"is_medication": {
|
|
"type": "boolean",
|
|
"title": "Is Medication",
|
|
"default": false
|
|
},
|
|
"is_tool": {
|
|
"type": "boolean",
|
|
"title": "Is Tool",
|
|
"default": false
|
|
},
|
|
"needle_length_mm": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Needle Length Mm"
|
|
},
|
|
"personal_tolerance_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Personal Tolerance Notes"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
},
|
|
"price_tier": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PriceTier"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"price_per_use_pln": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Per Use Pln"
|
|
},
|
|
"price_tier_source": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Tier Source"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"brand",
|
|
"category",
|
|
"recommended_time",
|
|
"leave_on",
|
|
"id",
|
|
"created_at",
|
|
"updated_at"
|
|
],
|
|
"title": "ProductPublic"
|
|
},
|
|
"ProductSuggestion": {
|
|
"properties": {
|
|
"category": {
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
"product_type": {
|
|
"type": "string",
|
|
"title": "Product Type"
|
|
},
|
|
"priority": {
|
|
"type": "string",
|
|
"enum": [
|
|
"high",
|
|
"medium",
|
|
"low"
|
|
],
|
|
"title": "Priority"
|
|
},
|
|
"key_ingredients": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Key Ingredients"
|
|
},
|
|
"target_concerns": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Target Concerns"
|
|
},
|
|
"recommended_time": {
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
"frequency": {
|
|
"type": "string",
|
|
"title": "Frequency"
|
|
},
|
|
"short_reason": {
|
|
"type": "string",
|
|
"title": "Short Reason"
|
|
},
|
|
"reason_to_buy_now": {
|
|
"type": "string",
|
|
"title": "Reason To Buy Now"
|
|
},
|
|
"reason_not_needed_if_budget_tight": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Reason Not Needed If Budget Tight"
|
|
},
|
|
"fit_with_current_routine": {
|
|
"type": "string",
|
|
"title": "Fit With Current Routine"
|
|
},
|
|
"usage_cautions": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Usage Cautions"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"category",
|
|
"product_type",
|
|
"priority",
|
|
"key_ingredients",
|
|
"target_concerns",
|
|
"recommended_time",
|
|
"frequency",
|
|
"short_reason",
|
|
"reason_to_buy_now",
|
|
"fit_with_current_routine",
|
|
"usage_cautions"
|
|
],
|
|
"title": "ProductSuggestion"
|
|
},
|
|
"ProductUpdate": {
|
|
"properties": {
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Name"
|
|
},
|
|
"brand": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Brand"
|
|
},
|
|
"line_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Line Name"
|
|
},
|
|
"sku": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sku"
|
|
},
|
|
"url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Url"
|
|
},
|
|
"barcode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Barcode"
|
|
},
|
|
"category": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"recommended_time": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TextureType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"absorption_speed": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AbsorptionSpeed"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"leave_on": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Leave On"
|
|
},
|
|
"price_amount": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Amount"
|
|
},
|
|
"price_currency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Currency"
|
|
},
|
|
"size_ml": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Size Ml"
|
|
},
|
|
"pao_months": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pao Months"
|
|
},
|
|
"inci": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Inci"
|
|
},
|
|
"actives": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActiveIngredient"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Actives"
|
|
},
|
|
"recommended_for": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Recommended For"
|
|
},
|
|
"targets": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Targets"
|
|
},
|
|
"fragrance_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Fragrance Free"
|
|
},
|
|
"essential_oils_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Essential Oils Free"
|
|
},
|
|
"alcohol_denat_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Alcohol Denat Free"
|
|
},
|
|
"pregnancy_safe": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pregnancy Safe"
|
|
},
|
|
"product_effect_profile": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductEffectProfile"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"ph_min": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Min"
|
|
},
|
|
"ph_max": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Max"
|
|
},
|
|
"context_rules": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"min_interval_hours": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Min Interval Hours"
|
|
},
|
|
"max_frequency_per_week": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Max Frequency Per Week"
|
|
},
|
|
"is_medication": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Medication"
|
|
},
|
|
"is_tool": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Is Tool"
|
|
},
|
|
"needle_length_mm": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Needle Length Mm"
|
|
},
|
|
"personal_tolerance_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Personal Tolerance Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "ProductUpdate"
|
|
},
|
|
"ProductWithInventory": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"title": "Name"
|
|
},
|
|
"brand": {
|
|
"type": "string",
|
|
"title": "Brand"
|
|
},
|
|
"line_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 128
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Line Name"
|
|
},
|
|
"sku": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sku"
|
|
},
|
|
"url": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 512
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Url"
|
|
},
|
|
"barcode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 64
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Barcode"
|
|
},
|
|
"category": {
|
|
"$ref": "#/components/schemas/ProductCategory"
|
|
},
|
|
"recommended_time": {
|
|
"$ref": "#/components/schemas/DayTime"
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TextureType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"absorption_speed": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AbsorptionSpeed"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"leave_on": {
|
|
"type": "boolean",
|
|
"title": "Leave On"
|
|
},
|
|
"price_amount": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Amount"
|
|
},
|
|
"price_currency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"maxLength": 3,
|
|
"minLength": 3
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Currency"
|
|
},
|
|
"size_ml": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Size Ml"
|
|
},
|
|
"pao_months": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 60.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pao Months"
|
|
},
|
|
"inci": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Inci"
|
|
},
|
|
"actives": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActiveIngredient"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Actives"
|
|
},
|
|
"recommended_for": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
"type": "array",
|
|
"title": "Recommended For"
|
|
},
|
|
"targets": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Targets"
|
|
},
|
|
"fragrance_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Fragrance Free"
|
|
},
|
|
"essential_oils_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Essential Oils Free"
|
|
},
|
|
"alcohol_denat_free": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Alcohol Denat Free"
|
|
},
|
|
"pregnancy_safe": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Pregnancy Safe"
|
|
},
|
|
"product_effect_profile": {
|
|
"$ref": "#/components/schemas/ProductEffectProfile"
|
|
},
|
|
"ph_min": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 14.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Min"
|
|
},
|
|
"ph_max": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"maximum": 14.0,
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Ph Max"
|
|
},
|
|
"context_rules": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ProductContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"min_interval_hours": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"minimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Min Interval Hours"
|
|
},
|
|
"max_frequency_per_week": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 14.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Max Frequency Per Week"
|
|
},
|
|
"is_medication": {
|
|
"type": "boolean",
|
|
"title": "Is Medication",
|
|
"default": false
|
|
},
|
|
"is_tool": {
|
|
"type": "boolean",
|
|
"title": "Is Tool",
|
|
"default": false
|
|
},
|
|
"needle_length_mm": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number",
|
|
"exclusiveMinimum": 0.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Needle Length Mm"
|
|
},
|
|
"personal_tolerance_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Personal Tolerance Notes"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
},
|
|
"price_tier": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PriceTier"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"price_per_use_pln": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Per Use Pln"
|
|
},
|
|
"price_tier_source": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Price Tier Source"
|
|
},
|
|
"inventory": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProductInventory"
|
|
},
|
|
"type": "array",
|
|
"title": "Inventory",
|
|
"default": []
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"brand",
|
|
"category",
|
|
"recommended_time",
|
|
"leave_on",
|
|
"id",
|
|
"created_at",
|
|
"updated_at"
|
|
],
|
|
"title": "ProductWithInventory"
|
|
},
|
|
"RemainingLevel": {
|
|
"type": "string",
|
|
"enum": [
|
|
"high",
|
|
"medium",
|
|
"low",
|
|
"nearly_empty"
|
|
],
|
|
"title": "RemainingLevel"
|
|
},
|
|
"ResponseMetadata": {
|
|
"properties": {
|
|
"model_used": {
|
|
"type": "string",
|
|
"title": "Model Used"
|
|
},
|
|
"duration_ms": {
|
|
"type": "integer",
|
|
"title": "Duration Ms"
|
|
},
|
|
"reasoning_chain": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Reasoning Chain"
|
|
},
|
|
"token_metrics": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenMetrics"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"model_used",
|
|
"duration_ms"
|
|
],
|
|
"title": "ResponseMetadata",
|
|
"description": "Metadata about the LLM response for observability."
|
|
},
|
|
"ResultFlag": {
|
|
"type": "string",
|
|
"enum": [
|
|
"N",
|
|
"ABN",
|
|
"POS",
|
|
"NEG",
|
|
"L",
|
|
"H"
|
|
],
|
|
"title": "ResultFlag"
|
|
},
|
|
"Role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"admin",
|
|
"member"
|
|
],
|
|
"title": "Role"
|
|
},
|
|
"Routine": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"routine_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "Routine Date"
|
|
},
|
|
"part_of_day": {
|
|
"$ref": "#/components/schemas/PartOfDay"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"routine_date",
|
|
"part_of_day"
|
|
],
|
|
"title": "Routine"
|
|
},
|
|
"RoutineCreate": {
|
|
"properties": {
|
|
"routine_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "Routine Date"
|
|
},
|
|
"part_of_day": {
|
|
"$ref": "#/components/schemas/PartOfDay"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"routine_date",
|
|
"part_of_day"
|
|
],
|
|
"title": "RoutineCreate"
|
|
},
|
|
"RoutineStep": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"user_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "User Id"
|
|
},
|
|
"routine_id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Routine Id"
|
|
},
|
|
"product_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Product Id"
|
|
},
|
|
"order_index": {
|
|
"type": "integer",
|
|
"minimum": 0.0,
|
|
"title": "Order Index"
|
|
},
|
|
"action_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"action_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Action Notes"
|
|
},
|
|
"dose": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Region"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"routine_id",
|
|
"order_index"
|
|
],
|
|
"title": "RoutineStep"
|
|
},
|
|
"RoutineStepCreate": {
|
|
"properties": {
|
|
"product_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Product Id"
|
|
},
|
|
"order_index": {
|
|
"type": "integer",
|
|
"title": "Order Index"
|
|
},
|
|
"action_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"action_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Action Notes"
|
|
},
|
|
"dose": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Region"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"order_index"
|
|
],
|
|
"title": "RoutineStepCreate"
|
|
},
|
|
"RoutineStepUpdate": {
|
|
"properties": {
|
|
"product_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Product Id"
|
|
},
|
|
"order_index": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Order Index"
|
|
},
|
|
"action_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"action_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Action Notes"
|
|
},
|
|
"dose": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Region"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "RoutineStepUpdate"
|
|
},
|
|
"RoutineSuggestion": {
|
|
"properties": {
|
|
"steps": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SuggestedStep"
|
|
},
|
|
"type": "array",
|
|
"title": "Steps"
|
|
},
|
|
"reasoning": {
|
|
"type": "string",
|
|
"title": "Reasoning"
|
|
},
|
|
"summary": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RoutineSuggestionSummary"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"validation_warnings": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Validation Warnings"
|
|
},
|
|
"auto_fixes_applied": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Auto Fixes Applied"
|
|
},
|
|
"response_metadata": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResponseMetadata"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"steps",
|
|
"reasoning"
|
|
],
|
|
"title": "RoutineSuggestion"
|
|
},
|
|
"RoutineSuggestionSummary": {
|
|
"properties": {
|
|
"primary_goal": {
|
|
"type": "string",
|
|
"title": "Primary Goal",
|
|
"default": ""
|
|
},
|
|
"constraints_applied": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Constraints Applied"
|
|
},
|
|
"confidence": {
|
|
"type": "number",
|
|
"title": "Confidence",
|
|
"default": 0.0
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "RoutineSuggestionSummary"
|
|
},
|
|
"RoutineUpdate": {
|
|
"properties": {
|
|
"routine_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Routine Date"
|
|
},
|
|
"part_of_day": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PartOfDay"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "RoutineUpdate"
|
|
},
|
|
"SessionSyncRequest": {
|
|
"properties": {
|
|
"iss": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Iss"
|
|
},
|
|
"sub": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sub"
|
|
},
|
|
"email": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Email"
|
|
},
|
|
"name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Name"
|
|
},
|
|
"preferred_username": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Preferred Username"
|
|
},
|
|
"groups": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Groups"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "SessionSyncRequest"
|
|
},
|
|
"SexAtBirth": {
|
|
"type": "string",
|
|
"enum": [
|
|
"male",
|
|
"female",
|
|
"intersex"
|
|
],
|
|
"title": "SexAtBirth"
|
|
},
|
|
"ShoppingSuggestionResponse": {
|
|
"properties": {
|
|
"suggestions": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ProductSuggestion"
|
|
},
|
|
"type": "array",
|
|
"title": "Suggestions"
|
|
},
|
|
"reasoning": {
|
|
"type": "string",
|
|
"title": "Reasoning"
|
|
},
|
|
"validation_warnings": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Validation Warnings"
|
|
},
|
|
"auto_fixes_applied": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Auto Fixes Applied"
|
|
},
|
|
"response_metadata": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ResponseMetadata"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"suggestions",
|
|
"reasoning"
|
|
],
|
|
"title": "ShoppingSuggestionResponse"
|
|
},
|
|
"SkinConcern": {
|
|
"type": "string",
|
|
"enum": [
|
|
"acne",
|
|
"rosacea",
|
|
"hyperpigmentation",
|
|
"aging",
|
|
"dehydration",
|
|
"redness",
|
|
"damaged_barrier",
|
|
"pore_visibility",
|
|
"uneven_texture",
|
|
"hair_growth",
|
|
"sebum_excess"
|
|
],
|
|
"title": "SkinConcern"
|
|
},
|
|
"SkinConditionSnapshotPublic": {
|
|
"properties": {
|
|
"snapshot_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "Snapshot Date"
|
|
},
|
|
"overall_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/OverallSkinState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"skin_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinTexture"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"hydration_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Hydration Level"
|
|
},
|
|
"sebum_tzone": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Tzone"
|
|
},
|
|
"sebum_cheeks": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Cheeks"
|
|
},
|
|
"sensitivity_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sensitivity Level"
|
|
},
|
|
"barrier_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BarrierState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"active_concerns": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Active Concerns"
|
|
},
|
|
"risks": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Risks"
|
|
},
|
|
"priorities": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Priorities"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"title": "Id"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"snapshot_date",
|
|
"id",
|
|
"created_at"
|
|
],
|
|
"title": "SkinConditionSnapshotPublic"
|
|
},
|
|
"SkinPhotoAnalysisResponse": {
|
|
"properties": {
|
|
"overall_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/OverallSkinState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"skin_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinTexture"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"hydration_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Hydration Level"
|
|
},
|
|
"sebum_tzone": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Tzone"
|
|
},
|
|
"sebum_cheeks": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Cheeks"
|
|
},
|
|
"sensitivity_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sensitivity Level"
|
|
},
|
|
"barrier_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BarrierState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"active_concerns": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Concerns"
|
|
},
|
|
"risks": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Risks"
|
|
},
|
|
"priorities": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Priorities"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "SkinPhotoAnalysisResponse"
|
|
},
|
|
"SkinTexture": {
|
|
"type": "string",
|
|
"enum": [
|
|
"smooth",
|
|
"rough",
|
|
"flaky",
|
|
"bumpy"
|
|
],
|
|
"title": "SkinTexture"
|
|
},
|
|
"SkinType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"dry",
|
|
"oily",
|
|
"combination",
|
|
"sensitive",
|
|
"normal",
|
|
"acne_prone"
|
|
],
|
|
"title": "SkinType"
|
|
},
|
|
"SnapshotCreate": {
|
|
"properties": {
|
|
"snapshot_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "Snapshot Date"
|
|
},
|
|
"overall_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/OverallSkinState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"skin_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinTexture"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"hydration_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Hydration Level"
|
|
},
|
|
"sebum_tzone": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Tzone"
|
|
},
|
|
"sebum_cheeks": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Cheeks"
|
|
},
|
|
"sensitivity_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer",
|
|
"maximum": 5.0,
|
|
"minimum": 1.0
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sensitivity Level"
|
|
},
|
|
"barrier_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BarrierState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"active_concerns": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array",
|
|
"title": "Active Concerns"
|
|
},
|
|
"risks": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Risks"
|
|
},
|
|
"priorities": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Priorities"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"snapshot_date"
|
|
],
|
|
"title": "SnapshotCreate"
|
|
},
|
|
"SnapshotUpdate": {
|
|
"properties": {
|
|
"snapshot_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Snapshot Date"
|
|
},
|
|
"overall_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/OverallSkinState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"skin_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinType"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"texture": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SkinTexture"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"hydration_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Hydration Level"
|
|
},
|
|
"sebum_tzone": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Tzone"
|
|
},
|
|
"sebum_cheeks": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sebum Cheeks"
|
|
},
|
|
"sensitivity_level": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Sensitivity Level"
|
|
},
|
|
"barrier_state": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BarrierState"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"active_concerns": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"$ref": "#/components/schemas/SkinConcern"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Concerns"
|
|
},
|
|
"risks": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Risks"
|
|
},
|
|
"priorities": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Priorities"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "SnapshotUpdate"
|
|
},
|
|
"StrengthLevel": {
|
|
"type": "integer",
|
|
"enum": [
|
|
1,
|
|
2,
|
|
3
|
|
],
|
|
"title": "StrengthLevel"
|
|
},
|
|
"SuggestBatchRequest": {
|
|
"properties": {
|
|
"from_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "From Date"
|
|
},
|
|
"to_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "To Date"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"include_minoxidil_beard": {
|
|
"type": "boolean",
|
|
"title": "Include Minoxidil Beard",
|
|
"default": false
|
|
},
|
|
"minimize_products": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Minimize Products"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"from_date",
|
|
"to_date"
|
|
],
|
|
"title": "SuggestBatchRequest"
|
|
},
|
|
"SuggestRoutineRequest": {
|
|
"properties": {
|
|
"routine_date": {
|
|
"type": "string",
|
|
"format": "date",
|
|
"title": "Routine Date"
|
|
},
|
|
"part_of_day": {
|
|
"$ref": "#/components/schemas/PartOfDay"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
},
|
|
"include_minoxidil_beard": {
|
|
"type": "boolean",
|
|
"title": "Include Minoxidil Beard",
|
|
"default": false
|
|
},
|
|
"leaving_home": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Leaving Home"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"routine_date",
|
|
"part_of_day"
|
|
],
|
|
"title": "SuggestRoutineRequest"
|
|
},
|
|
"SuggestedStep": {
|
|
"properties": {
|
|
"product_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Product Id"
|
|
},
|
|
"action_type": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GroomingAction"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"action_notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Action Notes"
|
|
},
|
|
"region": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Region"
|
|
},
|
|
"why_this_step": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Why This Step"
|
|
},
|
|
"optional": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Optional"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "SuggestedStep"
|
|
},
|
|
"TextureType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"watery",
|
|
"gel",
|
|
"emulsion",
|
|
"cream",
|
|
"oil",
|
|
"balm",
|
|
"foam",
|
|
"fluid"
|
|
],
|
|
"title": "TextureType"
|
|
},
|
|
"TokenMetrics": {
|
|
"properties": {
|
|
"prompt_tokens": {
|
|
"type": "integer",
|
|
"title": "Prompt Tokens"
|
|
},
|
|
"completion_tokens": {
|
|
"type": "integer",
|
|
"title": "Completion Tokens"
|
|
},
|
|
"thoughts_tokens": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Thoughts Tokens"
|
|
},
|
|
"total_tokens": {
|
|
"type": "integer",
|
|
"title": "Total Tokens"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"prompt_tokens",
|
|
"completion_tokens",
|
|
"total_tokens"
|
|
],
|
|
"title": "TokenMetrics",
|
|
"description": "Token usage metrics from LLM call."
|
|
},
|
|
"UsageCreate": {
|
|
"properties": {
|
|
"dose_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose Value"
|
|
},
|
|
"dose_unit": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose Unit"
|
|
},
|
|
"frequency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Frequency"
|
|
},
|
|
"schedule_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Schedule Text"
|
|
},
|
|
"as_needed": {
|
|
"type": "boolean",
|
|
"title": "As Needed",
|
|
"default": false
|
|
},
|
|
"valid_from": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Valid From"
|
|
},
|
|
"valid_to": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Valid To"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"valid_from"
|
|
],
|
|
"title": "UsageCreate"
|
|
},
|
|
"UsageUpdate": {
|
|
"properties": {
|
|
"dose_value": {
|
|
"anyOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose Value"
|
|
},
|
|
"dose_unit": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Dose Unit"
|
|
},
|
|
"frequency": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Frequency"
|
|
},
|
|
"schedule_text": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Schedule Text"
|
|
},
|
|
"as_needed": {
|
|
"anyOf": [
|
|
{
|
|
"type": "boolean"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "As Needed"
|
|
},
|
|
"valid_from": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Valid From"
|
|
},
|
|
"valid_to": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Valid To"
|
|
},
|
|
"source_file": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Source File"
|
|
},
|
|
"notes": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Notes"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "UsageUpdate"
|
|
},
|
|
"UserProfilePublic": {
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"title": "Id"
|
|
},
|
|
"birth_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Birth Date"
|
|
},
|
|
"sex_at_birth": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SexAtBirth"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Created At"
|
|
},
|
|
"updated_at": {
|
|
"type": "string",
|
|
"format": "date-time",
|
|
"title": "Updated At"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"birth_date",
|
|
"sex_at_birth",
|
|
"created_at",
|
|
"updated_at"
|
|
],
|
|
"title": "UserProfilePublic"
|
|
},
|
|
"UserProfileUpdate": {
|
|
"properties": {
|
|
"birth_date": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Birth Date"
|
|
},
|
|
"sex_at_birth": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SexAtBirth"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "UserProfileUpdate"
|
|
},
|
|
"ValidationError": {
|
|
"properties": {
|
|
"loc": {
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
}
|
|
]
|
|
},
|
|
"type": "array",
|
|
"title": "Location"
|
|
},
|
|
"msg": {
|
|
"type": "string",
|
|
"title": "Message"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"title": "Error Type"
|
|
},
|
|
"input": {
|
|
"title": "Input"
|
|
},
|
|
"ctx": {
|
|
"type": "object",
|
|
"title": "Context"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"loc",
|
|
"msg",
|
|
"type"
|
|
],
|
|
"title": "ValidationError"
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"HTTPBearer": {
|
|
"type": "http",
|
|
"scheme": "bearer"
|
|
}
|
|
}
|
|
}
|
|
}
|