- Vamos começar criando um método no serviço que servirá para atualizar um usuário no banco de dados a partir do seu id. Adicione o método com o código abaixo:
// src/services/userService.ts
import { User } from '../models'
import { EpisodeInstance } from '../models/episode'
import { UserCreationAttributes } from '../models/user'
// ...
export const userService = {
// ...
update: async (id: number, attributes: {
firstName: string
lastName: string
phone: string
birth: Date
email: string
}) => {
const [affectedRows, updatedUsers] = await User.update(attributes, { where: { id }, returning: true })
return updatedUsers[0]
},
// ...
}
- Com o método pronto podemos criar o método update no controlador:
// src/controllers/users-controller.ts
import { Response } from 'express'
import { AuthenticatedRequest } from '../middlewares/auth'
import { userService } from '../services/user-service'
const usersController = {
// ...
// PUT /users/current
update: async (req: AuthenticatedRequest, res: Response) => {
const { id } = req.user!
const { firstName, lastName, phone, email, birth } = req.body
try {
const updatedUser = await userService.update(id, {
firstName,
lastName,
phone,
email,
birth
})
return res.json(updatedUser)
} catch (err) {
if (err instanceof Error) {
return res.status(400).json({ message: err.message })
}
}
},
// ...
}
export { usersController }
- Agora basta criar a rota e incluir o método do controlador:
// src/routes.ts
// ...
router.get('/users/current', ensureAuth, usersController.show)
router.get('/users/current/watching', ensureAuth, usersController.watching)
router.put('/users/current', ensureAuth, usersController.update)
// ...