Skip to content

Commit eb4a3c0

Browse files
feat: updated
1 parent a1cab7a commit eb4a3c0

File tree

8 files changed

+5567
-2730
lines changed

8 files changed

+5567
-2730
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
src/
66
├── adapters/
77
│ ├── controllers/
8-
│ │ ├── User/
9-
│ │ │ ├── __tests__/
10-
│ │ │ │ └── UserController.test.ts
11-
│ │ │ └── UserController.ts
8+
│ │ ├── __tests__/
9+
│ │ │ └── UserController.test.ts
10+
│ │ ├── UserController.ts
1211
│ │ └── index.ts
1312
│ ├── presenters/
1413
│ │ └── User/

package-lock.json

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

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"eslint-plugin-prettier": "^5.1.3",
3131
"express": "^4.19.2",
3232
"husky": "^9.0.11",
33+
"jest": "^29.7.0",
3334
"lint-staged": "^15.2.5",
3435
"mongoose": "^8.4.0",
3536
"nodemon": "^3.1.1",

src/adapters/controllers/UserController.ts

Lines changed: 133 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,32 @@ export default (app: Application, userService: UserService) => {
2222
* description: Mensagem de sucesso
2323
*/
2424
app.post('/api/users', async (req: Request, res: Response) => {
25-
try {
26-
const user = await userService.createUser(req.body)
27-
res.status(201).json(UserPresenter.toResponse(user))
28-
} catch (error) {
29-
res.status(500).json({ error: 'Internal Server Error' })
30-
}
25+
// try {
26+
// const user = await userService.createUser(req.body)
27+
// res.status(201).json({
28+
// Status: res.statusCode,
29+
// Message: 'User created successfully',
30+
// Endpoint: req.url,
31+
// Method: req.method,
32+
// Results: UserPresenter.toResponse(user)
33+
// })
34+
// } catch (error) {
35+
// res.status(500).json({
36+
// Status: res.statusCode,
37+
// Message: 'Internal Server Error',
38+
// Endpoint: req.url,
39+
// Method: req.method,
40+
// Results: error.message
41+
// })
42+
// }
43+
const user = await userService.createUser(req.body)
44+
res.status(201).json({
45+
Status: res.statusCode,
46+
Message: 'User created successfully',
47+
Endpoint: req.url,
48+
Method: req.method,
49+
Results: UserPresenter.toResponse(user)
50+
})
3151
})
3252

3353
/**
@@ -43,11 +63,29 @@ export default (app: Application, userService: UserService) => {
4363
try {
4464
const users = await userService.getUsers()
4565
if (!users || users.length === 0) {
46-
return res.status(404).json({ error: 'No users found' })
66+
return res.status(404).json({
67+
Status: res.statusCode,
68+
Message: 'No users found',
69+
Endpoint: req.url,
70+
Method: req.method,
71+
Results: users
72+
})
4773
}
48-
res.json(UserPresenter.toResponseArray(users))
74+
res.status(200).json({
75+
Status: res.statusCode,
76+
Message: 'Users found successfully',
77+
Endpoint: req.url,
78+
Method: req.method,
79+
Results: UserPresenter.toResponseArray(users)
80+
})
4981
} catch (error) {
50-
res.status(500).json({ error: 'Internal Server Error' })
82+
res.status(500).json({
83+
Status: res.statusCode,
84+
Message: 'Internal Server Error',
85+
Endpoint: req.url,
86+
Method: req.method,
87+
Results: error.message
88+
})
5189
}
5290
})
5391

@@ -68,16 +106,52 @@ export default (app: Application, userService: UserService) => {
68106
* description: Mensagem de sucesso
69107
*/
70108
app.get('/api/users/:id', async (req: Request, res: Response) => {
109+
// const { id } = req.params
110+
// try {
111+
// const user = await userService.getUserById(id)
112+
// if (!user) {
113+
// return res.status(404).json({
114+
// Status: res.statusCode,
115+
// Message: 'No users found',
116+
// Endpoint: req.url,
117+
// Method: req.method,
118+
// Results: user
119+
// })
120+
// }
121+
// res.status(200).json({
122+
// Status: res.statusCode,
123+
// Message: 'User found successfully',
124+
// Endpoint: req.url,
125+
// Method: req.method,
126+
// Results: UserPresenter.toResponse(user)
127+
// })
128+
// } catch (error) {
129+
// res.status(500).json({
130+
// Status: res.statusCode,
131+
// Message: 'Internal Server Error',
132+
// Endpoint: req.url,
133+
// Method: req.method,
134+
// Results: error.message
135+
// })
136+
// }
71137
const { id } = req.params
72-
try {
73-
const user = await userService.getUserById(id)
74-
if (!user) {
75-
return res.status(404).json({ error: 'User not found' })
76-
}
77-
res.json(UserPresenter.toResponse(user))
78-
} catch (error) {
79-
res.status(500).json({ error: 'Internal Server Error' })
138+
const user = await userService.getUserById(id)
139+
if (!user) {
140+
return res.status(404).json({
141+
Status: res.statusCode,
142+
Message: 'No users found',
143+
Endpoint: req.url,
144+
Method: req.method,
145+
Results: user
146+
})
80147
}
148+
res.status(200).json({
149+
Status: res.statusCode,
150+
Message: 'User found successfully',
151+
Endpoint: req.url,
152+
Method: req.method,
153+
Results: UserPresenter.toResponse(user)
154+
})
81155
})
82156

83157
/**
@@ -110,11 +184,29 @@ export default (app: Application, userService: UserService) => {
110184
try {
111185
const user = await userService.putUserById(id, req.body)
112186
if (!user) {
113-
return res.status(404).json({ error: 'User not found' })
187+
return res.status(404).json({
188+
Status: res.statusCode,
189+
Message: 'User not found',
190+
Endpoint: req.url,
191+
Method: req.method,
192+
Results: user
193+
})
114194
}
115-
res.json(UserPresenter.toResponse(req.body))
195+
res.status(201).json({
196+
Status: res.statusCode,
197+
Message: 'Users found successfully',
198+
Endpoint: req.url,
199+
Method: req.method,
200+
Results: UserPresenter.toResponse(req.body)
201+
})
116202
} catch (error) {
117-
res.status(500).json({ error: 'Internal Server Error' })
203+
res.status(500).json({
204+
Status: res.statusCode,
205+
Message: 'Internal Server Error',
206+
Endpoint: req.url,
207+
Method: req.method,
208+
Results: error.message
209+
})
118210
}
119211
})
120212

@@ -139,11 +231,29 @@ export default (app: Application, userService: UserService) => {
139231
try {
140232
const user = await userService.deleteUserById(id)
141233
if (!user) {
142-
return res.status(404).json({ error: 'User not found' })
234+
return res.status(404).json({
235+
Status: res.statusCode,
236+
Message: 'User not found',
237+
Endpoint: req.url,
238+
Method: req.method,
239+
Results: user
240+
})
143241
}
144-
res.json(UserPresenter.toResponse(user))
242+
res.status(201).json({
243+
Status: res.statusCode,
244+
Message: 'User deleted successfully',
245+
Endpoint: req.url,
246+
Method: req.method,
247+
Results: UserPresenter.toResponse(user)
248+
})
145249
} catch (error) {
146-
res.status(500).json({ error: 'Internal Server Error' })
250+
res.status(500).json({
251+
Status: res.statusCode,
252+
Message: 'Internal Server Error',
253+
Endpoint: req.url,
254+
Method: req.method,
255+
Results: error.message
256+
})
147257
}
148258
})
149259
}

src/frameworks/express/middlewares/.gitkeep

Whitespace-only changes.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import logger from '../../../shared/logger/logger'
2+
import { Request, Response, NextFunction } from 'express'
3+
4+
export function errorHandlerMiddleware(
5+
error: Error,
6+
req: Request,
7+
res: Response,
8+
next: NextFunction
9+
) {
10+
logger.error('Error caught by errorHandlerMiddleware:', error)
11+
12+
const statusCode = res.statusCode === 200 ? 500 : res.statusCode
13+
14+
res.status(statusCode).json({
15+
Status: statusCode,
16+
Message: error.message,
17+
Endpoint: req.url,
18+
Method: req.method,
19+
Results: null
20+
})
21+
}

src/frameworks/express/server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ import specs from '../../swagger'
55
import registerControllers from '../../adapters/controllers'
66
import { UserRepository } from '../../adapters/repositories/User/UserRepository'
77
import { customLogger } from '../../shared/logger/customLogger'
8+
import { errorHandlerMiddleware } from './middlewares/errorHandlerMiddleware'
89

910
const app: Application = express()
1011
const userRepository = new UserRepository()
11-
console.log('====================================')
12-
console.log('userRepository', userRepository)
13-
console.log('====================================')
1412

1513
app.use(customLogger)
1614

1715
app.use(cors())
1816
app.use(express.json())
1917
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs))
2018

19+
app.use(errorHandlerMiddleware)
20+
2121
/**
2222
* @swagger
2323
* /:
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { UserService } from '@/services/User/UserService'
2+
import { UserRepository } from '@/adapters/repositories/User/UserRepository'
3+
import { User } from '@/entities/User/User.entity'
4+
5+
jest.mock('@/adapters/repositories/User/UserRepository')
6+
7+
describe('UserService', () => {
8+
let userService: UserService
9+
let userRepository: jest.Mocked<UserRepository>
10+
11+
beforeEach(() => {
12+
userRepository = new UserRepository() as jest.Mocked<UserRepository>
13+
userService = new UserService(userRepository)
14+
})
15+
16+
it('should create a user', async () => {
17+
const user: User = { name: 'John Doe' }
18+
userRepository.createUser.mockResolvedValue(user)
19+
20+
const result = await userService.createUser(user)
21+
expect(result).toEqual(user)
22+
expect(userRepository.createUser).toHaveBeenCalledWith(user)
23+
})
24+
})

0 commit comments

Comments
 (0)