boring.tools-poc/apps/api/src/changelog/index.ts
Lars Hampe 808bf3f0ba
All checks were successful
Build and Push Docker Image / tests (push) Successful in 40s
Build and Push Docker Image / build (push) Successful in 1m48s
feat(api): add error logs
2024-10-11 11:49:39 +02:00

115 lines
3.0 KiB
TypeScript

import { logger } from '@boring.tools/logger'
import { OpenAPIHono } from '@hono/zod-openapi'
import { HTTPException } from 'hono/http-exception'
import type { Variables } from '..'
import { verifyAuthentication } from '../utils/authentication'
import ById from './byId'
import Create from './create'
import Delete from './delete'
import List from './list'
import Update from './update'
const app = new OpenAPIHono<{ Variables: Variables }>()
const changelog_logger = logger.child({ name: 'changelog' })
app.openapi(ById.route, async (c) => {
const userId = verifyAuthentication(c)
try {
const id = c.req.param('id')
const result = await ById.func({ userId, id })
return c.json(result, 200)
} catch (error) {
changelog_logger.error(error)
if (error instanceof HTTPException) {
return c.json({ message: error.message }, error.status)
}
return c.json({ message: 'An unexpected error occurred' }, 500)
}
})
app.openapi(List.route, async (c) => {
const userId = verifyAuthentication(c)
try {
const result = await List.func({ userId })
return c.json(result, 200)
} catch (error) {
changelog_logger.error(error)
if (error instanceof HTTPException) {
return c.json({ message: error.message }, error.status)
}
return c.json({ message: 'An unexpected error occurred' }, 500)
}
})
app.openapi(Create.route, async (c) => {
const userId = verifyAuthentication(c)
try {
const [result] = await Create.func({
userId,
payload: await c.req.json(),
})
return c.json(result, 201)
} catch (error) {
changelog_logger.error(error)
if (error instanceof HTTPException) {
return c.json({ message: error.message }, error.status)
}
return c.json({ message: 'An unexpected error occurred' }, 500)
}
})
app.openapi(Delete.route, async (c) => {
const userId = verifyAuthentication(c)
try {
const id = c.req.param('id')
const result = await Delete.func({ userId, id })
if (result.length === 0) {
return c.json({ message: 'Changelog not found' }, 404)
}
return c.json({ message: 'Changelog removed' })
} catch (error) {
changelog_logger.error(error)
if (error instanceof HTTPException) {
return c.json({ message: error.message }, error.status)
}
return c.json({ message: 'An unexpected error occurred' }, 500)
}
})
app.openapi(Update.route, async (c) => {
const userId = verifyAuthentication(c)
try {
const id = c.req.param('id')
if (!id) {
return c.json({ message: 'Changelog not found' }, 404)
}
const result = await Update.func({
userId,
payload: await c.req.json(),
id,
})
if (result.length === 0) {
return c.json({ message: 'Changelog not found' }, 404)
}
return c.json(result)
} catch (error) {
changelog_logger.error(error)
if (error instanceof HTTPException) {
return c.json({ message: error.message }, error.status)
}
return c.json({ message: 'An unexpected error occurred' }, 500)
}
})
export default app