Skip to content

lucasthalless/users-crud

Repository files navigation

CRUD de Usuários · NPM Version Package License

While building a Users CRUD with NestJS, GraphQL, REST, TypeORM, PostgreSQL, and Docker, I dealt with API failures, database connection/configuration problems, TypeORM query or migration errors, docker containerization and networking problems. This project was made within a deadline for a job application and I was responsible to communicate the progress, decisions and development time of the features.

Sumário

Descrição

CRUD de usuários em GraphQL utilizando NestJS, TypeORM e MySQL.

Os usuários possuem seus dados de nome, email e senha junto com possíveis configurações da sua conta em um sistema. Essa configuração é armazenada no banco de dados através de um relacionamento um-para-um. A arquitetura do projeto foi criada a partir da CLI do NestJS.

Instalação e execução

Clone esse repositório e dentro dele execute:

docker-compose -f docker-compose.yaml up --build

e a API vai estar disponível na porta :3000.

Para conseguir o token de autenticação para testar a API, utilize a rota POST /auth/signup para criar uma conta, enviando os dados "name", "email" e "password" no Body x-www-form-urlencoded do Request. Após isso basta logar com seu "email" e "password" no Body x-www-form-urlencoded do Request na rota auth/signin e ela retornará o token jwt.

Disponibilizei uma collection do Postman com tudo isso pronto para facilitar esse processo aqui :)

Utilize a rota /graphql para testar as querys e mutations, com o header authorization: "Bearer seu-token-jwt".

Queries e Mutations ↴
  • getUsers
{
	getUsers {
    id
    name
    email
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}
  • getUser
{
  getUser(id: 1) {
    id
    name
    email
    password
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}
  • createUser
mutation {
  createUser (createUserInput: {name: "maria", email: "maria@gmail.com", password: "m4r14"}){
    id
    name
    email
    password
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}
  • updateUser
mutation {
  updateUser (id: 1, updateUserInput: {name:"maria", email: "maria@gmail.com", password:"maria123"}){
    id
    name
    email
    password
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}
  • removeUser
mutation {
  removeUser (id: 1)
}
  • createUserSettings
mutation {
  createUserSettings (createUserSettingsInput: {userId: 22, receiveEmails: false, receiveNotifications: true}) {
    userId
    receiveEmails
    receiveNotifications
  }
}
  • updateUserSettings
mutation {
  updateUserSettings (userId: 22, updateUserSettingsInput: {receiveEmails: true, receiveNotifications: true}) {
    userId
    receiveEmails
    receiveNotifications
  }
}

Docker

A API foi dockerizada para os ambientes de produção e de desenvolvimento, utilizando Dockerfiles e docker-composes.

Testes

A aplicação possui testes end-2-end, que podem ser executados com os seguintes comandos:

# test database
$ docker-compose -f docker-compose.test.yaml up --build

com o banco de dados para teste rodando, é possível executar os testes:

# testes unitários
$ npm run test

# testes e2e
$ npm run test:e2e

# cobertura de testes
$ npm run test:cov

Paginação, filtros e ordenação

Foi utilizada a biblioteca nestjs-graphql-tools para configurar na query getUser a paginação, que deve seguir a formatação (documentação ↗️):

{
  getUsers(paginate: {per_page:1, page: 0}){
    id
    name
    email
    password
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}

os filtros, que devem seguir a formatação (documentação ↗️):

{
  getUsers(where: {name: {eq: "joao"}}){
    id
    name
    email
    password
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}

e a ordenação, que deve seguir a formatação (documentação ↗️):

{
  getUsers(order_by: {id: ASC}){
    id
    name
    email
    password
    settings {
      userId
      receiveEmails
      receiveNotifications
    }
  }
}

Requisitos

  • Api Graphql com NestJS
  • Crud de Usuarios (com Graphql)
  • Rota Rest para autenticação
  • Estruturação de entity e db com typeorm
  • Imagem Docker
  • Testes com Jest
  • Paginação, Filtros e Ordenacão na Query Graphql

About

users CRUD in NestJS with TypeORM and GraphQL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published