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
)
        create_user(cls.app, username="test_no_permissions", role_name="TestNoPermissions")  
        create_user(
            cls.app, username="test_granular_permissions", role_name="TestGranularDag"  
        )
        cls.app.appbuilder.sm.sync_perm_for_dag(  
            "TEST_DAG_1",
            access_control={'TestGranularDag': [permissions.ACTION_CAN_EDIT, permissions.ACTION_CAN_READ]},
        )
        with DAG(cls.dag_id, start_date=datetime(2020, 6, 15), doc_md="details") as dag:
            DummyOperator(task_id=cls.task_id)
        with DAG(cls.dag2_id, start_date=datetime(2020, 6, 15)) as dag2:  
            DummyOperator(task_id=cls.task_id)
        cls.dag = dag  
        cls.dag2 = dag2  
        dag_bag = DagBag(os.devnull, include_examples=False)
        dag_bag.dags = {dag.dag_id: dag, dag2.dag_id: dag2}
        cls.app.dag_bag = dag_bag  
    @classmethod
    def tearDownClass(cls) -> None:
        delete_user(cls.app, username="test")  
        delete_user(cls.app, username="test_no_permissions")  
        delete_user(cls.app, username="test_granular_permissions")  
    def setUp(self) -> None:
        self.clean_db()
        self.client = self.app.test_client()  
    def tearDown(self) -> None:
        self.clean_db()
    @provide_session
    def _create_dag_models(self, count, session=None):