// src/controllers/categoriesController.ts

import { Request, Response } from 'express'
import { Category } from '../models'

export const categoriesController = {
  index: async (req: Request, res: Response) => {
    const categories = await Category.findAll()
    return res.json(categories)
  }
}
// src/routes.ts

import express from 'express'
import { categoriesController } from './controllers/categoriesController'

const router = express.Router()

router.get('/categories', categoriesController.index)

export { router }
// src/server.ts

import express from 'express'
import { database } from './database'
import { router } from './routes'
import { adminJs, adminJsRouter } from './config/adminjs'

const app = express()

app.use(express.static('public'))

app.use(router)

app.use(adminJs.options.rootPath, adminJsRouter)

const PORT = process.env.port || 3000

app.listen(PORT, async () => {
  await database.authenticate().then(() => {
    console.log('DB connection successfull.')
  })

  console.log(`Server started successfuly at port ${PORT}.`)
})
// src/controllers/categoriesController.ts

// ...

  index: async (req: Request, res: Response) => {
    const categories = await Category.findAll({
      attributes: ['id', 'name', 'position'],
      order: [['position', 'ASC']]
    })

    return res.json(categories)
	}

// ...
// src/controllers/categoriesController.ts

// ...

	index: async (req: Request, res: Response) => {
    try {
      const categories = await Category.findAll({
        attributes: ['id', 'name', 'position'],
        order: [['position', 'ASC']]
      })
  
      return res.json(categories)
    } catch (err) {
      if (err instanceof Error) {
        return res.status(400).json({ message: err.message })
      }
    }
  }

// ...