{"id":25615295,"url":"https://github.com/eneas-almeida/graphql","last_synced_at":"2025-09-17T19:16:00.438Z","repository":{"id":221963946,"uuid":"755889823","full_name":"eneas-almeida/graphql","owner":"eneas-almeida","description":"📜 Guia GraphQL, elaborado por Enéas Almeida com o principal objetivo de facilitar os repasses de informações à equipe.","archived":false,"fork":false,"pushed_at":"2024-02-11T17:19:54.000Z","size":320,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-22T03:19:10.481Z","etag":null,"topics":["golang","graphql","rpc"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eneas-almeida.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-11T11:53:23.000Z","updated_at":"2024-02-11T13:15:32.000Z","dependencies_parsed_at":"2024-02-11T13:25:08.038Z","dependency_job_id":"ceba0d82-6ddd-476f-a294-7f3daec06730","html_url":"https://github.com/eneas-almeida/graphql","commit_stats":null,"previous_names":["venzel/graphql","eneas-almeida/graphql"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eneas-almeida/graphql","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fgraphql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fgraphql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fgraphql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fgraphql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eneas-almeida","download_url":"https://codeload.github.com/eneas-almeida/graphql/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fgraphql/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275648919,"owners_count":25503204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-17T02:00:09.119Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","graphql","rpc"],"created_at":"2025-02-22T03:19:08.107Z","updated_at":"2025-09-17T19:16:00.404Z","avatar_url":"https://github.com/eneas-almeida.png","language":"Go","readme":"# GraphQL\n\n\u003e Este guia foi elaborado por **Enéas Almeida** com o principal objetivo de facilitar os repasses de informações à equipe.\n\n## O que é o GraphQL\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"./media/graphql.svg\" width=\"300\" /\u003e\u003c/p\u003e\n\nGraphQL é uma linguagem de consulta de dados e uma runtime para execução dessas consultas, desenvolvida pelo Facebook em 2012 e posteriormente liberada como código aberto em 2015. Ela oferece uma abordagem mais eficiente e flexível para obter e manipular dados em comparação com abordagens tradicionais como REST.\n\n## Onde é ideal utilizar GraphQL\n\n-   **Aplicações com múltiplos clientes**: Quando você tem diferentes clientes (por exemplo, aplicativos móveis, aplicativos da web, dispositivos IoT);\n\n-   **Microserviços**: Em ambientes de microservices, onde há muitos serviços independentes responsáveis por diferentes partes de uma aplicação;\n\n-   **BFF**: Uma excelente escolha para o padrão arquitetural BFF, fornecendo flexibilidade de consultas, redução de chamadas de APIs e desacoplamento cliente-servidor.\n\n## Links importantes\n\n-   [GQLGen](https://gqlgen.com/) - Biblioteca em Go para trabalhar com GraphQL rapidamente.\n\n### Passo 1 - Incializa a estrutra de pastas com os pacotes necessários\n\n```bash\n# Incializa o projeto\ngo mod init graphql\n\n# Cria os diretórios e depedências necessárias\nprintf '// +build tools\\npackage tools\\nimport (_ \"github.com/99designs/gqlgen\"\\n _ \"github.com/99designs/gqlgen/graphql/introspection\")' | gofmt \u003e tools.go\n\n# Baixa os pacotes\ngo mod tidy\n```\n\n### Passo 2 - Inicializa o projeto com o GQLGen\n\n```bash\n# Inicializa o GQLGen\ngo run github.com/99designs/gqlgen init\n\n# Baixa os pacotes\ngo mod tidy\n```\n\n### Passo 3 - Inicializa o servidor\n\n```bash\ngo run cmd/server/server.go\n```\n\n### Passo 4 - Acessa o playground do GraphQL\n\nhttp://localhost:8080/\n\n## Passo 5 - Altera o schema GraphQL pré definido\n\n```graphql\n# Em /graph/schema.graphqls\nscalar DateTime\n\ntype Transaction {\n    id: ID!\n    amount: Float!\n    account: Account! # Relacionamento 1:1\n    createdAt: DateTime!\n    updatedAt: DateTime!\n}\n\ntype Account {\n    id: ID!\n    name: String!\n    email: String!\n    transactions: [Transaction!]! # Relacionamento 1:M\n    createdAt: DateTime!\n    updatedAt: DateTime!\n}\n\ninput NewTransaction {\n    amount: Float!\n    accountId: ID!\n}\n\ninput NewAccount {\n    name: String!\n    email: String!\n}\n\ntype Query {\n    transactions: [Transaction!]!\n    accounts: [Account!]!\n}\n\ntype Mutation {\n    createTransaction(input: NewTransaction!): Transaction!\n    createAccount(input: NewAccount!): Account!\n}\n```\n\nAssim que alterado o schema como demonstrado no código acima, reconfigura o schema através do GQLGen com o comando abaixo:\n\n```bash\ngo run github.com/99designs/gqlgen generate\n```\n\n⚠️ **Atenção**: após gerar o novo schema, lembrar de apagar os resolvers antigos em schema.resolvers.go\n\n### Passo 6 - Separa os models criados, para melhor criar os relacionamentos\n\nCria os 2 modelos no diretório graph/model:\n\n-   account.go\n-   transaction.go\n\nSepara os objetos Account e Transaction que estão dentro de models_gel.go, apenas a struct e coloca nos respectivos arquivos.\n\nNo arquivo gqlgen.yml que está na raiz, cria a seguinte estrutruta:\n\n```yml\nmodels:\n    Account:\n        model:\n            - graphql/graph/model.Account\n    Transaction:\n        model:\n            - graphql/graph/model.Transaction\n```\n\nGera novamente as estruturas e dependências:\n\n```bash\ngo run github.com/99designs/gqlgen generate\n```\n\n### Passo 7 - Testando a consulta no Playground\n\n⚠️ **Atenção**: Antes de testar, implementar os métodos, pois, se não implementado, retorna um panic.\n\nhttp://localhost:8080/\n\n\u003cimg src=\"./media/playground.png\" /\u003e\n\n```graphql\n# Cria a conta\nmutation createAccount {\n    createAccount(input: { name: \"Tiago\", email: \"tiago@gmail.com\" }) {\n        id\n        name\n    }\n}\n\n# Lista as contas\nquery queryAccounts {\n    accounts {\n        id\n        email\n    }\n}\n\n# Lista as contas e a lista de transações\nquery queryAccountsWithTransactions {\n    accounts {\n        id\n        name\n        transactions {\n            amount\n        }\n    }\n}\n\n# Cria uma transação para uma conta\nmutation createTransaction {\n    createTransaction(input: { amount: 3.4, accountId: \"e6a8623c-6d4c-483e-ae0a-84c55ad7ec98\" }) {\n        id\n    }\n}\n\n# Lista todas as transações\nquery queryTransactions {\n    transactions {\n        id\n        amount\n    }\n}\n\n# Lista todas as transações e a conta relacionada\nquery queryTransactionsWithAccount {\n    transactions {\n        id\n        amount\n        account {\n            name\n            email\n        }\n    }\n}\n```\n\n## Sqlite3\n\n### Instalação Sqlite3\n\n```bash\n# Instalação\nsudo apt install sqlite3\n\n# Versão\nsqlite3 --version\n```\n\n### Comandos Sqlite3\n\n```bash\n# Acessa o banco\nsqlite3 data.db\n\n# Cria tabela accounts\nsqlite\u003e create table accounts (id string, name string, email string);\n\n# Cria a tabela transactions\nsqlite\u003e create table transactions (id string, amount decimal, account_id string);\n\n# Lista os dados da tabela\nsqlite\u003e select * from accounts;\n\n# Para sair\nsqlite\u003e .quit\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eMais comandos do Sqlite3\u003c/summary\u003e\n\n```bash\n# Deleta todos os registros\nsqlite\u003e DELETE FROM accounts;\n\n# Dropa a tabela\nsqlite\u003e DROP TABLE accounts;\n\n# Insere um registro na tabela accounts\nsqlite\u003e INSERT INTO accounts (id, name, email) VALUES ('xx0011', 'tiago', 'tiago@gmail.com');\n\n# Insere um registro na tabela transactions\nsqlite\u003e INSERT INTO transactions (id, amount, account_id) VALUES ('kk0033', 33.20, 'xx0011');\n```\n\n\u003c/details\u003e\n\n\u003chr /\u003e\n\n\u003cdiv\u003e\n  \u003cimg align=\"left\" src=\"https://imgur.com/k8HFd0F.png\" width=35 alt=\"Profile\"/\u003e\n  \u003csub\u003eMade with 💙 by \u003ca href=\"https://github.com/venzel\"\u003eEnéas Almeida\u003c/a\u003e\u003c/sub\u003e\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feneas-almeida%2Fgraphql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feneas-almeida%2Fgraphql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feneas-almeida%2Fgraphql/lists"}