Skip to content

Commit b688388

Browse files
committed
Set up swagger for api documentation
1 parent 8cc8d35 commit b688388

File tree

4 files changed

+244
-5
lines changed

4 files changed

+244
-5
lines changed

backend/user-service/app.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import express, { Request, Response, NextFunction } from "express";
22
import cors from "cors";
3+
import fs from "fs";
4+
import yaml from "yaml";
5+
import swaggerUi from "swagger-ui-express";
36

47
import userRoutes from "./routes/user-routes.js";
58
import authRoutes from "./routes/auth-routes.js";
69

10+
const file = fs.readFileSync("./swagger.yml", "utf-8");
11+
const swaggerDocument = yaml.parse(file);
12+
713
const app = express();
814

915
app.use(express.urlencoded({ extended: true }));
@@ -30,9 +36,9 @@ app.use((req: Request, res: Response, next: NextFunction) => {
3036
next();
3137
});
3238

33-
app.use("/users", userRoutes);
34-
app.use("/auth", authRoutes);
35-
39+
app.use("/api/users", userRoutes);
40+
app.use("/api/auth", authRoutes);
41+
app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument));
3642
app.get("/", (req: Request, res: Response, next: NextFunction) => {
3743
console.log("Sending Greetings!");
3844
res.json({

backend/user-service/package-lock.json

Lines changed: 48 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/user-service/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"@types/express": "^4.17.21",
2020
"@types/jsonwebtoken": "^9.0.7",
2121
"@types/node": "^22.5.5",
22+
"@types/swagger-ui-express": "^4.1.6",
2223
"@types/validator": "^13.12.2",
2324
"nodemon": "^3.1.4",
2425
"tsx": "^4.19.1",
@@ -32,6 +33,8 @@
3233
"express": "^4.19.2",
3334
"jsonwebtoken": "^9.0.2",
3435
"mongoose": "^8.5.4",
35-
"validator": "^13.12.0"
36+
"swagger-ui-express": "^5.0.1",
37+
"validator": "^13.12.0",
38+
"yaml": "^2.5.1"
3639
}
3740
}

backend/user-service/swagger.yml

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
openapi: 3.0.0
2+
3+
info:
4+
title: User Service
5+
version: 1.0.0
6+
7+
components:
8+
schemas:
9+
User:
10+
properties:
11+
username:
12+
type: string
13+
required: true
14+
firstName:
15+
type: string
16+
required: true
17+
lastName:
18+
type: string
19+
required: true
20+
email:
21+
type: string
22+
required: true
23+
isAdmin:
24+
type: boolean
25+
required: true
26+
default: false
27+
biography:
28+
type: string
29+
required: false
30+
profilePictureUrl:
31+
type: string
32+
required: false
33+
password:
34+
type: string
35+
required: true
36+
UserResponse:
37+
properties:
38+
id:
39+
type: string
40+
required: true
41+
username:
42+
type: string
43+
required: true
44+
firstName:
45+
type: string
46+
required: true
47+
lastName:
48+
type: string
49+
required: true
50+
email:
51+
type: string
52+
required: true
53+
isAdmin:
54+
type: boolean
55+
required: true
56+
default: false
57+
biography:
58+
type: string
59+
required: false
60+
profilePictureUrl:
61+
type: string
62+
required: false
63+
createdAt:
64+
type: string
65+
required: true
66+
ErrorResponse:
67+
properties:
68+
message:
69+
type: string
70+
71+
paths:
72+
/:
73+
get:
74+
tags:
75+
- root
76+
summary: Ping the server
77+
responses:
78+
200:
79+
description: Successful Response
80+
content:
81+
application/json:
82+
schema:
83+
type: object
84+
properties:
85+
message:
86+
type: string
87+
description: Message
88+
/api/users:
89+
post:
90+
tags:
91+
- users
92+
summary: Creates a new user
93+
requestBody:
94+
content:
95+
application/json:
96+
schema:
97+
$ref: "#/components/schemas/User"
98+
responses:
99+
201:
100+
description: Successful Response
101+
content:
102+
application/json:
103+
schema:
104+
$ref: "#/components/schemas/UserResponse"
105+
400:
106+
description: Bad Request
107+
content:
108+
application/json:
109+
schema:
110+
$ref: "#/components/schemas/ErrorResponse"
111+
409:
112+
description: Conflict
113+
content:
114+
application/json:
115+
schema:
116+
$ref: "#/components/schemas/ErrorResponse"
117+
get:
118+
tags:
119+
- users
120+
summary: Get all users
121+
responses:
122+
200:
123+
description: Successful Response
124+
content:
125+
application/json:
126+
schema:
127+
type: array
128+
items:
129+
$ref: "#/components/schemas/UserResponse"
130+
/api/users/{id}:
131+
get:
132+
summary: Get a user by id
133+
tags:
134+
- users
135+
parameters:
136+
- in: path
137+
name: id
138+
required: true
139+
schema:
140+
type: string
141+
responses:
142+
200:
143+
description: Successful Response
144+
content:
145+
application/json:
146+
schema:
147+
$ref: "#/components/schemas/UserResponse"
148+
404:
149+
description: Not Found
150+
content:
151+
application/json:
152+
schema:
153+
$ref: "#/components/schemas/ErrorResponse"
154+
patch:
155+
summary: Update a user's particulars
156+
tags:
157+
- users
158+
parameters:
159+
- in: path
160+
name: id
161+
required: true
162+
schema:
163+
type: string
164+
delete:
165+
summary: Delete a user account
166+
tags:
167+
- users
168+
parameters:
169+
- in: path
170+
name: id
171+
required: true
172+
schema:
173+
type: string
174+
/api/auth/login:
175+
post:
176+
summary: Login
177+
tags:
178+
- auth
179+
/api/auth/verify-token:
180+
get:
181+
summary: Verify token
182+
tags:
183+
- auth

0 commit comments

Comments
 (0)