{"openapi":"3.0.0","paths":{"/api/auth/login":{"post":{"operationId":"login","summary":"Login","description":"Login with username and api key","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCredentials"}}}},"responses":{"201":{"description":"Token","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Auth"]}},"/api/auth/validate":{"post":{"operationId":"validateToken","summary":"Validate token","description":"Validate JWT token","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenValidation"}}}},"responses":{"201":{"description":"Whether the token is valid","content":{"application/json":{"schema":{"type":"boolean"}}}}},"tags":["Auth"]}},"/api/auth/is-admin":{"get":{"operationId":"isAdmin","summary":"Check if the current user is admin","description":"Check if the current user is admin","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"boolean"}}}},"201":{"description":"Whether the user is admin","content":{"application/json":{"schema":{"type":"boolean"}}}}},"tags":["Auth"],"security":[{"bearer":[]}]}},"/api/proxy/*":{"get":{"operationId":"proxyRequest","summary":"Proxy request to static host","description":"Proxies a request to the static host and returns the file as a stream","parameters":[],"responses":{"200":{"description":"File streamed successfully"},"400":{"description":"Invalid path"}},"tags":["Proxy"]}},"/api/jobs":{"get":{"operationId":"getJobs","summary":"Get all jobs","description":"Returns a list of all jobs that have been queued or processed.","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}}],"responses":{"200":{"description":"A list of all jobs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/JobInfo"}}}}}},"tags":["Jobs"],"security":[{"bearer":[]}]}},"/api/jobs/schedulers":{"get":{"operationId":"getJobSchedulers","summary":"Get all job schedulers","description":"Returns a list of all registered job schedulers.","parameters":[],"responses":{"200":{"description":"A list of all job schedulers","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SchedulerInfo"}}}}}},"tags":["Jobs"],"security":[{"bearer":[]}]}},"/api/jobs/schedulers/{id}/enable":{"put":{"operationId":"enableJobScheduler","summary":"Enable a job scheduler","description":"Enables a previously disabled job scheduler.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Jobs"],"security":[{"bearer":[]}]}},"/api/jobs/schedulers/{id}/disable":{"put":{"operationId":"disableJobScheduler","summary":"Disable a job scheduler","description":"Disables a job scheduler, preventing it from creating jobs.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Jobs"],"security":[{"bearer":[]}]}},"/api/health":{"get":{"operationId":"healthCheck","summary":"Health Check","description":"Check the health of the application","parameters":[],"responses":{"200":{"description":"The application is healthy"}},"tags":["Health"]}},"/api/health/manifests":{"get":{"operationId":"getManifestHealth","summary":"Retrieve manifest health","description":"Retrieve manifest health","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}}],"responses":{"200":{"description":"Manifest health","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ManifestHealth"}}}}}},"tags":["Health"],"security":[{"bearer":[]}]}},"/api/health/tiles":{"get":{"operationId":"getTileHealth","summary":"Retrieve tile health","description":"Retrieve tile health and coverage information","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}}],"responses":{"200":{"description":"Tile health information","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TileHealth"}}}}}},"tags":["Health"],"security":[{"bearer":[]}]}},"/api/health/tiles/{type}":{"delete":{"operationId":"deleteTilesByType","summary":"Delete all tiles of a type","description":"Delete all tiles of the specified type","parameters":[{"name":"type","required":true,"in":"path","description":"The type of tiles to delete","schema":{"enum":["upload_hourly","post_pending_hourly"],"type":"string"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""},"204":{"description":"Tiles deleted successfully"}},"tags":["Health"],"security":[{"bearer":[]}]}},"/api/dashboards/{type}":{"get":{"operationId":"getDashboard","summary":"Get dashboard","description":"Get dashboard by type, for the current user","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfig"}}}},"404":{"description":"Dashboard not found"}},"tags":["Dashboards"],"security":[{"bearer":[]}]},"post":{"operationId":"updateDashboard","summary":"Update dashboard","description":"Update dashboard by type, for the current user","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardUpdate"}}}},"responses":{"200":{"description":"Updated dashboard object"},"201":{"description":""}},"tags":["Dashboards"],"security":[{"bearer":[]}]}},"/api/dashboards/{type}/delete":{"post":{"operationId":"deleteDashboard","summary":"Delete dashboard","description":"Delete dashboard by type, for the current user","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Dashboard deleted"},"201":{"description":""}},"tags":["Dashboards"],"security":[{"bearer":[]}]}},"/api/manifests/available":{"get":{"operationId":"checkManifestAvailability","summary":"Check manifest availability for a date range","description":"Returns true if manifests cover the date range, false otherwise","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/ItemType"}}}],"responses":{"200":{"description":"Manifest availability","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestAvailability"}}}}},"tags":["Manifests"],"security":[{"bearer":[]}]}},"/api/manifests/{id}":{"get":{"operationId":"getManifest","summary":"Get a manifest by ID","description":"Get a manifest by ID","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Manifest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manifest"}}}}},"tags":["Manifests"],"security":[{"bearer":[]}]},"delete":{"operationId":"deleteManifest","summary":"Delete a manifest by ID","description":"Delete a manifest by ID","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Manifest deleted successfully"}},"tags":["Manifests"],"security":[{"bearer":[]}]}},"/api/manifests":{"get":{"operationId":"listManifests","summary":"List manifests","description":"List manifests","parameters":[{"name":"scale","required":true,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":true,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/ItemType"}}},{"name":"id","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"List of manifests","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Manifest"}}}}}},"tags":["Manifests"],"security":[{"bearer":[]}]}},"/api/gadgets/motd":{"get":{"operationId":"getMotd","summary":"Get today's message of the day","parameters":[],"responses":{"200":{"description":"Today's message of the day","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Motd"}}}}},"tags":["Gadgets"]}},"/api/gadgets/activity":{"get":{"operationId":"getDailyActivity","summary":"Get today's activity counter","description":"Returns today's activity counter","parameters":[],"responses":{"200":{"description":"Today's activity counter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyActivity"}}}}},"tags":["Gadgets"]}},"/api/metrics/approvals/count/summary":{"get":{"operationId":"getApprovalCountSummary","summary":"Approval count summary","description":"Get total approval counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalCountSummary"}}}}},"tags":["Approvals"],"security":[{"bearer":[]}]}},"/api/metrics/approvals/count/series":{"get":{"operationId":"getApprovalCountSeries","summary":"Approval count series","description":"Get a time series of approval counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Approvals"],"security":[{"bearer":[]}]}},"/api/metrics/approvals/count/series/by/approver/{approverId}":{"get":{"operationId":"getApprovalCountSeriesByApprover","summary":"Approval count series by approver","description":"Get a time series of approval counts for a given date range by approver","parameters":[{"name":"approverId","required":true,"in":"path","schema":{"type":"number"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Approvals"],"security":[{"bearer":[]}]}},"/api/metrics/approvals/approver/summary":{"get":{"operationId":"getApproverSummary","summary":"Approver summary","description":"Get a summary of approvals by approver for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}},{"name":"x-safe-mode","in":"header","description":"Enable safe mode to filter explicit content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApproverSummary"}}}}}},"tags":["Approvals"],"security":[{"bearer":[]}]}},"/api/users/head/{id}":{"get":{"operationId":"getUserHead","summary":"Get user head","description":"Get user head by user id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"x-safe-mode","in":"header","description":"Enable safe mode to filter explicit content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserHead"}}}}},"tags":["Users"],"security":[{"bearer":[]}]}},"/api/metrics/deletions/count/series":{"get":{"operationId":"getDeletionCountSeries","summary":"Post deletion series","description":"Get a time series of post deletion counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Deletions"],"security":[{"bearer":[]}]}},"/api/metrics/deletions/count/series/by/deleter/{userId}":{"get":{"operationId":"getDeletionSeriesByDeleter","summary":"Post deletion series by deleter","description":"Get a time series of post deletion counts for a given date range by deleter","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"number"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Deletions"],"security":[{"bearer":[]}]}},"/api/metrics/deletions/activity/summary":{"get":{"operationId":"getDeletionActivitySummary","summary":"Post deletion activity summary","description":"Get a hourly summary of post deletion counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Deletions"],"security":[{"bearer":[]}]}},"/api/metrics/deletions/activity/summary/by/deleter/{userId}":{"get":{"operationId":"getDeletionActivitySummaryByDeleter","summary":"Post deletion activity summary by deleter","description":"Get a hourly summary of post deletion counts for a given date range by deleter","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"number"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Deletions"],"security":[{"bearer":[]}]}},"/api/metrics/post-replacements/created":{"get":{"operationId":"getPostReplacementCreated","summary":"Post replacements created","description":"Get post replacements created counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Replacements"],"security":[{"bearer":[]}]}},"/api/metrics/post-replacements/status":{"get":{"operationId":"getPostReplacementStatus","summary":"Post replacement status","description":"Get post replacement status counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PostReplacementStatusPoint"}}}}}},"tags":["Replacements"],"security":[{"bearer":[]}]}},"/api/metrics/post-replacements/handled":{"get":{"operationId":"getPostReplacementHandled","summary":"Post replacements handled","description":"Get post replacements handled counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"userId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PostReplacementHandledPoint"}}}}}},"tags":["Replacements"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/status":{"get":{"operationId":"getTicketStatus","summary":"Ticket status","description":"Get ticket status (pending, approved, partial) counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketStatusSeriesPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/type/summary":{"get":{"operationId":"getTicketTypeSummary","summary":"Ticket type summary","description":"Get ticket types counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTypeSummary"}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/type/summary/by/handler/{claimantId}":{"get":{"operationId":"getTicketTypeSummaryByHandler","summary":"Ticket type summary for a handler","description":"Get ticket types counts for a given date range for a specific handler","parameters":[{"name":"claimantId","required":true,"in":"path","schema":{"type":"number"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTypeSummary"}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/open/series":{"get":{"operationId":"getTicketOpenSeries","summary":"Ticket open series","description":"Get a time series of open tickets for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/created/series":{"get":{"operationId":"getTicketCreatedSeries","summary":"Ticket created series","description":"Get a time series of created tickets for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/created/series/by/reporter/{repoterId}":{"get":{"operationId":"getTicketCreatedSeriesByReporter","summary":"Ticket created series by reporter","description":"Get a time series of created tickets for a given date range for a specific reporter","parameters":[{"name":"repoterId","required":true,"in":"path","schema":{"type":"number"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/closed/series":{"get":{"operationId":"getTicketClosedSeries","summary":"Ticket closed series","description":"Get a time series of closed tickets for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/closed/series/by/handler/{handlerId}":{"get":{"operationId":"getTicketClosedSeriesByHandler","summary":"Ticket closed series by handler","description":"Get a time series of closed tickets for a given date range for a specific handler","parameters":[{"name":"handlerId","required":true,"in":"path","schema":{"type":"number"}},{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/age/series":{"get":{"operationId":"getTicketAgeSeries","summary":"Ticket age series","description":"Get a time series of ticket ages for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketAgeSeriesPoint"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/age/summary":{"get":{"operationId":"getTicketAgeSummary","summary":"Ticket age summary","description":"Get a summary of ticket ages for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketAgeSummary"}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/handler/summary":{"get":{"operationId":"getTicketHandlerSummary","summary":"Handler summary","description":"Get a summary of ticket handling counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}},{"name":"x-safe-mode","in":"header","description":"Enable safe mode to filter explicit content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketHandlerSummary"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/tickets/reporter/summary":{"get":{"operationId":"getTicketReporterSummary","summary":"Reporter summary","description":"Get a summary of ticket reporting counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}},{"name":"x-safe-mode","in":"header","description":"Enable safe mode to filter explicit content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketReporterSummary"}}}}}},"tags":["Tickets"],"security":[{"bearer":[]}]}},"/api/metrics/performance/performance":{"get":{"operationId":"getPerformance","summary":"Performance","description":"Get performance data for an area.","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"area","required":false,"in":"query","schema":{"$ref":"#/components/schemas/UserArea"}},{"name":"activities","required":false,"in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}}},{"name":"userId","required":false,"in":"query","schema":{"type":"number"}},{"name":"head","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"x-safe-mode","in":"header","description":"Enable safe mode to filter explicit content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PerformanceSummary"}}}}}},"tags":["Performance"],"security":[{"bearer":[]}]}},"/api/metrics/performance/activity":{"get":{"operationId":"getActivity","summary":"Activity","description":"Get activity data for the specified range, scale, and cycle.","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"area","required":false,"in":"query","schema":{"$ref":"#/components/schemas/UserArea"}},{"name":"activities","required":false,"in":"query","schema":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}}},{"name":"userId","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActivitySeriesPoint"}}}}}},"tags":["Performance"],"security":[{"bearer":[]}]}},"/api/metrics/posts/status/summary":{"get":{"operationId":"getPostStatusSummary","summary":"Post status summary","description":"Get post status (approved, deleted, permitted) counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostStatusSummary"}}}}},"tags":["Posts"],"security":[{"bearer":[]}]}},"/api/metrics/posts/pending/series":{"get":{"operationId":"getPostPendingSeries","summary":"Post pending series","description":"Get post pending series for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Posts"],"security":[{"bearer":[]}]}},"/api/metrics/feedbacks/type":{"get":{"operationId":"getFeedbackTypeSeries","summary":"Feedback Type Series","description":"Get a time series of feedback types counts for a given range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"creatorId","required":false,"in":"query","schema":{"type":"number"}},{"name":"userId","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeedbackTypeSeriesPoint"}}}}}},"tags":["Feedbacks"],"security":[{"bearer":[]}]}},"/api/metrics/uploads/count":{"get":{"operationId":"getUploadCount","summary":"Upload series","description":"Get a time series of upload counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"uploaderId","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Uploads"],"security":[{"bearer":[]}]}},"/api/metrics/uploads/uploader/summary":{"get":{"operationId":"getPostUploaderSummary","summary":"Uploader summary","description":"Get a summary of post uploading counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Page size","schema":{"minimum":1,"maximum":320,"default":20,"type":"number"}},{"name":"x-safe-mode","in":"header","description":"Enable safe mode to filter explicit content","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PostUploaderSummary"}}}}}},"tags":["Uploads"],"security":[{"bearer":[]}]}},"/api/metrics/permits/count":{"get":{"operationId":"getPermitCount","summary":"Get total permit counts for a given date range","description":"Get total permit counts for a given date range","parameters":[{"name":"scale","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"cycle","required":false,"in":"query","schema":{"$ref":"#/components/schemas/TimeScale"}},{"name":"startDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"timezone","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeriesCountPoint"}}}}}},"tags":["Permits"],"security":[{"bearer":[]}]}}},"info":{"title":"@6oclock/api","description":"backend data aggregate for 6 o'clock","version":"1.0.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"UserCredentials":{"type":"object","properties":{"username":{"type":"string","minLength":1},"password":{"type":"string","pattern":"/^[a-zA-Z0-9]{24,32}$/"}},"required":["username","password"]},"TokenValidation":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]},"JobInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"queue":{"type":"string"},"state":{"type":"string"},"scheduledAt":{"format":"date-time","type":"string"},"startedAt":{"format":"date-time","type":"string"},"endedAt":{"format":"date-time","type":"string"},"failedReason":{"type":"string"}},"required":["id","name","queue","state"]},"SchedulerInfo":{"type":"object","properties":{"id":{"type":"string"},"queue":{"type":"string"},"pattern":{"type":"string"},"enabled":{"type":"boolean"}},"required":["id","queue","pattern","enabled"]},"ItemType":{"type":"string","enum":["tickets","posts","users","user_profiles","flags","feedbacks","post_versions","post_replacements","post_events","mod_actions","bulk_update_requests","tag_aliases","tag_implications","permits"]},"ManifestSlice":{"type":"object","properties":{"startId":{"type":"number"},"endId":{"type":"number"},"available":{"type":"number"},"unavailable":{"type":"number"},"none":{"type":"number"}},"required":["startId","endId","available","unavailable","none"]},"ManifestHealth":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ItemType"},"id":{"type":"number"},"porous":{"type":"boolean"},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"startId":{"type":"number"},"endId":{"type":"number"},"count":{"type":"number"},"slices":{"type":"array","items":{"$ref":"#/components/schemas/ManifestSlice"}}},"required":["type","id","porous","startDate","endDate","startId","endId","count","slices"]},"TileType":{"type":"string","enum":["upload_hourly","post_pending_hourly"]},"TileSlice":{"type":"object","properties":{"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"available":{"type":"number"},"unavailable":{"type":"number"},"none":{"type":"number"}},"required":["startDate","endDate","available","unavailable","none"]},"TileHealth":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TileType"},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"expected":{"type":"number"},"actual":{"type":"number"},"slices":{"type":"array","items":{"$ref":"#/components/schemas/TileSlice"}}},"required":["type","startDate","endDate","expected","actual","slices"]},"TimeScale":{"type":"string","enum":["minute","hour","day","week","month","year","decade","all"]},"DashboardPosition":{"type":"object","properties":{"i":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["i","x","y","w","h"]},"DashboardPositions":{"type":"object","properties":{"xs":{"type":"array","items":{"$ref":"#/components/schemas/DashboardPosition"}},"sm":{"type":"array","items":{"$ref":"#/components/schemas/DashboardPosition"}},"md":{"type":"array","items":{"$ref":"#/components/schemas/DashboardPosition"}},"lg":{"type":"array","items":{"$ref":"#/components/schemas/DashboardPosition"}},"xl":{"type":"array","items":{"$ref":"#/components/schemas/DashboardPosition"}}}},"DashboardConfig":{"type":"object","properties":{"type":{"type":"string","enum":["moderator","janitor","admin"]},"userId":{"type":"number"},"version":{"type":"number"},"positions":{"$ref":"#/components/schemas/DashboardPositions"},"meta":{"type":"object"}},"required":["type","userId","version","positions","meta"]},"DashboardUpdate":{"type":"object","properties":{"version":{"type":"number"},"positions":{"$ref":"#/components/schemas/DashboardPositions"},"meta":{"type":"object"}}},"ManifestAvailability":{"type":"object","properties":{"approvals":{"type":"number"},"tickets":{"type":"number"},"posts":{"type":"number"},"users":{"type":"number"},"userProfiles":{"type":"number"},"flags":{"type":"number"},"feedbacks":{"type":"number"},"postVersions":{"type":"number"},"postReplacements":{"type":"number"},"modActions":{"type":"number"},"bulkUpdateRequests":{"type":"number"},"tagAliases":{"type":"number"},"tagImplications":{"type":"number"}}},"Manifest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ItemType"},"id":{"type":"number"},"startDate":{"format":"date-time","type":"string"},"endDate":{"format":"date-time","type":"string"},"lowerId":{"type":"number"},"upperId":{"type":"number"}},"required":["type","id","startDate","endDate","lowerId","upperId"]},"Motd":{"type":"object","properties":{"message":{"type":"string","description":"The message of the day","example":"Your valiant efforts are appreciated."}},"required":["message"]},"Activity":{"type":"string","enum":["post_create","post_delete","post_approve","post_replacement_create","post_replacement_approve","post_replacement_promote","post_replacement_reject","ticket_create","ticket_handle"]},"DailyActivity":{"type":"object","properties":{"value":{"type":"number","description":"The counter value","example":42},"timescale":{"$ref":"#/components/schemas/TimeScale"},"activity":{"$ref":"#/components/schemas/Activity"}},"required":["value","timescale","activity"]},"ApprovalCountSummary":{"type":"object","properties":{"total":{"type":"number"}},"required":["total"]},"SeriesCountPoint":{"type":"object","properties":{"date":{"format":"date-time","type":"string"},"value":{"type":"number"}},"required":["date","value"]},"UserHead":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"avatar":{"type":"string"},"level":{"type":"string"}},"required":["id","name","level"]},"ApproverSummary":{"type":"object","properties":{"userId":{"type":"number"},"head":{"$ref":"#/components/schemas/UserHead"},"total":{"type":"number"},"position":{"type":"number"},"days":{"type":"number"}},"required":["userId","total","position","days"]},"PostReplacementStatusPoint":{"type":"object","properties":{"pending":{"type":"number"},"date":{"format":"date-time","type":"string"},"rejected":{"type":"number"},"approved":{"type":"number"},"promoted":{"type":"number"}},"required":["pending","date","rejected","approved","promoted"]},"PostReplacementHandledPoint":{"type":"object","properties":{"date":{"format":"date-time","type":"string"},"rejected":{"type":"number"},"approved":{"type":"number"},"promoted":{"type":"number"}},"required":["date","rejected","approved","promoted"]},"TicketStatusSeriesPoint":{"type":"object","properties":{"date":{"format":"date-time","type":"string"},"pending":{"type":"number"},"approved":{"type":"number"},"partial":{"type":"number"}},"required":["date","pending","approved","partial"]},"TicketTypeSummary":{"type":"object","properties":{"user":{"type":"number"},"comment":{"type":"number"},"forum":{"type":"number"},"blip":{"type":"number"},"wiki":{"type":"number"},"pool":{"type":"number"},"set":{"type":"number"},"post":{"type":"number"},"dmail":{"type":"number"},"replacement":{"type":"number"}},"required":["user","comment","forum","blip","wiki","pool","set","post","dmail","replacement"]},"TicketAgeSeriesPoint":{"type":"object","properties":{"date":{"format":"date-time","type":"string"},"oneDay":{"type":"number"},"threeDays":{"type":"number"},"oneWeek":{"type":"number"},"twoWeeks":{"type":"number"},"oneMonth":{"type":"number"},"aboveOneMonth":{"type":"number"}},"required":["date","oneDay","threeDays","oneWeek","twoWeeks","oneMonth","aboveOneMonth"]},"TicketAgeSummary":{"type":"object","properties":{"oneDay":{"type":"number"},"threeDays":{"type":"number"},"oneWeek":{"type":"number"},"twoWeeks":{"type":"number"},"oneMonth":{"type":"number"},"aboveOneMonth":{"type":"number"}},"required":["oneDay","threeDays","oneWeek","twoWeeks","oneMonth","aboveOneMonth"]},"TicketHandlerSummary":{"type":"object","properties":{"userId":{"type":"number"},"head":{"$ref":"#/components/schemas/UserHead"},"total":{"type":"number"},"position":{"type":"number"},"days":{"type":"number"}},"required":["userId","total","position","days"]},"TicketReporterSummary":{"type":"object","properties":{"userId":{"type":"number"},"head":{"$ref":"#/components/schemas/UserHead"},"total":{"type":"number"},"days":{"type":"number"}},"required":["userId","total","days"]},"UserArea":{"type":"string","enum":["admin","moderator","janitor","member"]},"PerformanceGrade":{"type":"string","enum":["F","E","D","C","B","A","S","S2","S3","S4","S5","S6"]},"TrendGrade":{"type":"string","enum":["plummet","drop","decline","neutral","rise","climb","surge"]},"PerformanceRecord":{"type":"object","properties":{"grade":{"$ref":"#/components/schemas/PerformanceGrade"},"score":{"type":"number"}},"required":["grade","score"]},"ActivitySummary":{"type":"object","properties":{"postCreate":{"type":"number"},"postDelete":{"type":"number"},"postApprove":{"type":"number"},"postReplacementCreate":{"type":"number"},"postReplacementApprove":{"type":"number"},"postReplacementReject":{"type":"number"},"postReplacementPromote":{"type":"number"},"ticketCreate":{"type":"number"},"ticketHandle":{"type":"number"}},"required":["postCreate","postDelete","postApprove","postReplacementCreate","postReplacementApprove","postReplacementReject","postReplacementPromote","ticketCreate","ticketHandle"]},"PerformanceSummary":{"type":"object","properties":{"scoreGrade":{"$ref":"#/components/schemas/PerformanceGrade"},"trendGrade":{"$ref":"#/components/schemas/TrendGrade"},"userId":{"type":"number"},"head":{"$ref":"#/components/schemas/UserHead"},"position":{"type":"number"},"score":{"type":"number"},"trend":{"type":"number"},"history":{"type":"array","items":{"$ref":"#/components/schemas/PerformanceRecord"}},"activity":{"$ref":"#/components/schemas/ActivitySummary"},"days":{"type":"number"}},"required":["scoreGrade","trendGrade","userId","position","score","trend","history","activity","days"]},"ActivitySeriesPoint":{"type":"object","properties":{"postCreate":{"type":"number"},"postDelete":{"type":"number"},"postApprove":{"type":"number"},"postReplacementCreate":{"type":"number"},"postReplacementApprove":{"type":"number"},"postReplacementReject":{"type":"number"},"postReplacementPromote":{"type":"number"},"ticketCreate":{"type":"number"},"ticketHandle":{"type":"number"},"date":{"format":"date-time","type":"string"}},"required":["postCreate","postDelete","postApprove","postReplacementCreate","postReplacementApprove","postReplacementReject","postReplacementPromote","ticketCreate","ticketHandle","date"]},"PostStatusSummary":{"type":"object","properties":{"pending":{"type":"number"},"approved":{"type":"number"},"deleted":{"type":"number"},"permitted":{"type":"number"}},"required":["pending","approved","deleted","permitted"]},"FeedbackTypeSeriesPoint":{"type":"object","properties":{"date":{"format":"date-time","type":"string"},"negative":{"type":"number"},"neutral":{"type":"number"},"positive":{"type":"number"}},"required":["date","negative","neutral","positive"]},"PostUploaderSummary":{"type":"object","properties":{"userId":{"type":"number"},"head":{"$ref":"#/components/schemas/UserHead"},"total":{"type":"number"},"position":{"type":"number"},"days":{"type":"number"}},"required":["userId","total","position","days"]}}},"externalDocs":{"description":"/api/swagger.json","url":"/api/swagger.json"}}