There are quite a few implementation details. First of all, if you are after pagination, there may be an easier way to achieve this with simple range queries, rather than filtered data.
Look at using CLUSTERING ORDER that calling ALLOW FILTERING should not be there. Also, without CLUSTERING ORDER by default, the Martmur3 block is not ordered by default, so you have no guarantee of receiving the data in the same order that you wrote it.
Most likely your pagination will not work at all. Last but not least, using counters directly is probably not what you need.
They are asynchronous, so you need to map inside the future to get the fragment, but aside, enumerations are useful when something like Spark loads the entire table at once, for example, a lot of results.
To summarize all this, inside the people table:
object id extends UUIDColumn(this) with PartitionKey[UUID]
And just use fetch() and then Seq.slice from the Scala collection library. The above assumes that you want to paginate in ascending order, for example, first gets the oldest.
You also need to figure out what a realistic partition key might be. If 2 users are updated at the same time, in the worst case, you lose data and end the FIFO queue, for example, the last update is currently “winning”. I used id above, but this is not what you need, obviously.
And you may need several tables in which you store people so that you can cover all the queries that you need.