A quick multiple-choice check before you move on. Answer every question, then submit to see how you did.
1.The capstone uses sqlx's runtime query API (sqlx::query, query_as, query_scalar with .bind) instead of the compile-time-checked query! macros. Why?
2.AppState is handed to the router with .with_state(...) and every handler receives it via the State<AppState> extractor, meaning each handler gets a clone. Why is deriving Clone on AppState inexpensive here?
3.In the capstone, POST /items requires a valid bearer token but GET /items does not. How is this protection expressed?
4.The theory highlights AppError as a thiserror enum with #[from] on variants wrapping sqlx::Error, redis::RedisError, and serde_json::Error. What does this design enable, and how does it contrast with the C# approach?
5.Graceful shutdown in the capstone uses a tokio::sync::watch channel and tokio::select!. How does the design coordinate the server and the background worker on Ctrl-C / SIGTERM?