Query parameters for GET /oauth/authorize.
All fields are Option so we can produce specific error messages for each.
RF-2: client_id is Option<ClientId> — ClientId derives Deserialize,
so Axum deserializes it directly without needing new_unchecked.
Resolve the authenticated user from session cookie, or None if not authenticated.
Uses the same pattern as require_session in oauth_routes.rs:
session_config().cookie_name -> db().validate_session() -> db().get_user() -> is_active check