Trabalhando com Prisma ORM e NestJS \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 06 Horas 

 10 Min 

 43 Seg 

   Tempo restante da oferta: 06 10 43 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Trabalhando com Prisma ORM e NestJS  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

# Trabalhando com Prisma ORM e NestJS

 Neste artigo vamos aprender os primeiros passos para trabalhar com o Prisma ORM e o NestJS.

 [ Wesley Gado ](https://www.treinaweb.com.br/blog/autor/wesley-gado) 3 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS.png)  

Neste artigo iremos construir uma aplicação básica utilizando outro ORM que está sendo muito utilizado no ecossistema Node.js, o Prisma. Temos artigos utilizando o TypeORM, como em [Criando o primeiro CRUD com NestJS](https://www.treinaweb.com.br/blog/criando-o-primeiro-crud-com-nestjs) e agora vamos abordar essa outra alternativa.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/10/E-BOOK-GRATUITO-COMECANDO-JS.png) ](https://www.treinaweb.com.br/ebook/guia-javascript)

O [Prisma](https://www.prisma.io/docs/getting-started "Prisma") é um [ORM](https://www.treinaweb.com.br/blog/o-que-e-orm "ORM") (Object Relational Mapping), o principal objetivo do ORM é facilitar a interação entre o código da aplicação e os dados armazenados em um banco de dados relacional, eliminando a necessidade de escrever consultas SQL manualmente. Agora vamos ver como usar o Prisma na prática.

## Criando projeto de exemplo com NestJS

Para criar um projeto [NestJS](https://www.treinaweb.com.br/blog/o-que-e-nestjs "NestJS"), basta termos o Node.js instalado, conforme pode ser visto no artigo [Instalação do Node.js - Windows, Mac e Linux](https://www.treinaweb.com.br/blog/instalacao-do-node-js-windows-mac-e-linux). Com o Node.js instalado, precisamos instalar o NestCLI, com o seguinte comando:

```jsx
npm i -g @nestjs/cli

```

Logo em seguida podemos criar o projeto, que se chamará app-prisma:

```jsx
nest new app-prisma

```

## Instalando Prisma

Para instalar o Prima via [npm](https://www.treinaweb.com.br/blog/npm-voce-sabe-o-que-da-para-fazer-com-ele "npm"), basta executarmos o comando:

```jsx
npm install prisma --save-dev

```

Neste momento nós instalamos o Prisma CLI, que será utilizado somente em ambiente de desenvolvimento, ao executarmos a migration conforme os próximos passos deste artigo, o Prisma Client será instalado automaticamente, que é o pacote necessário para trabalhar com o prisma em produção. Você também pode fazer a instalação manual utilizando o seguinte comando:

```jsx
npm install @prisma/client

```

O próximo passo é inicializar o prisma utilizando o comando:

```jsx
npx prisma init

```

O prisma irá criar um arquivo `schema.prisma` no diretório `/prisma`, e o arquivo `.env`, responsável pelas variáveis de ambiente, onde teremos a variável com a string relacionada a conexão com o banco, os arquivos estarão com o seguinte conteúdo:

```jsx
// schema.prisma

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql" // provider = "postgresql"
  url      = env("DATABASE_URL")
}

```

```jsx
// .env
# Environment variables declared in this file are automatically made available to Prisma.
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema

# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings

//DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
DATABASE_URL="mysql://root:treinaweb@localhost:3306/app-prisma"

```

Neste caso do exemplo vamos utilizar um banco de dados [MySQL](https://www.treinaweb.com.br/blog/primeiros-passos-com-mysql "MySQL"), portanto, os dados estão atualizados com o que vamos utilizar no exemplo, as linhas alteradas estão com os valores originais comentados.

## Criando primeiro model no Prisma

No arquivo `schema.prisma`, podemos criar o model, que será o espelho da tabela no banco. Para este exemplo vamos criar um model de usuários, chamado `User`, onde teremos as seguintes propriedades: id, name, email, description.

```
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model User {
  id Int @id @default(autoincrement())
  name String
  email String @unique
  description String 

  @@map("users")
}

```

Veja que utilizamos a palavra reservada model para criar este modelo, desta forma passando as propriedades e seus respectivos tipos e particularidades, também utilizamos o recurso `map`, para criar a tabela no banco com o nome `users`.

[  ![Express - Desenvolvendo aplicações web](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/express.svg)   Curso Express - Desenvolvendo aplicações web Conhecer o curso ](https://www.treinaweb.com.br/curso/express-desenvolvendo-aplicacoes-web)

## Criando migration no Prisma

Para criar a primeira migration, basta utilizarmos o comando:

```jsx
npx prisma migrate dev --name users

```

Neste caso criamos a migration relacionada a tabela `users`, ao executar o comando acima, o prisma cria um novo diretório `/prisma/migrations/[timestamp_nome-da-migration]`, e neste diretório é gerado um arquivo `.sql` com a query respectiva a criação da tabela correspondente ao model.

```jsx
// prisma/migrations/20230922182027_users

-- CreateTable
CREATE TABLE `users` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(191) NOT NULL,
    `email` VARCHAR(191) NOT NULL,
    `description` VARCHAR(191) NOT NULL,

    UNIQUE INDEX `users_email_key`(`email`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

```

Vale reforçar que o prisma além de criar a migration também executa a query, portanto, o banco de dados já possui a tabela users, vazia, e também uma tabela `_prisma_migrations`, onde ficará o histórico dos dados referentes as migrations executadas.

Pra finalizar a configuração do prisma, precisamos também criar o arquivo `prisma.service.ts`, ele será criado dentro do diretório `src`

```jsx
//prisma.service.ts
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
  async onModuleInit() {
    await this.$connect();
  }

  async enableShutdownHooks(app: INestApplication) {
    process.on('beforeExit', async () => {
      await app.close();
    });
  }
}

```

Este arquivo é responsável por gerenciar a conexão com banco de dados.

Perfeito, o prisma está conectado e interagindo com o banco de dados da forma correta, agora precisamos criar a estrutura para permitir as operações com o banco e a aplicação.

## Criando recurso para adicionar usuários

Agora vamos criar a estrutura para a aplicação adicionar um usuário, para isto vamos executar o comando:

```jsx
nest g res user --no-spec

```

Desta forma o NestCLI irá gerar a estrutura com os arquivos relacionados ao controller, module e service. Vale salientar que estamos utilizando o padrão REST API para este exemplo.

O próximo passo é criar o método `create()`, tanto no controller, para receber os dados na requisição, quanto no service, para efetuar efetivamente o registro no banco de dados, como podemos ver abaixo:

```jsx
//user.controller.ts
import { Body, Controller, Post } from '@nestjs/common';
import { UserService } from './user.service';
import { Prisma } from '@prisma/client';

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Post()
  create(@Body() user: Prisma.UserCreateInput) {
    return this.userService.create(user);
  }
}

```

Veja que o prisma provê o tipo `UserCreateInput`, que podemos utilizar para receber os dados na requisição e criar um novo registro. Lembrando que você também pode utilizar a técnica do DTO, sendo uma boa prática em relação a deixar a aplicação menos dependente do ORM.

```tsx
//user.service.ts
import { Injectable } from '@nestjs/common';
import { Prisma } from '@prisma/client';
import { PrismaService } from 'src/prisma.servce';

@Injectable()
export class UserService {
  constructor(private prisma: PrismaService) {}
  create(user: Prisma.UserCreateInput) {
    return this.prisma.user.create({ data: user });
  }
}

```

Já no `user.service.ts`, veja que importamos o `PrismaService` e utilizamos a técnica de injeção de dependências. Então, podemos ter acesso aos recursos do prisma, como salvar um novo registro utilizando o método `create()` referente ao model do registro que será salvo, passando como parâmetro um objeto com as propriedades do respectivo model.

## Testando cadastro de usuário

Finalmente podemos testar o cadastro de um novo registro utilizando o Prisma, vamos efetuar a requisição na rota POST http://localhost:3000/user, com os seguintes dados:

```json
{
	"name":"Wesley",
	"email":"wesleygado@gmail.com",
	"description":"Teacher"
}

```

Se tudo ocorrer da maneira correta vamos obter de retorno um objeto respectivo ao registro salvo no banco:

```json
{
	"id": 1,
	"name": "Wesley",
	"email": "wesleygado@gmail.com",
	"description": "Teacher"
}

```

Perfeito, a aplicação está se comportando da forma esperada.

[  ![Nest.js - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/nest-js.svg)   Curso Nest.js - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/nestjs-fundamentos)

## Conclusão

Neste artigo aprendemos a efetuar a instalação e integração do Prisma ORM com o NestJS, combinação essa que vem ganhando espaço no ecossistema JavaScript, e ainda efetuamos a implementação da rota POST referente ao cadastro de um registro em um banco de dados MySQL. O Prisma possibilita integração com o TypeScript, sistema simplificado de migrations, facilidade de uso, entre outras vantagens que valem o seu tempo para aprender essa tecnologia.

Por fim, caso queira aprender mais sobre [NestJS](https://nestjs.com/) saiba que aqui na [TreinaWeb](https://treinaweb.com.br/) temos o curso [Nest.js - Fundamentos](https://www.treinaweb.com.br/curso/nestjs-fundamentos) que possui **02h07 de vídeos** e um total de **18 exercícios**. Conheça também nossos outros cursos de [TypeScript](https://www.treinaweb.com.br/busca?q=TypeScript).

Veja quais são os tópicos abordados durante o curso de Nest.js - Fundamentos:

- Conhecendo a estrutura;
- Utilizando Nest CLI
- Entendendo Rotas, Controllers e Views;;
- Conexão com banco de dados;
- Usando TypeORM;
- Template Engine.

 [ ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/06/BANNER-AULA-GRATUITA-1700x850-1.jpg) ](https://www.treinaweb.com.br/lp/aula-gratis/)

- [ #ORM ](https://www.treinaweb.com.br/blog/tag/orm)
- [ #NestJS ](https://www.treinaweb.com.br/blog/tag/nestjs)
- [ #Prisma ](https://www.treinaweb.com.br/blog/tag/prisma)

Autor

 ![Wesley Gado](//secure.gravatar.com/avatar/1b770ca482a7232b1885881430a592bb?d=mm)

## Wesley Gado

 Formado em Análise e Desenvolvimento de Sistemas pelo Instituto Federal de São Paulo, atuou em projetos como desenvolvedor Front-End. Nas horas vagas grava Podcast e arrisca uns três acordes no violão. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wesley-gado)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Node ](https://www.treinaweb.com.br/blog/categoria/node-js) 

     3 anos atrás

    ##  [ Criando CRUD com Prisma ORM e NestJS ](https://www.treinaweb.com.br/blog/criando-crud-com-prisma-orm-e-nestjs) 

     Neste artigo vamos implementar um CRUD com Prisma ORM e NestJS, abordando as principais operações básicas com o banco de dados.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/background-post-400x280.jpg)  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

     10 anos atrás

    ##  [ Complexidade ciclomática, análise estática e refatoração ](https://www.treinaweb.com.br/blog/complexidade-ciclomatica-analise-estatica-e-refatoracao) 

     Veremos nesse artigo como se dá a mensuração da complexidade ciclomática; como os analisadores estáticos podem nos auxiliar e a importância da refatoração.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Trabalhando com eventos no NestJS ](https://www.treinaweb.com.br/blog/trabalhando-com-eventos-no-nestjs) 

     Neste artigo vamos aprender a utilizar os eventos com o NestJS, criando um exemplo onde vamos simular o envio de e-mails.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/spring-framework-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Trabalhando com Scheduled Tasks no Spring Boot ](https://www.treinaweb.com.br/blog/trabalhando-com-scheduled-tasks-no-spring-boot) 

     Descubra o poder das Scheduled Tasks no Spring Boot. Aprenda a criar, configurar e aprimorar tarefas agendadas em Java com o Spring Framework.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/12/form-html5-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ Trabalhando com formulários no HTML ](https://www.treinaweb.com.br/blog/trabalhando-com-formularios-no-html) 

     No artigo de hoje, veremos um recurso muito utilizado pelos desenvolvedores front-end e presente no nosso dia a dia, formulários.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/10/o-que-e-e-como-comecar-com-golang-400x280.jpg)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Trabalhando com funções na Golang ](https://www.treinaweb.com.br/blog/trabalhando-com-funcoes-na-golang) 

     Neste artigo vamos aprender sobre as funções na Golang. Veremos o que são, qual a sua importância em nossos programas e como utilizá-las.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/12/capa-tag-ancora-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ Trabalhando com a tag âncora no HTML ](https://www.treinaweb.com.br/blog/trabalhando-com-a-tag-ancora-no-html) 

     Nesse artigo veremos como a tag âncora (link) e seus atributos são utilizados no desenvolvimento de sites, e como ela pode nos ajudar.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/javascript-comandos-do-console-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     5 anos atrás

    ##  [ Trabalhando com data no JavaScript ](https://www.treinaweb.com.br/blog/trabalhando-com-data-no-javascript) 

     Neste artigo veremos como manipular datas no JavaScript, utilizando a classe Date, como pegar a data atual e utilizar os métodos da classe.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/DOM-JAVASCRIPT-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     6 anos atrás

    ##  [ Trabalhando com JavaScript no navegador ](https://www.treinaweb.com.br/blog/trabalhando-com-javascript-no-navegador) 

     Ao utilizar JavaScript para desenvolvimento web, é necessário entender o funcionamento do DOM (Document Object Model). O DOM é o que permite o acesso aos elementos HTML/XML para manipulá-los de forma que seja interessante para os nossos objetivos como desenvolvedor.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/ARRAYS-OBJETOS-JAVASCRIPT-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     6 anos atrás

    ##  [ Trabalhando com arrays e objetos no JavaScript ](https://www.treinaweb.com.br/blog/trabalhando-com-arrays-e-objetos-no-javascript) 

     Confira neste artigo como trabalhar com Arrays e Objetos no JavaScript. Vamos aprender a declarar e manipular Arrays e Objetos com exemplos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/16094538/liquid-fluid-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Trabalhando com a template engine Liquid no ASP.NET Core ](https://www.treinaweb.com.br/blog/trabalhando-com-a-template-engine-liquid-no-asp-net-core) 

     Em alguns projetos pode ser necessário substituir o Razor por outra engine template. Neste caso, aprenda como fazer esta substituição pelo Liquid.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/11/12132017/introducao-swoole-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Trabalhando com corrotinas, canais e explorando um pouco mais o scheduler de corrotinas do Swoole ](https://www.treinaweb.com.br/blog/trabalhando-com-corrotinas-canais-e-explorando-um-pouco-mais-o-scheduler-de-corrotinas-do-swoole) 

     Neste artigo trabalharemos com os conceitos fundamentais de corrotinas, canais, defer etc, também exploraremos algumas opções do scheduler como, por exemplo, fazê-lo operar de forma preemptiva.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **06h 10min 43s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
