@classmethod
def get_assets_and_children(cls, session):
    """Get assets and children that are powered by them
        
        Args:
            session: database session
        Returns:
            list: list of assets ordered by key (ascending) & its child asset(s) 
        """
    results = session.run(
        """
            MATCH (asset:Asset) 
            OPTIONAL MATCH (asset)-[:HAS_COMPONENT]->(component:Component)
            OPTIONAL MATCH (asset)<-[:POWERED_BY]-(childAsset:Asset) 
            RETURN asset, count(DISTINCT component) as num_components, collect(childAsset) as children 
            ORDER BY asset.key ASC
            """
        )
    assets = list(map(lambda x: dict({**x['asset'], 'children': x[
        'children'], 'num_components': x['num_components']}), list(results)))
    return assets
