update swagger for api

This commit is contained in:
root
2026-05-26 18:19:56 -04:00
parent 797e01eece
commit 8b3eb588f2
5 changed files with 1228 additions and 10 deletions
+4 -1
View File
@@ -41,8 +41,10 @@
"react-dom": "^18.3.1",
"resend": "^3.2.0",
"socket.io": "^4.7.5",
"swagger-ui-express": "^5.0.1",
"twilio": "^5.1.0",
"zod": "^3.23.0"
"zod": "^3.23.0",
"zod-to-json-schema": "^3.25.2"
},
"devDependencies": {
"@types/bcryptjs": "^2.4.6",
@@ -58,6 +60,7 @@
"@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0",
"@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "^4.1.8",
"supertest": "^7.0.0",
"ts-node-dev": "^2.0.0",
"typescript": "^5.4.0",
+14 -8
View File
@@ -2,6 +2,8 @@ import express from 'express'
import cors from 'cors'
import helmet from 'helmet'
import morgan from 'morgan'
import swaggerUi from 'swagger-ui-express'
import { openApiDocument } from './swagger/openapi'
import { getLegacyStorageRoots, getStorageRoot } from './lib/storage'
import { authLimiter, apiLimiter, publicLimiter, adminLimiter } from './middleware/rateLimiter'
@@ -100,6 +102,10 @@ export function createApp() {
app.use('/storage', express.static(legacyRoot))
}
// Swagger UI — mounted before helmet so its assets are not blocked by CSP
app.use('/docs', swaggerUi.serve, swaggerUi.setup(openApiDocument, { customSiteTitle: 'RentalDriveGo API Docs' }))
app.get('/api/v1/openapi.json', (_req, res) => res.json(openApiDocument))
// Webhook must use raw body BEFORE express.json()
app.use('/api/v1/webhooks', express.raw({ type: 'application/json' }), webhookRouter)
@@ -141,14 +147,14 @@ export function createApp() {
})
app.get(`${v1}/docs`, (_req, res) => {
res.json({ name: 'rentaldrivego-api', version: '1.0.0', baseUrl: v1, docsUrl: '/docs', routes: routeDocs })
})
app.get('/docs', (_req, res) => {
const rows = routeDocs
.map((r) => `<tr><td>${r.method}</td><td><code>${r.path}</code></td><td>${r.description}</td></tr>`)
.join('')
res.type('html').send(`<!doctype html><html lang="en"><head><meta charset="utf-8"/><title>RentalDriveGo API Docs</title></head><body><h1>RentalDriveGo API</h1><table><thead><tr><th>Method</th><th>Path</th><th>Description</th></tr></thead><tbody>${rows}</tbody></table></body></html>`)
res.json({
name: 'rentaldrivego-api',
version: '1.0.0',
baseUrl: v1,
routes: routeDocs,
swaggerUi: '/docs',
openApi: '/api/v1/openapi.json',
})
})
// ─── Error handler ──────────────────────────────────────────
File diff suppressed because it is too large Load Diff
@@ -17,5 +17,14 @@ describe('GET /health', () => {
expect(res.status).toBe(200)
expect(res.body.name).toBe('rentaldrivego-api')
expect(Array.isArray(res.body.routes)).toBe(true)
expect(res.body.swaggerUi).toBe('/docs')
expect(res.body.openApi).toBe('/api/v1/openapi.json')
})
it('GET /api/v1/openapi.json returns the OpenAPI document', async () => {
const res = await request(app).get('/api/v1/openapi.json')
expect(res.status).toBe(200)
expect(res.body.openapi).toBe('3.0.3')
expect(res.body.info?.title).toBe('RentalDriveGo API')
})
})