|
|
@@ -0,0 +1,49 @@
|
|
|
+import { createRoute, OpenAPIHono } from '@hono/zod-openapi'
|
|
|
+import { z } from 'zod'
|
|
|
+
|
|
|
+const app = new OpenAPIHono()
|
|
|
+
|
|
|
+const QuerySchema = z.object({
|
|
|
+ name: z.string().optional().openapi({
|
|
|
+ param: {
|
|
|
+ name: 'name',
|
|
|
+ in: 'query'
|
|
|
+ },
|
|
|
+ example: 'John'
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+const ResponseSchema = z.object({
|
|
|
+ message: z.string().openapi({
|
|
|
+ example: 'Hello from API, John'
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+const route = createRoute({
|
|
|
+ method: 'get',
|
|
|
+ path: '/',
|
|
|
+ request: {
|
|
|
+ query: QuerySchema
|
|
|
+ },
|
|
|
+ responses: {
|
|
|
+ 200: {
|
|
|
+ content: {
|
|
|
+ 'application/json': {
|
|
|
+ schema: ResponseSchema
|
|
|
+ }
|
|
|
+ },
|
|
|
+ description: 'Successful response'
|
|
|
+ },
|
|
|
+ 400: {
|
|
|
+ description: 'Invalid request'
|
|
|
+ }
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+app.openapi(route, (c) => {
|
|
|
+ const { name } = c.req.valid('query')
|
|
|
+ return c.json({ message: `Hello from API${name ? `, ${name}` : ''}` })
|
|
|
+})
|
|
|
+
|
|
|
+export default app
|
|
|
+export type BaseAppType = typeof app
|