Enable Scalar + OpenAPI spec for user posting

This commit is contained in:
Kevin Puig
2025-09-27 13:20:15 -04:00
parent 3d79c9cf4f
commit b9982b626f
4 changed files with 36 additions and 0 deletions

View File

@@ -4,6 +4,7 @@
"": { "": {
"name": "concord-server", "name": "concord-server",
"dependencies": { "dependencies": {
"@hono/standard-validator": "^0.1.5",
"@hono/zod-validator": "^0.7.3", "@hono/zod-validator": "^0.7.3",
"@prisma/client": "^6.16.2", "@prisma/client": "^6.16.2",
"@scalar/hono-api-reference": "^0.9.19", "@scalar/hono-api-reference": "^0.9.19",
@@ -20,6 +21,8 @@
}, },
}, },
"packages": { "packages": {
"@hono/standard-validator": ["@hono/standard-validator@0.1.5", "", { "peerDependencies": { "@standard-schema/spec": "1.0.0", "hono": ">=3.9.0" } }, "sha512-EIyZPPwkyLn6XKwFj5NBEWHXhXbgmnVh2ceIFo5GO7gKI9WmzTjPDKnppQB0KrqKeAkq3kpoW4SIbu5X1dgx3w=="],
"@hono/zod-validator": ["@hono/zod-validator@0.7.3", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-uYGdgVib3RlGD698WR5dVM0zB3UuPY5vHKXffGUbUh7r4xY+mFIhF3/v4AcQVLrU5CQdBso8BJr4wuVoCrjTuQ=="], "@hono/zod-validator": ["@hono/zod-validator@0.7.3", "", { "peerDependencies": { "hono": ">=3.9.0", "zod": "^3.25.0 || ^4.0.0" } }, "sha512-uYGdgVib3RlGD698WR5dVM0zB3UuPY5vHKXffGUbUh7r4xY+mFIhF3/v4AcQVLrU5CQdBso8BJr4wuVoCrjTuQ=="],
"@prisma/client": ["@prisma/client@6.16.2", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-E00PxBcalMfYO/TWnXobBVUai6eW/g5OsifWQsQDzJYm7yaY+IRLo7ZLsaefi0QkTpxfuhFcQ/w180i6kX3iJw=="], "@prisma/client": ["@prisma/client@6.16.2", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-E00PxBcalMfYO/TWnXobBVUai6eW/g5OsifWQsQDzJYm7yaY+IRLo7ZLsaefi0QkTpxfuhFcQ/w180i6kX3iJw=="],

View File

@@ -4,6 +4,7 @@
"dev": "bun run --hot src/index.ts" "dev": "bun run --hot src/index.ts"
}, },
"dependencies": { "dependencies": {
"@hono/standard-validator": "^0.1.5",
"@hono/zod-validator": "^0.7.3", "@hono/zod-validator": "^0.7.3",
"@prisma/client": "^6.16.2", "@prisma/client": "^6.16.2",
"@scalar/hono-api-reference": "^0.9.19", "@scalar/hono-api-reference": "^0.9.19",

View File

@@ -3,6 +3,8 @@ import { cors } from "hono/cors";
import { Server as Engine } from "@socket.io/bun-engine"; import { Server as Engine } from "@socket.io/bun-engine";
import { Server } from "socket.io"; import { Server } from "socket.io";
import routes from "./routes/index"; import routes from "./routes/index";
import { Scalar } from "@scalar/hono-api-reference";
import { openAPIRouteHandler } from "hono-openapi";
//initialize socket.io server //initialize socket.io server
const io = new Server(); const io = new Server();
@@ -50,4 +52,22 @@ app.use(
app.route("/api", routes); app.route("/api", routes);
app.get(
'/openapi',
openAPIRouteHandler(app, {
documentation: {
info: {
title: 'Hono API',
version: '1.0.0',
description: 'Greeting API',
},
servers: [
{ url: 'http://localhost:3000', description: 'Local Server' },
],
},
})
)
app.get('/scalar', Scalar({ url: '/openapi' }))
export default app; export default app;

View File

@@ -2,6 +2,7 @@ import { Hono } from "hono";
import { fetchAllUsers, fetchUserData, createNewUser } from "../controller/userController"; import { fetchAllUsers, fetchUserData, createNewUser } from "../controller/userController";
import { createUserSchema } from "../validators/userValidator"; import { createUserSchema } from "../validators/userValidator";
import { zValidator } from "@hono/zod-validator"; import { zValidator } from "@hono/zod-validator";
import { describeRoute, resolver } from "hono-openapi";
const actions = new Hono(); const actions = new Hono();
actions.get("user/:id", async (c) => { actions.get("user/:id", async (c) => {
@@ -30,6 +31,17 @@ actions.get("user", async (c) => {
actions.post( actions.post(
"user", "user",
describeRoute({
description: "Create a new user",
responses: {
201: {
description: "Success",
content: {
'application/json': { schema: resolver(createUserSchema) },
},
}
}
}),
zValidator('json', createUserSchema), zValidator('json', createUserSchema),
async (c) => { async (c) => {
try { try {