type Locale { localeId: String! description: String! } type LocalePair { targetLocale: Locale sourceLocale: Locale } type Workflow { name: String! workflowUid: ID! workflowSteps: [WorkflowStep!]! } type WorkflowStep { name: String! workflowStepUid: ID! } type WorkflowAssignment { accountUid: String! workflow: Workflow! workflowStep: WorkflowStep! sourceLocale: Locale! targetLocale: Locale! } type User { firstName: String lastName: String email: String! userUid: ID! localePairs: [LocalePair] assignments: [WorkflowAssignment] } type Query { # client have only one query. client can select which fields are required for particular context # no additional logic needed in order to get more/less data # amount of data and performance depends on field selection # performance optimisations can be done in single place getUser(userUid: String!): User }