# How would you do \`@shareable\` + \`@requires\`?

**URL:** <https://community.apollographql.com/t/how-would-you-do-shareable-requires/8794>\
**Category:** Schema Design\
**Tags:** federation\
**Created:** [March 25, 2025, 5:32pm UTC](https://community.apollographql.com/t/how-would-you-do-shareable-requires/8794 "2025-03-25T17:32:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![markl](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/markl/32/1171_2.png) [@markl](https://community.apollographql.com/u/markl)\
**Post date:** [March 25, 2025, 5:32pm UTC](https://community.apollographql.com/t/how-would-you-do-shareable-requires/8794/1 "2025-03-25T17:32:01Z")

</div>

Hi! We have a use case that super-simplified wants to look like the following

Schema A

```graphql
type ResponseConfirmation @shareable {
  """A string to display in the UI thanking the user for their response."""
  confirmation: String

  """A copy of the submitted answer so the UI can confirm."""
  submittedAnswer: String
}

type Mutation {
  submitSurveyResponse(answer: String!): ResponseConfirmation
}

```

Schema B

```graphql
type ResponseConfirmation @shareable {
  confirmation: String @external 
  submittedAnswer: String @external 

  """Using a fancy AI model, calculate a 'helpfulness score' rating based on the submitted answer"""
  helpfulnessScore: Float @requires(fields: "submittedAnswer")
}

```

Query

```graphql
mutation {
  submitSurveyResponse(answer: "foo") {
    confirmation
    submittedAnswer
    helpfulnessScore
  }
}

```

^ obviously this doesn’t work because `ResponseConfirmation` is not an Entity! (`@external`/`@requires` only works with entities afaik.)

We _could_ give it a fake `id: uuid()` field or something and make it a “fake” entity – (and not worry about the impacts it might have to normalized caching on clients 😬)

This is clearly a hack - can we do any better?

Thanks!
