If you check the `IERC20.approve()` function's [signature][1], 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.

  [1]: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol