If you have a database access layer then structuring your application shouldn't be that different. I wouldn't deal with the database directly unless I had a really good reason or the abstraction layer didn't support the query I was trying to run.
Dynamo is a precision tool and it’s great at those specific workloads but it’s not a one size fits all by any means.
Depends on the size of the data. Run analytics queries (i.e. things that return summary data not all rows) on 10GB of data through clickhouse or duckdb or datafusion and they'll generally return in milliseconds.
DynamoDB (and other similar key/value stores) make very big trade-offs for speed and scale that most applications don't need.
God help you if you need to make major changes to this down the road.
Database Access Layer can't do this for you, that just isn't what they do.