Jul 22, 2024
node -v
e npm -v
.yarn
com npm install -g yarn
.version: '3'
services:
db_postgres_evento:
image: postgres:alpine
ports:
- '5435:5432'
environment:
POSTGRES_USER: 'pguser'
POSTGRES_PASSWORD: 'pgpassword'
POSTGRES_DB: 'mydb'
volumes:
- './db_data:/var/lib/postgresql/data'
docker-compose up -d
-d
para rodar em segundo plano.docker ps
.yarn init -y
yarn add express cors dotenv prisma @prisma/client nodemon sucrase bcrypt yup
yarn prisma init
.env
:
DATABASE_URL='postgresql://pguser:pgpassword@localhost:5435/mydb'
prisma/schema.prisma
:
model User {
id Int @id @default(autoincrement())
name String
email String @unique
password String
phone String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
yarn prisma migrate dev --name init
import express from 'express';
import cors from 'cors';
import dotenv from 'dotenv';
dotenv.config();
const app = express();
app.use(cors());
app.use(express.json());
app.use(require('./routes'));
app.listen(3001, () => console.log('Servidor iniciou'));
package.json
:
"scripts": {
"start": "nodemon src/index.js --exec 'node -r sucrase/register'"
}
// src/repositories/user.repository.js
import { prisma } from '../services/prisma';
export const createUser = async (data) => {
const user = await prisma.user.create({ data });
return user;
};
// src/controllers/user.controller.js
import { createUser } from '../repositories/user.repository';
import bcrypt from 'bcrypt';
export const create = async (req, res) => {
const hashPassword = await bcrypt.hash(req.body.password, 10);
req.body.password = hashPassword;
const user = await createUser(req.body);
res.status(201).json(user);
};
// src/routes/index.js
import { Router } from 'express';
import { create } from '../controllers/user.controller';
const routes = Router();
routes.post('/users', create);
export default routes;
// src/repositories/user.repository.js
export const getAllUsers = async () => {
return await prisma.user.findMany();
};
// src/controllers/user.controller.js
import { getAllUsers } from '../repositories/user.repository';
export const findAll = async (req, res) => {
const users = await getAllUsers();
res.json(users);
};
// src/routes/index.js
routes.get('/users', findAll);
// src/repositories/user.repository.js
export const getUserById = async (id) => {
return await prisma.user.findUnique({ where: { id: Number(id) } });
};
// src/controllers/user.controller.js
import { getUserById } from '../repositories/user.repository';
export const findById = async (req, res) => {
const user = await getUserById(req.params.id);
res.json(user);
};
// src/routes/index.js
routes.get('/users/:id', findById);
// src/repositories/user.repository.js
export const updateUser = async (id, data) => {
return await prisma.user.update({ where: { id: Number(id) }, data });
};
// src/controllers/user.controller.js
import { updateUser } from '../repositories/user.repository';
export const update = async (req, res) => {
const user = await updateUser(req.params.id, req.body);
res.json(user);
};
// src/routes/index.js
routes.put('/users/:id', update);
// src/repositories/user.repository.js
export const deleteUser = async (id) => {
return await prisma.user.delete({ where: { id: Number(id) } });
};
// src/controllers/user.controller.js
import { deleteUser } from '../repositories/user.repository';
export const remove = async (req, res) => {
await deleteUser(req.params.id);
res.status(204).send();
};
// src/routes/index.js
routes.delete('/users/:id', remove);
user.Validations.js
:
import * as yup from 'yup';
export const userSchema = yup.object().shape({
name: yup.string().required(),
email: yup.string().email().required(),
password: yup.string().min(6).required(),
phone: yup.string().nullable(),
});
import { userSchema } from '../validations/user.validations';
export const create = async (req, res) => {
try {
await userSchema.validate(req.body, { abortEarly: false });
} catch (error) {
return res.status(400).json(error.errors);
}
const hashPassword = await bcrypt.hash(req.body.password, 10);
req.body.password = hashPassword;
const user = await createUser(req.body);
res.status(201).json(user);
};
Próximos Passos: