If you check the IERC20.approve()
function's signature, you can see, that the first argument is the address that you allow to spend your DAI.
You used daiToken.approve(address(this), daiAmountIn)
which means you allowed your contract to spend the DAI of your contract. This makes not much sense.
If you simply want to add some token to your contract from your own funds, you can transfer with your wallet to your contract's address.