nossas / bonde-apis

Monorepo with GraphQL APIs used on the Bonde platform

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bonde GraphQL APIs

TODO:

  • Definição resumida
  • Definição tecnica de uma API GraphQL (bibliotecas)
  • Definição de arquitetura e fluxo de acesso

Understand the SETUP

Install

# Install the package manager
yarn global add pnpm
# Install packages dependencies
pnpm i

Libraries

  • Build (Node, Typescript)
  • Server (Express, GraphQL)
  • Log (Pino)
  • Tests (Jest)

Commands

  • Tests:
pnpm m run tests # pnpm m run coverage
  • Development server:
pnpm m run dev
  • Production build and start:
pnpm m run build
pnpm m run start

How to create a new package?

Install cookiecutter, following setup on Debian/Ubuntu OS:

sudo apt-get install cookiecutter

PS: In Ubuntu version 20.04 there's no package available for cookiecutter (yet). You'll need to install it via Python packages.

Copy a base project to GraphQL API:

cookiecutter example-api/ -o packages/

Run tests on your new GraphQL API, change example by the domain configuration made in the previous step:

pnpm m run tests --filter example-api

Requirements for adding permissions to resolver

  • The permissions for the user that made the request are checked before our resolver is called
  • community_id must be passed from the resolver args input
    • That's where the permissions-util get the community_id
  • The session context is passed in every Graphql request (you can see it in the server.js), and it's data are contained inside the Bearer ${token}
    • More info about context and authentication in this Apollo docs article
    • If you wish to import a resolver inside another, you must pass the context via parameters (see an example of this in the create_match resolver inside the redes package)

How to test if my API is working?

  1. Initiate a localhost tunnel using ngrok
  2. Declare the SCHEMA url in the api-graphql service via enviroment variables
  3. Create a Remote Schema in Hasura using the SCHEMA variable you just declared in the service
  4. Start your API and happy coding!

References boilerplate expressjs

About

Monorepo with GraphQL APIs used on the Bonde platform


Languages

Language:PLpgSQL 54.3%Language:TypeScript 35.7%Language:Python 9.5%Language:JavaScript 0.4%Language:Dockerfile 0.1%