Rotate toward movement:

if (direction.sqrMagnitude > 0.001f)
{
    transform.forward = direction;
}

Smooth rotation:

Quaternion targetRotation =
    Quaternion.LookRotation(direction);

transform.rotation =
    Quaternion.Slerp(
        transform.rotation,
        targetRotation,
        rotationSpeed * Time.deltaTime
    );

With Rigidbody:

rb.MoveRotation(targetRotation);