From b9982b626f8a20e001a5df4416473cf30bdceff3 Mon Sep 17 00:00:00 2001 From: Kevin Puig <119972216+k-puig@users.noreply.github.com> Date: Sat, 27 Sep 2025 13:20:15 -0400 Subject: [PATCH] Enable Scalar + OpenAPI spec for user posting --- concord-server/bun.lock | 3 +++ concord-server/package.json | 1 + concord-server/src/index.ts | 20 ++++++++++++++++++++ concord-server/src/routes/userRoutes.ts | 12 ++++++++++++ 4 files changed, 36 insertions(+) diff --git a/concord-server/bun.lock b/concord-server/bun.lock index dfe5a87..4a5362e 100644 --- a/concord-server/bun.lock +++ b/concord-server/bun.lock @@ -4,6 +4,7 @@ "": { "name": "concord-server", "dependencies": { + "@hono/standard-validator": "^0.1.5", "@hono/zod-validator": "^0.7.3", "@prisma/client": "^6.16.2", "@scalar/hono-api-reference": "^0.9.19", @@ -20,6 +21,8 @@ }, }, "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=="], "@prisma/client": ["@prisma/client@6.16.2", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-E00PxBcalMfYO/TWnXobBVUai6eW/g5OsifWQsQDzJYm7yaY+IRLo7ZLsaefi0QkTpxfuhFcQ/w180i6kX3iJw=="], diff --git a/concord-server/package.json b/concord-server/package.json index caea3cb..82af71b 100644 --- a/concord-server/package.json +++ b/concord-server/package.json @@ -4,6 +4,7 @@ "dev": "bun run --hot src/index.ts" }, "dependencies": { + "@hono/standard-validator": "^0.1.5", "@hono/zod-validator": "^0.7.3", "@prisma/client": "^6.16.2", "@scalar/hono-api-reference": "^0.9.19", diff --git a/concord-server/src/index.ts b/concord-server/src/index.ts index c26549d..92d2d99 100644 --- a/concord-server/src/index.ts +++ b/concord-server/src/index.ts @@ -3,6 +3,8 @@ import { cors } from "hono/cors"; import { Server as Engine } from "@socket.io/bun-engine"; import { Server } from "socket.io"; import routes from "./routes/index"; +import { Scalar } from "@scalar/hono-api-reference"; +import { openAPIRouteHandler } from "hono-openapi"; //initialize socket.io server const io = new Server(); @@ -50,4 +52,22 @@ app.use( 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; diff --git a/concord-server/src/routes/userRoutes.ts b/concord-server/src/routes/userRoutes.ts index f709e53..3d507a1 100644 --- a/concord-server/src/routes/userRoutes.ts +++ b/concord-server/src/routes/userRoutes.ts @@ -2,6 +2,7 @@ import { Hono } from "hono"; import { fetchAllUsers, fetchUserData, createNewUser } from "../controller/userController"; import { createUserSchema } from "../validators/userValidator"; import { zValidator } from "@hono/zod-validator"; +import { describeRoute, resolver } from "hono-openapi"; const actions = new Hono(); actions.get("user/:id", async (c) => { @@ -30,6 +31,17 @@ actions.get("user", async (c) => { actions.post( "user", + describeRoute({ + description: "Create a new user", + responses: { + 201: { + description: "Success", + content: { + 'application/json': { schema: resolver(createUserSchema) }, + }, + } + } + }), zValidator('json', createUserSchema), async (c) => { try {