Tutorial para CRUD com MYSQL usando PRISMA
Passo 1: Configurar o Prisma
1. Instale o Prisma CLI localmente no seu projeto:
npm install @prisma/cli
2. Inicialize o Prisma no seu projeto:
npx prisma init
3. Selecione a opção Use other dialects (MySQL, SQLite, Microsoft SQL Server,
PostgreSQL, CockroachDB) e escolha o banco de dados MySQL.
Passo 2: Adaptar o Schema do Prisma
Dentro do arquivo [Link], defina a estrutura do seu banco de dados. Você precisa definir
um modelo para a tabela de tarefas.
// [Link]
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model Task {
id Int @id @default(autoincrement())
descricao String
finalizado Boolean
}
Passo 3: Migre e Implante as Migrações
1. Execute o comando a seguir para criar uma nova migração:
npx prisma migrate dev --name init
2. Isso criará um arquivo de migração na pasta prisma/migrations. Para aplicar as
migrações ao banco de dados, execute:
npx prisma migrate deploy
Passo 4: Definir a Classe Task
Crie um novo arquivo chamado [Link] dentro da pasta models com o seguinte conteúdo:
// models/[Link]
class Task {
constructor(id, descricao, finalizado) {
[Link] = id;
[Link] = descricao;
[Link] = finalizado;
}
}
[Link] = Task;
Passo 5: Criar o Repositório do Prisma
Crie um repositório chamado [Link] que utilize o Prisma para realizar operações
CRUD.
// repositories/[Link]
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
class TaskRepository {
async getAllTasks() {
return await [Link]();
}
async getTaskById(id) {
return await [Link]({
where: {
id: parseInt(id),
},
});
}
async createTask(data) {
return await [Link]({
data,
});
}
async updateTask(id, data) {
return await [Link]({
where: {
id: parseInt(id),
},
data,
});
}
async deleteTask(id) {
return await [Link]({
where: {
id: parseInt(id),
},
});
}
}
[Link] = new TaskRepository();
Passo 6: Atualizar o Controlador para Usar o Prisma
Agora, atualize o controlador [Link] para usar o repositório taskRepository em
vez do modelo antigo.
// controllers/[Link]
const taskRepository = require('../repositories/taskRepository');
[Link] = {
pageCreate: (req, res) => {
[Link]('createTask', { message: null });
},
pageRead: async (req, res) => {
const tasks = await [Link]();
[Link]('tasks', { tasks, message: null });
},
pageUpdate: async (req, res) => {
const id = parseInt([Link]);
const task = await [Link](id);
[Link]('editTask', { task, message: null });
},
pageDelete: async (req, res) => {
const id = parseInt([Link]);
const task = await [Link](id);
[Link]('deleteTask', { task, message: null });
},
getAll: async (req, res) => {
const tasks = await [Link]();
[Link](tasks);
},
getById: async (req, res) => {
const id = parseInt([Link]);
const task = await [Link](id);
[Link](task);
},
create: async (req, res) => {
const { descricao, finalizado } = [Link];
await [Link]({
descricao,
finalizado,
});
[Link]({ message: "Task criada com sucesso" });
},
update: async (req, res) => {
const id = parseInt([Link]);
const { descricao, finalizado } = [Link];
await [Link](id, {
descricao,
finalizado,
});
[Link]({ message: "Task atualizada com sucesso" });
},
delete: async (req, res) => {
const id = parseInt([Link]);
await [Link](id);
[Link]({ message: "Task deletada com sucesso" });
}
};
Passo 7: Utilizar as Rotas para Interação com o Banco de Dados
Por fim, você pode utilizar as rotas existentes para interagir com o banco de dados utilizando o
Prisma.
// [Link]
const express = require('express');
const bodyParser = require('body-parser');
const taskController = require('./controllers/taskController');
const app = express();
[Link]([Link]());
[Link]([Link]({ extended: true }));
// Rotas para manipulação de tarefas
[Link]('/tasks', [Link]);
[Link]('/tasks/:id', [Link]);
[Link]('/tasks', [Link]);
[Link]('/tasks/:id', [Link]);
[Link]('/tasks/:id', [Link]);
// Inicie o servidor
[Link](3000, () => {
[Link]('Servidor rodando na porta 3000...');
});
Certifique-se de testar cuidadosamente todas as operações CRUD para garantir que tudo funcione
conforme esperado.