# GraphQL at TheOrchard

<img src="./img/orchard-graphql.png" height="100px" width="auto" />

Welcome to GraphQL documentation at The Orchard! You may have wound up here by mistake, because someone gave
you instructions to "read the docs", or you may have a hobby of browsing github repositories aimlessly and looking for
fun things to read about. Regardless of why you're here, or how much you know about GraphQL (at The Orchard or in
general), we're hoping that this can answer any and all questions you may have.

Keep in mind that this is a living document, and does not get better unless we all contribute 🤝 &nbsp; If you find
broken links, out of date information, or things that need clarification, please submit a pull request with updates!

**If you have any questions about GraphQL, please do not hesitate to reach out to the fine folks in the
[#graphql](https://orcd.slack.com/archives/CE2MVK8BF) Slack channel. This is likely to be the quickest way to get help.
At the very least, we can help you find the appropriate section of this documentation 😎**

1. **GraphQL at The Orchard**
    1. **[Architecture](orchard/architecture.md)** - How does everything fit together?
    2. **DevOps** - How do I get my code into production?
    3. **[Existing GraphQL services](orchard/services.md)** - Where is everything? Where should my logic go?
    4. **[Google Sheet of Graphql services](https://docs.google.com/spreadsheets/d/1c-txc_SMJyVT5Z4NN8aQpWz6jbFDdTEAr2-w9_YfEVo/edit?pli=1#gid=1055194796)** - add new graphql services here, track changes that need to happen to all services
    5. **GraphQL Decision-making**
        1. **[GraphQL Maintainers](orchard/decisions/maintainers.md)** - A secret 🤫 &nbsp; cabal of experts -- the
        GraphQL Illuminati
        2. **[Orchard Graph Refinement](orchard/decisions/refinement.md)**
    6. **Schema**
        1. **[Validation](orchard/schema/validation.md)**
    7. **Conventions**
        1. **[Naming Conventions](orchard/conventions/naming.md)**
    8. **JWT Authentication**
        1. **[JWT Usage in Graphql](https://docs.google.com/document/d/1fcMttNaIKW7mPe-e64SCThMlqeRkpTHztPcj-2SsOUM)**
2. **Principles**
    1. **Overview**
        1. **[Heirarchical](principles/overview/hierarchical.md)**
        2. **[Client-specified queries](principles/overview/client-specified.md)**
        3. **[GraphQL Glossary](principles/overview/glossary.md)** - A collection of terms you might come across
    2. **[Federation](principles/federation.md)** - inc. what to do if you think you need a new service
3. **Apollo**
    1. **Apollo Client**
        1. **[Key Fields](apollo/client/key-fields.md)**

## External Resources

* **[GraphQL Specification (June, 2018 Edition)](https://spec.graphql.org/June2018/)** - An excellent resource for how
GraphQL works. The Overview, Type System, Execution and Response sections are all well worth a read.
* **[Principled GraphQL](https://principledgraphql.com/)** - A series of suggestions put together by the team at
[Apollo](https://www.apollographql.com/) which detail many best practices and design philosophies.
