Skip to main content

Assets Subgraph Reference

The su-assets subgraph provides comprehensive asset management capabilities including asset profiles, properties, relationships, and views.

Subgraph Information

  • Name: su-assets
  • Routing URL: https://73qfchk50k.execute-api.us-west-2.amazonaws.com/poc/graphql
  • Last Updated: 2025-10-09
  • SDL: View Schema

Overview

This subgraph owns:
  • Asset profiles and their configuration
  • Individual assets and their properties
  • Asset relationships and hierarchies
  • View configurations for UI rendering
  • Asset filters for workflow integration
  • Asset conversion configurations

Root Types

Query Fields

extend type Query {
  assetProfiles: AssetProfiles
  assets(profile: ID!): Assets
  assetFilters: [AssetSelectionFilter!]
  assetFilter(id: ID!): AssetSelectionFilter
  assetFilterDownloads: [AssetDownload!]
}

Mutation Fields

extend type Mutation {
  updateAssetProfile(input: UpdateAssetProfileInput): AssetProfileMutationResult
  putAssetProfileExtension(input: putAssetProfileExtensionInput!): AssetProfileMutationResult
  removeAssetProfileExtension(input: removeAssetProfileExtensionInput!): AssetProfileMutationResult
  updateAssetProfileViewConfiguration(input: UpdateAssetProfileViewConfigurationInput!): AssetProfileViewConfigurationMutationResult!
  updateAssetProfileViewLayout(input: UpdateAssetProfileViewLayoutInput): AssetProfileViewLayoutMutationResult!
  updateAssetProfileAssetConversionConfiguration(input: UpdateAssetProfileAssetConversionConfigurationInput!): AssetProfileAssetConversionConfigurationMutationResult!
  createAssetFilter(input: CreateAssetFilterInput!, correlationId: String): AssetFilterMutationResult
  updateAssetFilter(input: UpdateAssetFilterInput!, correlationId: String): AssetFilterMutationResult
}

Core Types

AssetProfile

Defines the structure and behavior of a class of assets.
type AssetProfile @key(fields: "profile") {
  profile: ID!
  title: String!
  owner: EntityOwner!
  properties: [AssetPropertyDefinition!]
  propertyMaps: [AssetProfilePropertyMapping!]
  displayNameProperty: String!
  displayNameTemplate: String
  secondaryDisplayNameProperty: String
  isDeletedProperty: String
  forceAssetStateUpdates: Boolean
  relationships: [AssetProfileRelationship!]
  assets(first: Int, after: String, filter: AssetFilter): AssetsConnection
  assetsExport(...): AssetProfileAssetExport
  assetById(id: ID!): Asset
  upDatasets: [UpDataset!]
  upDataset(dataset: String!): UpDataset
  viewConfigurations: [AssetProfileViewConfiguration!]
  viewConfiguration(id: ID!): AssetProfileViewConfiguration
  assetConversionConfigurations: [AssetProfileAssetConversionConfiguration!]
  stateUpdateDatasets: [StateUpdateDataset!]
}
Key Fields:
  • profile: Unique identifier for this asset profile type
  • title: Human-readable name
  • displayNameProperty: Property used for asset display name
  • properties: Effective properties available on assets
  • relationships: Defined relationships to other asset profiles

Asset

Individual asset instance.
type Asset @key(fields: "profile id") {
  id: ID!
  profile: ID!
  assetProfile: AssetProfile
  modifiedAt: DateTime
  geometry: GeoJSONGeometryInterface
  properties(only: [String!]): JSONObject
  observation: JSONObject
  geoJSONFeature: GeoJSONFeature
  displayName: String!
  secondaryDisplayName: String
  related(relationship: ID, params: JSONObject): AssetRelationship
  issueSubject: IssueSubject!
  isDeleted: Boolean!
}
Key Fields:
  • id: Unique asset identifier within profile
  • profile: Reference to asset profile
  • displayName: Computed display name from profile configuration
  • properties: Dynamic properties from underlying datasets
  • observation: Merged state observation
  • geometry: GeoJSON geometry if geospatial
  • related: Navigate relationships to other assets

AssetRelationship

Union type for one-to-one or one-to-many relationships.
union AssetRelationship = AssetRelationshipOne | AssetRelationshipMany

type AssetRelationshipOne {
  asset: Asset
  observation: JSONObject
}

type AssetRelationshipMany {
  assets: [Asset!]
  observations: [JSONObject!]
}

AssetProfileRelationship

Defines a relationship between asset profiles.
type AssetProfileRelationship {
  relationship: ID!
  type: AssetProfileRelationshipType!  # ONE or MANY
  profile: ID!
  assetProfile: AssetProfile!
  referenceProperty: String
  referenceType: AssetProfileRelationshipReferenceType!
  lookupProperty: String
  lookupType: AssetProfileRelationshipReferenceType!
  parameters: [UpSpecificationParameter!]
}

Pagination

Uses Relay-style cursor pagination:
type AssetsConnection {
  pageInfo: PageInfo!
  edges: [AssetEdge]
}

type AssetEdge {
  node: Asset
}

View Configurations

UI layout and visualization settings:
type AssetProfileViewConfiguration {
  id: ID!
  name: String
  map: AssetProfileViewMap
  layouts(mediaTypes: [AssetProfileViewLayoutMediaType!]): [AssetProfileViewLayout!]
}

type AssetProfileViewLayout {
  mediaType: AssetProfileViewLayoutMediaType  # WEB, MOBILE, PRINTABLE
  widgets: [AssetProfileViewWidget!]
}

type AssetProfileViewWidget {
  id: ID!
  layout: AssetProfileViewLayoutDetails!  # x, y, w, h
  name: String!
  settings: JSONObject!
  widget: String!
}

Asset Filters

Reusable asset selections for workflows:
type AssetSelectionFilter @key(fields: "id") {
  id: ID!
  displayName: String!
  description: String
  profile: ID!
  assetProfile: AssetProfile!
  subProfiles: [AssetSelectionFilterRelationship!]
  audit: AssetSelectionFilterAudit
}

Entity Extensions

This subgraph extends entities from other subgraphs:

EntityOwner

type EntityOwner
  @extends
  @key(fields: "username group") {
  username: String! @external
  group: String! @external
}

IssueSubject

type IssueSubject
  @extends
  @key(fields: "type reference") {
  type: String! @external
  reference: ID! @external
  assetReference: AssetReference @requires(fields: "type reference")
}

Common Patterns

Query Assets with Pagination

query GetAssets($profile: ID!, $first: Int!, $after: String) {
  assetProfiles {
    byId(profile: $profile) {
      assets(first: $first, after: $after) {
        edges {
          node {
            id
            displayName
            modifiedAt
          }
        }
        pageInfo {
          hasNextPage
          endCursor
        }
      }
    }
  }
}

Update Asset Profile

mutation UpdateProfile($input: UpdateAssetProfileInput!) {
  updateAssetProfile(input: $input) {
    assetProfile {
      profile
      displayNameTemplate
    }
    correlationId
    errors {
      message
      type
    }
  }
}

Export Assets

query ExportAssets($profile: ID!) {
  assetProfiles {
    byId(profile: $profile) {
      assetsExport(
        properties: ["name", "status"],
        isExcel: false
      ) {
        csvFileDownloadUrl(exportName: "assets")
      }
    }
  }
}

Type Index

Key types defined in this subgraph:
  • AssetProfile - Profile definitions
  • Asset - Individual assets
  • AssetPropertyDefinition - Property schemas
  • AssetRelationship - Relationship data
  • AssetProfileViewConfiguration - UI configurations
  • AssetSelectionFilter - Reusable filters
  • PageInfo - Pagination metadata (@shareable)
  • GeoJSON types (@shareable)