// src/services/userService.ts

// ...

	updatePassword: async (id: string | number, password: string) => {
    const [affectedRows, updatedUsers] = await User.update({
      password
    }, {
      where: { id },
      individualHooks: true,
      returning: true
    })

    return updatedUsers[0]
  },

// ...
// src/controllers/usersController.ts

import { Response } from 'express'
import { AuthenticatedRequest } from '../middlewares/auth'
import { userService } from '../services/user-service'

export const usersController = {

// ...

  // PUT /users/current/password
  updatePassword: async (req: AuthenticatedRequest, res: Response) => {
    const user = req.user
    const { currentPassword, newPassword } = req.body

    if (!user) {
      return res.status(401).json({ message: 'Não autorizado!' })
    }

    try {
      user.checkPassword(currentPassword, async (err, isSame) => {
        if (err) {
          return res.status(400).json({ message: err.message })
        }

        if (!isSame) {
          return res.status(400).json({ message: 'Senha incorreta' })
        }

        await userService.updatePassword(user.id, newPassword)
        return res.status(204).send()
      })
    } catch (err) {
      if (err instanceof Error) {
        return res.status(400).json({ message: err.message })
      }
    }
  }
}
// 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)
router.put('/users/current/password', ensureAuth, usersController.updatePassword)

// ...