Use @Args('name', options) for inline scalar arguments or declare an @InputType() class and use @Args('input') for complex arguments. Input types are validated by the global ValidationPipe using class-validator decorators. The type option in @Args is required for non-string scalars because TypeScript metadata cannot infer GraphQL scalar types.
type: () => Int is required for Int and Float — TypeScript metadata only knows 'Number'.
nullable: true makes the argument optional in the schema.
defaultValue in @Args or @Field sets the GraphQL default in the schema.
@InputType() classes are validated by ValidationPipe using class-validator decorators.
Use InputType for 3+ arguments or reused argument shapes — it keeps resolvers clean.