Here are some bugs in dag details endpoint.

1. Calling this endpoint `dags/{dag_id}/details` returns an error due to `doc_md` field that's not nullable.

2. The dag details endpoint `GET /dags/{dag_id}/details` does not return a json if dag does not exist.

3. This endpoint does not return a `file_token` which is needed to get the source code of a DAG. And also expected judging from the documentation.

**Apache Airflow version**: 2.0


**What happened**:
1. Calling this endpoint GET /dags/{dag_id}/details returns an error
2. When the above is fixed and you look for the details of a dag that does not exist, this endpoint returns a webpage instead of json.
3. Calling the endpoint with a dag ID that exists doesn't return a file_token

**What you expected to happen**:
1. I expected it to return the details of the dag
2. I expected it to return a json indicating that the dag was not found if dag doesn't exist
3. I expected it to return a file_token in the list of fields when the dag exists

**How to reproduce it**:
Run airflow in breeze.
Make a request to `/dags/{dag_id}/details`. It will return an error.
Go to openapi.yaml and set `doc_md` to be nullable.
Make another request to see that it returns a result without a file_token.
Change the dag id to a dag ID that does not exist.
Make another request and see that it returns a webpage.

tests/api_connexion/endpoints/test_dag_endpoint.py
"TEST_DAG_8",
                    "TEST_DAG_9",
                ],
            ),
            ("api/v1/dags?limit=1&offset=5", ["TEST_DAG_5"]),
            ("api/v1/dags?limit=1&offset=1", ["TEST_DAG_10"]),
            ("api/v1/dags?limit=2&offset=2", ["TEST_DAG_2", "TEST_DAG_3"]),
        ]
    )
    def test_should_respond_200_and_handle_pagination(self, url, expected_dag_ids):
        self._create_dag_models(10)
        response = self.client.get(url, environ_overrides={'REMOTE_USER': "test"})
        assert response.status_code == 200
        dag_ids = [dag["dag_id"] for dag in response.json["dags"]]
        self.assertEqual(expected_dag_ids, dag_ids)
        self.assertEqual(10, response.json["total_entries"])
    def test_should_respond_200_default_limit(self):
        self._create_dag_models(101)
        response = self.client.get("api/v1/dags", environ_overrides={'REMOTE_USER': "test"})
        assert response.status_code == 200
        self.assertEqual(100, len(response.json["dags"]))
        self.assertEqual(101, response.json["total_entries"])
    def test_should_raises_401_unauthenticated(self):
        response = self.client.get("api/v1/dags")
        assert_401(response)
    def test_should_respond_403_unauthorized(self):
        self._create_dag_models(1)
        response = self.client.get("api/v1/dags", environ_overrides={'REMOTE_USER': "test_no_permissions"})
        assert response.status_code == 403
class TestPatchDag(TestDagEndpoint):