53 lines
1.7 KiB
JSON
53 lines
1.7 KiB
JSON
{
|
|||
|
|
"entities": {
|
||
|
|
"User": {
|
||
|
|
"title": "User Profile",
|
||
|
|
"description": "Represents a user profile with their plan and approval status.",
|
||
|
|
"type": "object",
|
||
|
|
"properties": {
|
||
|
|
"uid": { "type": "string" },
|
||
|
|
"email": { "type": "string" },
|
||
|
|
"name": { "type": "string" },
|
||
|
|
"isPremium": { "type": "boolean" },
|
||
|
|
"isAdmin": { "type": "boolean" },
|
||
|
|
"plan": { "type": "string", "enum": ["basic", "pro", "elite"] },
|
||
|
|
"analysisLimit": { "type": "integer" },
|
||
|
|
"isApproved": { "type": "boolean" }
|
||
|
|
},
|
||
|
|
"required": ["uid", "email", "name", "plan"]
|
||
|
|
},
|
||
|
|
"Signal": {
|
||
|
|
"title": "Trading Signal",
|
||
|
|
"description": "Technical analysis signal generated by the AI.",
|
||
|
|
"type": "object",
|
||
|
|
"properties": {
|
||
|
|
"userId": { "type": "string" },
|
||
|
|
"pair": { "type": "string" },
|
||
|
|
"timeframe": { "type": "string" },
|
||
|
|
"decision": { "type": "string" },
|
||
|
|
"score": { "type": "integer" },
|
||
|
|
"entry": { "type": "string" },
|
||
|
|
"stopLoss": { "type": "string" },
|
||
|
|
"takeProfit": { "type": "string" },
|
||
|
|
"justification": { "type": "string" },
|
||
|
|
"conceptsDetected": { "type": "array", "items": { "type": "string" } },
|
||
|
|
"screenshotUrl": { "type": "string" },
|
||
|
|
"timestamp": { "type": "integer" },
|
||
|
|
"createdAt": { "type": "object" },
|
||
|
|
"result": { "type": "string" }
|
||
|
|
},
|
||
|
|
"required": ["userId", "pair", "decision", "timestamp"]
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"firestore": {
|
||
|
|
"users/{userId}": {
|
||
|
|
"schema": "User",
|
||
|
|
"description": "User profiles by UID."
|
||
|
|
},
|
||
|
|
"signals/{signalId}": {
|
||
|
|
"schema": "Signal",
|
||
|
|
"description": "Generated signals."
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|