2026-04-28 20:32:34 +02:00
|
|
|
{
|
|
|
|
|
"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"]
|
2026-05-06 14:42:38 +02:00
|
|
|
},
|
|
|
|
|
"Testimonial": {
|
|
|
|
|
"title": "User Testimonial",
|
|
|
|
|
"description": "Public review left by a user.",
|
|
|
|
|
"type": "object",
|
|
|
|
|
"properties": {
|
|
|
|
|
"userId": { "type": "string" },
|
|
|
|
|
"userName": { "type": "string" },
|
|
|
|
|
"text": { "type": "string" },
|
|
|
|
|
"timestamp": { "type": "integer" },
|
|
|
|
|
"imageUrls": {
|
|
|
|
|
"type": "array",
|
|
|
|
|
"items": { "type": "string" }
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"required": ["userId", "userName", "text", "timestamp"]
|
2026-05-08 11:42:38 +02:00
|
|
|
},
|
|
|
|
|
"AppSettings": {
|
|
|
|
|
"title": "App Settings",
|
|
|
|
|
"description": "Global application settings.",
|
|
|
|
|
"type": "object",
|
|
|
|
|
"properties": {
|
|
|
|
|
"maintenanceMode": { "type": "boolean" },
|
|
|
|
|
"maintenanceMessage": { "type": "string" }
|
|
|
|
|
},
|
|
|
|
|
"required": ["maintenanceMode"]
|
2026-04-28 20:32:34 +02:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"firestore": {
|
|
|
|
|
"users/{userId}": {
|
|
|
|
|
"schema": "User",
|
|
|
|
|
"description": "User profiles by UID."
|
|
|
|
|
},
|
|
|
|
|
"signals/{signalId}": {
|
|
|
|
|
"schema": "Signal",
|
|
|
|
|
"description": "Generated signals."
|
2026-05-06 14:42:38 +02:00
|
|
|
},
|
|
|
|
|
"testimonials/{testimonialId}": {
|
|
|
|
|
"schema": "Testimonial",
|
|
|
|
|
"description": "Public user testimonials."
|
2026-05-08 11:42:38 +02:00
|
|
|
},
|
|
|
|
|
"settings/{settingId}": {
|
|
|
|
|
"schema": "AppSettings",
|
|
|
|
|
"description": "Global application settings."
|
2026-04-28 20:32:34 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-05-08 11:42:38 +02:00
|
|
|
|