validates id > 0, delegates to PostRepository->find. 58 tests pass.
validates userId > 0, delegates to PostRepository->findByUserId. 54 tests pass.
validates limit > 0 (zero or negative -> BadRequest), then delegates to PostRepository->findRecent. 49 tests pass.
trims title and body, rejects empty (post-trim) values with BadRequest. supplies createdAt from injected Clock. persists through PostRepository->create and returns the resulting Post. 44 tests pass.