Skip to content

Commit 705629d

Browse files
committed
feat: retornar 404 quando não encontrar o usuario
1 parent b442e1d commit 705629d

File tree

4 files changed

+101
-43
lines changed

4 files changed

+101
-43
lines changed

src/controllers/user.ts

+39-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import { Body, Controller, Get, Post, Response, Route, Security } from 'tsoa'
22
import { getRankService } from '../services/rank'
3-
import { checkForSuspiciousActivity, getDatabaseUserById, getDatabaseUsers, softDeleteUserById } from '../services/user'
3+
import {
4+
checkForSuspiciousActivity,
5+
getDatabaseUserById,
6+
getDatabaseUsers,
7+
softDeleteUserById
8+
} from '../services/user'
49
import {
510
ErrorResponseModel,
611
RankRequestResult,
712
RequestResult,
813
SoftDeleteResult,
9-
User
14+
User,
15+
UserResponse
1016
} from '../types'
1117

1218
@Route('/user')
@@ -36,12 +42,34 @@ export class UserController extends Controller {
3642
})
3743
@Security('api_key')
3844
@Get('{userId}')
39-
public async getUser(userId: string): Promise<User> {
45+
public async getUser(userId: string): Promise<UserResponse> {
4046
try {
4147
const user = await getDatabaseUserById(userId)
42-
return user
48+
49+
if (!user) {
50+
this.setStatus(404)
51+
return {
52+
success: false,
53+
message: 'User not found',
54+
statusCode: 404
55+
}
56+
}
57+
58+
return {
59+
success: true,
60+
message: 'User found',
61+
statusCode: 200,
62+
user
63+
}
4364
} catch (error) {
65+
this.setStatus(500)
4466
console.log(error)
67+
68+
return {
69+
success: false,
70+
statusCode: 500,
71+
message: 'An error occurred while searching the user'
72+
}
4573
}
4674
}
4775

@@ -68,14 +96,19 @@ export class UserController extends Controller {
6896
})
6997
@Security('api_key')
7098
@Post('/susp/softdelete')
71-
public async softDeleteUser(@Body() body: { userId: string }): Promise<SoftDeleteResult> {
99+
public async softDeleteUser(
100+
@Body() body: { userId: string }
101+
): Promise<SoftDeleteResult> {
72102
try {
73103
const { userId } = body
74104
const result = await softDeleteUserById(userId)
75105
return result
76106
} catch (error) {
77107
console.log(error)
78-
return { success: false, message: 'An error occurred while soft deleting the user' }
108+
return {
109+
success: false,
110+
message: 'An error occurred while soft deleting the user'
111+
}
79112
}
80113
}
81114
}

src/routes/user.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ router.get(
2727
const { userId } = request?.params
2828
const controller = new UserController()
2929
const user = await controller.getUser(userId)
30-
return response.send(user)
30+
return response.status(user.statusCode || 200).send(user)
3131
} catch (error) {
3232
next(error)
3333
}

src/services/user.ts

+54-36
Original file line numberDiff line numberDiff line change
@@ -48,45 +48,54 @@ export async function getDatabaseUsers(): Promise<User[]> {
4848
export async function checkForSuspiciousActivity(): Promise<any[]> {
4949
try {
5050
const users = await getUsersFromMongo({ softDeleted: { $ne: true } })
51-
const suspiciousUsers = users.filter(user => {
52-
if (user.tokens.length < 10) return false
51+
const suspiciousUsers = users
52+
.filter((user) => {
53+
if (user.tokens.length < 10) return false
5354

54-
const sortedTokens = user.tokens.sort((a, b) =>
55-
DateTime.fromISO(b.claimedAt).toMillis() - DateTime.fromISO(a.claimedAt).toMillis()
56-
)
55+
const sortedTokens = user.tokens.sort(
56+
(a, b) =>
57+
DateTime.fromISO(b.claimedAt).toMillis() -
58+
DateTime.fromISO(a.claimedAt).toMillis()
59+
)
5760

58-
let consecutiveQuickClaims = 0
59-
let suspiciousTokens = []
60-
for (let i = 1; i < sortedTokens.length; i++) {
61-
const timeDiff = DateTime.fromISO(sortedTokens[i - 1].claimedAt).diff(
62-
DateTime.fromISO(sortedTokens[i].claimedAt), 'seconds'
63-
).seconds
61+
let consecutiveQuickClaims = 0
62+
let suspiciousTokens = []
63+
for (let i = 1; i < sortedTokens.length; i++) {
64+
const timeDiff = DateTime.fromISO(sortedTokens[i - 1].claimedAt).diff(
65+
DateTime.fromISO(sortedTokens[i].claimedAt),
66+
'seconds'
67+
).seconds
6468

65-
if (timeDiff < 5) {
66-
consecutiveQuickClaims++
67-
suspiciousTokens.push(sortedTokens[i])
68-
if (consecutiveQuickClaims >= 9) {
69-
suspiciousTokens.push(sortedTokens[i - 1]) // Add the 10th token
70-
return true
69+
if (timeDiff < 5) {
70+
consecutiveQuickClaims++
71+
suspiciousTokens.push(sortedTokens[i])
72+
if (consecutiveQuickClaims >= 9) {
73+
suspiciousTokens.push(sortedTokens[i - 1]) // Add the 10th token
74+
return true
75+
}
76+
} else {
77+
consecutiveQuickClaims = 0
78+
suspiciousTokens = []
7179
}
72-
} else {
73-
consecutiveQuickClaims = 0
74-
suspiciousTokens = []
7580
}
76-
}
7781

78-
return false
79-
}).map(user => ({
80-
userId: user.userId,
81-
score: user.score,
82-
suspiciousTokens: user.tokens
83-
.sort((a, b) => DateTime.fromISO(b.claimedAt).toMillis() - DateTime.fromISO(a.claimedAt).toMillis())
84-
.slice(0, 10)
85-
.map(token => ({
86-
code: token.code,
87-
claimedAt: token.claimedAt
88-
}))
89-
}))
82+
return false
83+
})
84+
.map((user) => ({
85+
userId: user.userId,
86+
score: user.score,
87+
suspiciousTokens: user.tokens
88+
.sort(
89+
(a, b) =>
90+
DateTime.fromISO(b.claimedAt).toMillis() -
91+
DateTime.fromISO(a.claimedAt).toMillis()
92+
)
93+
.slice(0, 10)
94+
.map((token) => ({
95+
code: token.code,
96+
claimedAt: token.claimedAt
97+
}))
98+
}))
9099

91100
return suspiciousUsers
92101
} catch (error) {
@@ -95,15 +104,24 @@ export async function checkForSuspiciousActivity(): Promise<any[]> {
95104
}
96105
}
97106

98-
export async function softDeleteUserById(userId: string): Promise<SoftDeleteResult> {
107+
export async function softDeleteUserById(
108+
userId: string
109+
): Promise<SoftDeleteResult> {
99110
try {
100111
const user = await softDeleteUser(userId)
101112
if (!user) {
102113
return { success: false, message: `User ${userId} not found` }
103114
}
104-
return { success: true, message: `User ${userId} has been soft deleted`, user }
115+
return {
116+
success: true,
117+
message: `User ${userId} has been soft deleted`,
118+
user
119+
}
105120
} catch (error) {
106121
console.log(`Error soft deleting user ${userId}:`, error)
107-
return { success: false, message: 'An error occurred while soft deleting the user' }
122+
return {
123+
success: false,
124+
message: 'An error occurred while soft deleting the user'
125+
}
108126
}
109127
}

src/types.ts

+7
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,10 @@ export interface SoftDeleteResult {
122122
message: string
123123
user?: User
124124
}
125+
126+
export interface UserResponse {
127+
success: boolean
128+
message: string
129+
statusCode?: number
130+
user?: User
131+
}

0 commit comments

Comments
 (0)