{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://cityresourcegraph.com/schemas/websocket_event.json", "title": "WebSocket Event", "description": "Schema for real-time WebSocket events", "type": "object", "properties": { "event_type": { "type": "string", "enum": ["match_found", "resource_updated", "price_changed", "notification", "system_status"], "description": "Type of event" }, "event_id": { "type": "string", "format": "uuid", "description": "Unique event identifier" }, "timestamp": { "type": "string", "format": "date-time", "description": "Event timestamp" }, "user_id": { "type": "string", "format": "uuid", "description": "Target user (if applicable)" }, "data": { "oneOf": [ {"$ref": "#/definitions/match_event"}, {"$ref": "#/definitions/resource_event"}, {"$ref": "#/definitions/notification_event"}, {"$ref": "#/definitions/system_event"} ] } }, "required": ["event_type", "event_id", "timestamp", "data"], "definitions": { "match_event": { "type": "object", "properties": { "match": { "$ref": "https://cityresourcegraph.com/schemas/match_response.json#/definitions/match" }, "reason": { "type": "string", "enum": ["new_resource", "improved_match", "price_change"], "description": "Why this match was triggered" } }, "required": ["match"] }, "resource_event": { "type": "object", "properties": { "resource_id": { "type": "string", "format": "uuid" }, "changes": { "type": "object", "description": "Changed fields and new values" }, "affected_matches": { "type": "array", "items": { "type": "string", "format": "uuid" }, "description": "Match IDs affected by this change" } }, "required": ["resource_id", "changes"] }, "notification_event": { "type": "object", "properties": { "title": { "type": "string", "maxLength": 200 }, "message": { "type": "string", "maxLength": 1000 }, "priority": { "type": "string", "enum": ["low", "medium", "high", "urgent"], "default": "medium" }, "action_url": { "type": "string", "format": "uri" }, "expires_at": { "type": "string", "format": "date-time" } }, "required": ["title", "message"] }, "system_event": { "type": "object", "properties": { "component": { "type": "string", "enum": ["api", "matching_engine", "database", "cache", "queue"] }, "status": { "type": "string", "enum": ["healthy", "degraded", "down", "maintenance"] }, "message": { "type": "string", "maxLength": 500 }, "estimated_resolution": { "type": "string", "format": "date-time" } }, "required": ["component", "status"] } }, "additionalProperties": false }