async def METHOD_NAME(obj_id: str) -> None:
    assert glob.LOCK.scene
    updated_project_ids: set[str] = set()
    async for project in projects_using_object_as_parent(glob.LOCK.scene.id, obj_id):
        # action_ids: set[str] = set()
        # delete actions using the object
        for action_to_delete in {act.id for act in project.actions if act.parse_type()[0] == obj_id}:
            project.remove_action(action_to_delete)
        # delete actions using obj's action points as parameters
        # TODO fix this!
        """
        actions_using_invalid_param: set[str] = \
            {act.id for act in ap.actions for param in act.parameters
             if param.type in (ActionParameterTypeEnum.JOINTS, ActionParameterTypeEnum.POSE) and
             param.value.startswith(obj_id)}
        ap.actions = [act for act in ap.actions if act.id not in actions_using_invalid_param]
        # get IDs of remaining actions
        action_ids.update({act.id for act in ap.actions})
        """
        # valid_ids: set[str] = action_ids | ActionIOEnum.set()
        # TODO remove invalid logic items
        await storage.update_project(project)
        updated_project_ids.add(project.id)
    logger.info("Updated projects: {}".format(updated_project_ids))