directive @core(feature: String!) repeatable on SCHEMA directive @join__owner(graph: join__Graph!) on OBJECT directive @join__type( graph: join__Graph! key: String! resolvable: Boolean = true ) repeatable on OBJECT | INTERFACE directive @join__field( graph: join__Graph requires: String provides: String ) on FIELD_DEFINITION directive @join__graph(name: String!, url: String!) on ENUM_VALUE enum join__Graph { BIRDWATCH_BASIC @join__graph(name: "birdwatch-basic", url: "http://example.com/birdwatch-basic") OBSERVATIONS @join__graph(name: "observations", url: "http://example.com/observations") SIGHTINGS @join__graph(name: "sightings", url: "http://example.com/sightings") } scalar DateTime type Bird @fieldMarks(plumage: "juvenile") @fieldMarks(plumage: "adult") { id: ID! location: String! @tag(name: "locationService") @tag(name: "b") @tag(name: "a") name: String! notes: String @deprecated(reason: "Field is obsolete due to new data model.") observedAt: DateTime! @deprecated(reason: "Use UNIX timestamps instead as customary in bird watching") species: String! } type BirdObservation { bird: Bird! @join__field(graph: OBSERVATIONS) observationID: ID! @join__field(graph: OBSERVATIONS) observerDetails: ObserverDetails! @join__field(graph: OBSERVATIONS) timeOfObservation: DateTime! @join__field(graph: OBSERVATIONS) } type ObserverDetails { membershipNumber: String @join__field(graph: OBSERVATIONS) name: String! @join__field(graph: OBSERVATIONS) observerType: ObserverType! @join__field(graph: OBSERVATIONS) } type BirdSighting @deprecated(reason: "we haven't seen any birds in a while :(") { bird: Bird! @join__field(graph: SIGHTINGS) @pelagic observer: String! @join__field(graph: SIGHTINGS) sightingID: ID! @join__field(graph: SIGHTINGS) weatherConditions: String @join__field(graph: SIGHTINGS) } type Query { bird(id: ID!): Bird @join__field(graph: BIRDWATCH_BASIC) birdObservation(observationID: ID!): BirdObservation @join__field(graph: OBSERVATIONS) birdObservations(filters: BirdObservationFilters): [BirdObservation] @join__field(graph: OBSERVATIONS) birdSighting(sightingID: ID!, private: Boolean @deprecated): BirdSighting @join__field(graph: SIGHTINGS) birdSightings: [BirdSighting] @join__field(graph: SIGHTINGS) birds: [Bird] @join__field(graph: BIRDWATCH_BASIC) } enum ObserverType { AMATEUR SEMIPROFESSIONAL @deprecated(reason: "No such thing as semiprofessionals") PROFESSIONAL } input BirdObservationFilters { observedAt: DateTime @deprecated(reason: "UNIX timestamps instead, as usual in bird watching") observerType: ObserverType observerName: String first: Int }