ReadingCoverageDto
The span a reader's history covers, independent of any window.
Its own endpoint rather than a field on the statistics response: that response describes a window, and these two dates deliberately ignore it. A client uses them to decide which years it can offer, and they change at most once a day, so they are worth caching far longer than the statistics are.
Both are null for a reader who has never read anything.
firstReadAtstring,null<date-time>nullable
lastReadAtstring,null<date-time>nullable
ReadingCoverageDto
{
"firstReadAt": "2024-07-29T15:51:28.071Z",
"lastReadAt": "2024-07-29T15:51:28.071Z"
}