// 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]
  },

	// ...
}
// 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 }
// 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)

// ...