def METHOD_NAME(self, serializer):
    """
    Function to create document via API v2.
    file_path: path to the file
    doc_file: the open file
    The API expect this kind of JSON:
    {
        "document": {
            "title": "New document",
            "metadata_only": true,
            "file_path": "/home/mattia/example.json"
        }
    }
    File path rappresent the filepath where the file to upload is saved.
    or can be also a form-data:
    curl --location --request POST 'http://localhost:8000/api/v2/documents' \
    --form 'title="Super Title2"' \
    --form 'doc_file=@"/C:/Users/user/Pictures/BcMc-a6T9IM.jpg"' \
    --form 'metadata_only="False"'
    """
    manager = None
    serializer.is_valid(raise_exception=True)
    file = serializer.validated_data.pop("file_path", None) or serializer.validated_data.pop("doc_file", None)
    doc_url = serializer.validated_data.pop("doc_url", None)
    extension = serializer.validated_data.pop("extension", None)
    if not file and not doc_url:
        raise DocumentException(detail="A file, file path or URL must be speficied")
    if file and doc_url:
        raise DocumentException(detail="Either a file or a URL must be specified, not both")
    if not extension:
        filename = file if isinstance(file, str) else file.name
        extension = Path(filename).suffix.replace(".", "")
    if extension not in settings.ALLOWED_DOCUMENT_TYPES:
        raise DocumentException("The file provided is not in the supported extensions list")
    try:
        payload = {
            "owner": self.request.user,
            "extension": extension,
            "resource_type": "document",
        }
        if file:
            manager = StorageManager(remote_files={"base_file": file})
            manager.clone_remote_files()
            payload["files"] = [manager.get_retrieved_paths().get("base_file")]
        if doc_url:
            payload["doc_url"] = doc_url
            payload["sourcetype"] = enumerations.SOURCE_TYPE_REMOTE
        resource = serializer.save(**payload)
        resource.set_missing_info()
        resourcebase_post_save(resource.get_real_instance())
        resource_manager.set_permissions(None, instance=resource, permissions=None, created=True)
        resource.handle_moderated_uploads()
        resource_manager.set_thumbnail(resource.uuid, instance=resource, overwrite=False)
        return resource
    except Exception as e:
        if manager:
            manager.delete_retrieved_paths()
        raise e