# Query 10: Comprehensive Multi-Method Email Dashboard ## Use Case Description A comprehensive dashboard query that combines multiple JMAP methods to provide a complete email management overview: recent activity, mailbox statistics, thread summaries, and system status. This demonstrates advanced JMAP usage with complex result reference chains. ## Key JMAP Concepts Used - **Complex result reference chains**: Multiple levels of method dependencies - **Batch operations**: Efficient multi-method requests - **Mailbox statistics**: Using server-computed counts and states - **Thread aggregation**: Grouping emails by conversation - **System state monitoring**: Tracking account-wide changes - **Advanced filtering**: Multiple simultaneous filter conditions ## JMAP Request ```json { "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"], "methodCalls": [ [ "Mailbox/get", { "accountId": "u12345678", "ids": null, "properties": [ "id", "name", "role", "totalEmails", "unreadEmails", "totalThreads", "unreadThreads", "parentId", "sortOrder" ] }, "mb0" ], [ "Email/query", { "accountId": "u12345678", "filter": { "operator": "AND", "conditions": [ { "hasKeyword": "$seen", "value": false }, { "after": "2024-08-20T00:00:00Z" } ] }, "sort": [{"property": "receivedAt", "isAscending": false}], "limit": 10 }, "eq0" ], [ "Email/query", { "accountId": "u12345678", "filter": { "operator": "AND", "conditions": [ { "hasKeyword": "$flagged" }, { "hasKeyword": "$seen", "value": false } ] }, "sort": [{"property": "receivedAt", "isAscending": true}], "limit": 5 }, "eq1" ], [ "Thread/get", { "accountId": "u12345678", "#ids": { "resultOf": "eq0", "name": "Email/query", "path": "/ids/*/threadId" } }, "th0" ], [ "Email/get", { "accountId": "u12345678", "#ids": { "resultOf": "eq0", "name": "Email/query", "path": "/ids" }, "properties": [ "id", "threadId", "mailboxIds", "keywords", "from", "to", "subject", "receivedAt", "hasAttachment", "preview", "size" ] }, "eg0" ], [ "Email/get", { "accountId": "u12345678", "#ids": { "resultOf": "eq1", "name": "Email/query", "path": "/ids" }, "properties": [ "id", "threadId", "mailboxIds", "keywords", "from", "subject", "receivedAt", "preview", "size" ] }, "eg1" ], [ "EmailSubmission/query", { "accountId": "u12345678", "filter": { "after": "2024-08-23T00:00:00Z" }, "sort": [{"property": "created", "isAscending": false}], "limit": 5 }, "sub0" ], [ "VacationResponse/get", { "accountId": "u12345678", "ids": ["singleton"] }, "vr0" ], [ "Identity/get", { "accountId": "u12345678", "ids": null, "properties": ["id", "name", "email", "mayDelete"] }, "id0" ] ] } ``` ## Expected Response Structure (Abbreviated) ```json { "methodResponses": [ [ "Mailbox/get", { "accountId": "u12345678", "state": "mb9876543219", "list": [ { "id": "Minbox", "name": "Inbox", "role": "inbox", "totalEmails": 1247, "unreadEmails": 23, "totalThreads": 892, "unreadThreads": 18, "parentId": null, "sortOrder": 0 }, { "id": "Msent", "name": "Sent", "role": "sent", "totalEmails": 543, "unreadEmails": 0, "totalThreads": 421, "unreadThreads": 0, "parentId": null, "sortOrder": 1 }, { "id": "Mdrafts", "name": "Drafts", "role": "drafts", "totalEmails": 7, "unreadEmails": 0, "totalThreads": 7, "unreadThreads": 0, "parentId": null, "sortOrder": 2 }, { "id": "Mvip", "name": "VIP", "role": null, "totalEmails": 34, "unreadEmails": 3, "totalThreads": 28, "unreadThreads": 3, "parentId": null, "sortOrder": 10 } ], "notFound": [] }, "mb0" ], [ "Email/query", { "accountId": "u12345678", "queryState": "q1234567900", "position": 0, "ids": ["Memail701", "Memail702", "Memail703"], "total": 23, "limit": 10 }, "eq0" ], [ "Email/query", { "accountId": "u12345678", "queryState": "q1234567901", "position": 0, "ids": ["Memail801", "Memail802"], "total": 2, "limit": 5 }, "eq1" ], [ "Thread/get", { "accountId": "u12345678", "state": "th9876543220", "list": [ { "id": "Tthread701", "emailIds": ["Memail701", "Memail704", "Memail705"] }, { "id": "Tthread702", "emailIds": ["Memail702"] }, { "id": "Tthread703", "emailIds": ["Memail703", "Memail706"] } ], "notFound": [] }, "th0" ], [ "Email/get", { "accountId": "u12345678", "state": "s9876543220", "list": [ { "id": "Memail701", "threadId": "Tthread701", "mailboxIds": {"Minbox": true, "Mvip": true}, "keywords": {"$flagged": true}, "from": [{"email": "ceo@company.com", "name": "Jane CEO"}], "to": [{"email": "me@example.com", "name": "John Doe"}], "subject": "Q4 Strategic Review - Urgent Response Needed", "receivedAt": "2024-08-24T09:15:00Z", "hasAttachment": true, "preview": "John, we need to finalize the Q4 strategic plan by end of week...", "size": 4567 } ], "notFound": [] }, "eg0" ], [ "EmailSubmission/query", { "accountId": "u12345678", "queryState": "sq1234567900", "position": 0, "ids": ["ES401", "ES402", "ES403"], "total": 12, "limit": 5 }, "sub0" ], [ "VacationResponse/get", { "accountId": "u12345678", "state": "vr9876543220", "list": [ { "id": "singleton", "isEnabled": false, "fromDate": null, "toDate": null, "subject": null, "textBody": null, "htmlBody": null } ], "notFound": [] }, "vr0" ], [ "Identity/get", { "accountId": "u12345678", "state": "id9876543220", "list": [ { "id": "I1", "name": "John Doe", "email": "john.doe@company.com", "mayDelete": false }, { "id": "I2", "name": "John D.", "email": "j.doe@personal.com", "mayDelete": true } ], "notFound": [] }, "id0" ] ] } ``` ## Explanation of Key Features ### Dashboard Components Overview This comprehensive query provides a complete email management dashboard with: 1. **Mailbox Statistics** - Server-computed counts and folder organization 2. **Recent Activity** - Latest unread emails with full context 3. **Priority Items** - Flagged unread emails requiring attention 4. **Thread Context** - Conversation information for recent emails 5. **Outgoing Activity** - Recent email submissions and delivery status 6. **System Status** - Vacation response and identity configuration ### Advanced Result Reference Patterns **Multi-Level References:** ```json { "#ids": { "resultOf": "eq0", "name": "Email/query", "path": "/ids/*/threadId" } } ``` - Extracts thread IDs from all emails in first query - `*/threadId` path syntax gets threadId from each email object - Enables batch Thread/get for conversation context **Parallel Processing:** - Multiple Email/query operations run simultaneously - Independent Email/get calls for different result sets - System configuration calls (VacationResponse, Identity) run in parallel - Efficient batch processing reduces total request time ### Dashboard Data Analysis **Mailbox Health Metrics:** ```json { "inbox": {"totalEmails": 1247, "unreadEmails": 23, "unreadThreads": 18}, "vip": {"totalEmails": 34, "unreadEmails": 3, "unreadThreads": 3} } ``` **Key Performance Indicators:** - **Inbox Health**: 23 unread out of 1,247 total (1.8% unread rate) - **Thread Efficiency**: 18 unread threads vs 23 unread emails (some multi-email threads) - **VIP Attention**: 3 unread VIP emails requiring priority attention - **Draft Management**: 7 draft emails needing completion ### Dashboard Business Logic **Priority Calculation:** 1. **Urgent**: Flagged + unread emails (immediate attention) 2. **Important**: VIP folder unread emails (high priority) 3. **Recent**: New emails from last few days (regular processing) 4. **Backlog**: Older unread emails (cleanup candidates) **Workflow Optimization:** - Process flagged emails first (most urgent) - Handle VIP folder communications next (relationship management) - Review recent inbox activity (daily workflow) - Schedule time for draft completion (pending communications) ### Advanced Dashboard Queries **Time-Based Activity Analysis:** ```json { "filter": { "operator": "AND", "conditions": [ {"after": "2024-08-24T00:00:00Z"}, {"before": "2024-08-25T00:00:00Z"} ] } } ``` **Cross-Mailbox Priority Items:** ```json { "filter": { "operator": "OR", "conditions": [ {"inMailbox": "Mvip"}, {"hasKeyword": "$flagged"}, {"hasKeyword": "urgent"} ] } } ``` **Thread Activity Monitoring:** ```json { "filter": { "operator": "AND", "conditions": [ {"hasKeyword": "$answered", "value": false}, {"after": "2024-08-20T00:00:00Z"}, {"from": "*@important-client.com"} ] } } ``` ### Performance Optimization Strategies **Batch Operation Benefits:** - Single HTTP request for all dashboard data - Parallel server processing of independent queries - Reduced network latency and connection overhead - Atomic consistency across all dashboard components **Selective Property Loading:** - Minimal property sets for overview data - Full properties only where needed for display - Efficient bandwidth usage for mobile clients - Faster response times for dashboard updates **Smart Caching Strategy:** - Mailbox statistics change infrequently (cache longer) - Recent email queries change frequently (shorter cache) - System configuration rarely changes (long cache periods) - Thread information is relatively stable (moderate caching) ### Dashboard Integration Patterns **Real-Time Updates:** - Use `queryState` values for change detection - Implement push notifications for high-priority items - Periodic dashboard refresh for activity monitoring - Delta updates for changed data only **Mobile Optimization:** - Smaller result sets for bandwidth constraints - Progressive loading of secondary information - Offline caching of critical dashboard data - Touch-optimized priority item handling **Business Intelligence Integration:** - Export dashboard metrics for trend analysis - Integration with productivity tracking systems - Communication pattern analysis for optimization - Performance metrics for email management efficiency