async def METHOD_NAME(
    app: web.Application,
    params_override: dict[str, Any] | None = None,
    user_id: int | None = None,
    *,
    product_name: str,
    default_project_json: Path | None = None,
    force_uuid: bool = False,
    as_template: bool = False,
) -> ProjectDict:
    """Injects new project in database for user or as template
    :param params_override: predefined project properties (except for non-writeable e.g. uuid), defaults to None
    :type params_override: Dict, optional
    :param user_id: assigns this project to user or template project if None, defaults to None
    :type user_id: int, optional
    :return: schema-compliant project
    :rtype: Dict
    """
    params_override = params_override or {}
    project_data = {}
    if default_project_json is not None:
        # uses default_project_json as base
        assert default_project_json.exists(), f"{default_project_json}"
        project_data = json.loads(default_project_json.read_text())
    project_data.update(params_override)
    db: ProjectDBAPI = app[APP_PROJECT_DBAPI]
    new_project = await db.insert_project(
        project_data,
        user_id,
        product_name=product_name,
        force_project_uuid=force_uuid,
        force_as_template=as_template,
        # NOTE: fake initial resources until more is needed
        project_nodes={
            NodeID(node_id): ProjectNodeCreate(
                node_id=NodeID(node_id),
                required_resources=ServiceResourcesDictHelpers.Config.schema_extra[
                    "examples"
                ][0],
            )
            for node_id in project_data.get("workbench", {})
        },
    )
    try:
        uuidlib.UUID(str(project_data["uuid"]))
        assert new_project["uuid"] == project_data["uuid"]
    except (ValueError, AssertionError):
        # in that case the uuid gets replaced
        assert new_project["uuid"] != project_data["uuid"]
        project_data["uuid"] = new_project["uuid"]
    for key in DB_EXCLUSIVE_COLUMNS:
        project_data.pop(key, None)
    return new_project