12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import * as account from './account/api'
- import * as herd from './herd/api'
- import * as task from './task/api'
- import type { Context } from './types'
- import type { ErrorRequestHandler } from 'express'
- import express from 'express'
- import { http } from '@edge/misc-utils'
- /** Create an Express application. */
- function createExpress(ctx: Context) {
- // Initialize app with JSON and auth middleware
- const app = express()
- app.use(express.json())
- app.use(ctx.auth.verifyRequestMiddleware)
- const prefix = ctx.config.api.prefix
- // Account APIs
- app.post(`${prefix}/account`, account.createAccount(ctx))
- app.get(`${prefix}/account/:id?`, account.getAccount())
- app.put(`${prefix}/account/:id?`, account.updateAccount(ctx))
- app.delete(`${prefix}/account/:id?`, account.deleteAccount(ctx))
- // Herd APIs
- app.get(`${prefix}/herds`, herd.searchHerds(ctx))
- app.post(`${prefix}/herd`, herd.createHerd(ctx))
- app.get(`${prefix}/herd/:id`, herd.getHerd(ctx))
- app.put(`${prefix}/herd/:id`, herd.updateHerd(ctx))
- app.delete(`${prefix}/herd/:id`, herd.deleteHerd(ctx))
- // Task APIs
- app.get(`${prefix}/tasks`, task.searchTasks(ctx))
- app.get(`${prefix}/herd/:herd/tasks`, task.searchTasks(ctx))
- app.post(`${prefix}/task`, task.createTask(ctx))
- app.get(`${prefix}/task/:id`, task.getTask(ctx))
- app.put(`${prefix}/task/:id`, task.updateTask(ctx))
- app.delete(`${prefix}/task/:id`, task.deleteTask(ctx))
- // Task patch APIs
- app.patch(`${prefix}/task/:id/done`, task.toggleTaskDone(ctx))
- app.patch(`${prefix}/task/:id/move/:position`, task.moveTask(ctx))
- // Authentication APIs
- app.post(`${prefix}/login/account`, account.loginAccount(ctx))
- // Add middleware to handle any errors forwarded from previous handlers via `next(err)`
- const catchError: ErrorRequestHandler = (err, req, res, next) => {
- if (!res.headersSent) {
- http.internalServerError(res, next, { reason: (err as Error).message })
- }
- ctx.log.error(err)
- }
- app.use(catchError)
- // Add request logging middleware
- app.use((req, res, next) => {
- ctx.log.debug(`[${req.socket.remoteAddress}] ${req.method} ${req.url} ${res.statusCode}`)
- next()
- })
- return app
- }
- export default createExpress
|