Skip to content

Commit e8fa421

Browse files
authored
Merge pull request #14 from Leroyalle/dev
integrate OpenAPI and Sclar for docs
2 parents 64be7b0 + fb4b45b commit e8fa421

23 files changed

Lines changed: 1355 additions & 686 deletions

bun.lock

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

commitlint.config.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ module.exports = {
1111
'subject-empty': [2, 'never'],
1212
'type-case': [2, 'always', 'lower-case'],
1313
'type-empty': [2, 'never'],
14-
'type-enum': [2, 'always', ['feat', 'fix', 'refactor', 'chore', 'docs']],
14+
'type-enum': [2, 'always', ['feat', 'fix', 'refactor', 'chore', 'docs', 'test']],
1515
},
1616
};

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111
},
1212
"dependencies": {
1313
"@faker-js/faker": "^10.3.0",
14+
"@hono/zod-openapi": "^1.2.2",
1415
"@hono/zod-validator": "^0.7.6",
1516
"@saintleroyalle/core": "^1.0.2",
17+
"@scalar/hono-api-reference": "^0.9.41",
1618
"arctic": "^3.7.0",
1719
"argon2": "^0.44.0",
1820
"bullmq": "^5.67.3",
1921
"dotenv": "^17.2.3",
2022
"drizzle-orm": "^0.45.1",
23+
"drizzle-zod": "^0.8.3",
2124
"grammy": "^1.39.3",
2225
"hono": "^4.11.7",
2326
"ioredis": "^5.9.2",

src/index.ts

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Hono } from 'hono';
1+
import { OpenAPIHono } from '@hono/zod-openapi';
2+
import { Scalar } from '@scalar/hono-api-reference';
23
import { cors } from 'hono/cors';
34

45
import { createMiddlewares } from './middlewares';
@@ -9,10 +10,46 @@ import { createCategoryRouter } from './modules/category/category.router';
910
import { createOrderRouter } from './modules/order/order.router';
1011
import { createProductRouter } from './modules/product/product.router';
1112
import { createUserRouter } from './modules/user/user.router';
13+
import { SECURITY_SCHEMES } from './shared/constants/security-schemes.constants';
1214
import { ERROR_HTTP_STATUS } from './shared/exceptions/error-status-map';
1315
import { resolveErrorCode } from './shared/exceptions/resolve-error-code';
1416

15-
const app = new Hono().basePath('/api');
17+
const app = new OpenAPIHono().basePath('/api');
18+
19+
app.openAPIRegistry.registerComponent('securitySchemes', SECURITY_SCHEMES.ACCESS_TOKEN_COOKIE, {
20+
type: 'apiKey',
21+
in: 'cookie',
22+
name: 'accessToken',
23+
});
24+
25+
app.openAPIRegistry.registerComponent('securitySchemes', SECURITY_SCHEMES.REFRESH_TOKEN_COOKIE, {
26+
type: 'apiKey',
27+
in: 'cookie',
28+
name: 'refreshToken',
29+
});
30+
31+
app.doc('/openapi.json', {
32+
openapi: '3.0.0',
33+
info: {
34+
title: 'Ecommerce Backend Starter',
35+
version: '1.0.0',
36+
},
37+
tags: [
38+
{ name: 'Auth', description: 'Авторизация и аутентификация' },
39+
{ name: 'Products', description: 'Работа с продуктами' },
40+
{ name: 'Categories', description: 'Работа с категориями' },
41+
{ name: 'Cart', description: 'Корзина пользователя' },
42+
{ name: 'Orders', description: 'Заказы пользователя' },
43+
{ name: 'Users', description: 'Работа с пользователями' },
44+
],
45+
});
46+
47+
app.get(
48+
'/docs',
49+
Scalar({
50+
url: '/api/openapi.json',
51+
}),
52+
);
1653

1754
app.use(
1855
'*',

0 commit comments

Comments
 (0)