Skip to content

Commit 9fde184

Browse files
authored
fix: error toasts for invalid meeting ids ml-275 (#319)
* fix: change project versions ml-131 * fix: package-lock was changed ml-211 * fix: pull main ml-211 * fix: update main ml-206 * fix: change package-lock.json ml-206 * fix: pull main branch ml-206 * fix: error toasts for invalid meeting ids ml-275 * fix: pull main ml-206 * fix: change variable naming ml-206 * fix: move validation to backend ml-275 * fix: pull main ml-275
1 parent ab6044a commit 9fde184

File tree

10 files changed

+57
-19
lines changed

10 files changed

+57
-19
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export {
22
meetingCreateValidationSchema,
3-
meetingIdValidationSchema,
3+
meetingIdRouteParameterValidationSchema,
44
meetingUpdateValidationSchema,
55
} from "@meetlytic/shared";

apps/backend/src/modules/meetings/meetings.controller.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
} from "./libs/types/types.js";
2121
import {
2222
meetingCreateValidationSchema,
23-
meetingIdValidationSchema,
23+
meetingIdRouteParameterValidationSchema,
2424
meetingUpdateValidationSchema,
2525
} from "./libs/validation-schemas/validation-schemas.js";
2626
import { type MeetingService } from "./meetings.service.js";
@@ -107,7 +107,10 @@ class MeetingsController extends BaseController {
107107
method: HTTPMethod.PATCH,
108108
path: MeetingsApiPath.$ID,
109109
preHandlers: [checkIfMeetingOwner(this.meetingService)],
110-
validation: { body: meetingUpdateValidationSchema },
110+
validation: {
111+
body: meetingUpdateValidationSchema,
112+
params: meetingIdRouteParameterValidationSchema,
113+
},
111114
});
112115

113116
this.addRoute({
@@ -116,7 +119,7 @@ class MeetingsController extends BaseController {
116119
path: MeetingsApiPath.$ID,
117120
preHandlers: [checkIfMeetingOwner(this.meetingService)],
118121
validation: {
119-
params: meetingIdValidationSchema,
122+
params: meetingIdRouteParameterValidationSchema,
120123
},
121124
});
122125

@@ -126,7 +129,7 @@ class MeetingsController extends BaseController {
126129
path: MeetingsApiPath.$ID,
127130
preHandlers: [checkIfMeetingOwner(this.meetingService)],
128131
validation: {
129-
params: meetingIdValidationSchema,
132+
params: meetingIdRouteParameterValidationSchema,
130133
},
131134
});
132135

@@ -140,18 +143,27 @@ class MeetingsController extends BaseController {
140143
method: HTTPMethod.GET,
141144
path: MeetingsApiPath.$ID_URL,
142145
preHandlers: [checkIfMeetingOwner(this.meetingService)],
146+
validation: {
147+
params: meetingIdRouteParameterValidationSchema,
148+
},
143149
});
144150
this.addRoute({
145151
handler: (options) =>
146152
this.findBySignedUrl(options as FindBySignedUrlOptions),
147153
method: HTTPMethod.GET,
148154
path: MeetingsApiPath.$ID_PUBLIC,
155+
validation: {
156+
params: meetingIdRouteParameterValidationSchema,
157+
},
149158
});
150159
this.addRoute({
151160
handler: (options) => this.stopRecording(options as StopRecordingOptions),
152161
method: HTTPMethod.DELETE,
153162
path: MeetingsApiPath.$ID_STOP_RECORDING,
154163
preHandlers: [checkIfMeetingOwner(this.meetingService)],
164+
validation: {
165+
params: meetingIdRouteParameterValidationSchema,
166+
},
155167
});
156168
this.addRoute({
157169
handler: (options) =>
@@ -161,12 +173,18 @@ class MeetingsController extends BaseController {
161173
method: HTTPMethod.GET,
162174
path: MeetingsApiPath.$ID_MEETING_TRANSCRIPTIONS,
163175
preHandlers: [checkIfMeetingOwner(this.meetingService)],
176+
validation: {
177+
params: meetingIdRouteParameterValidationSchema,
178+
},
164179
});
165180
this.addRoute({
166181
handler: (options) =>
167182
this.getTranscriptionsBySignedUrl(options as FindBySignedUrlOptions),
168183
method: HTTPMethod.GET,
169184
path: MeetingsApiPath.$ID_MEETING_TRANSCRIPTIONS_PUBLIC,
185+
validation: {
186+
params: meetingIdRouteParameterValidationSchema,
187+
},
170188
});
171189
}
172190

package-lock.json

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

packages/shared/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export {
8484
meetingCreateValidationSchema,
8585
MeetingErrorMessage,
8686
MeetingHost,
87-
meetingIdValidationSchema,
87+
meetingIdRouteParameterValidationSchema,
8888
MeetingsApiPath,
8989
MeetingStatus,
9090
MeetingTranscriptionErrorMessage,

packages/shared/src/modules/meetings/libs/enums/meeting-validation-message.enum.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import { MeetingValidationRule } from "./meeting-validation-rule.enum.js";
33
const MeetingValidationMessage = {
44
HOST_REQUIRE: "Host is required.",
55
HOST_WRONG: "This host isn't allowed.",
6+
MEETING_ID_MUST_BE_INTEGER: "Meeting ID must be an integer.",
7+
MEETING_ID_MUST_BE_NUMBER:
8+
"Invalid meeting ID format. Please enter a valid number.",
9+
MEETING_ID_MUST_BE_POSITIVE: "Meeting ID must be a positive number.",
10+
MEETING_ID_TOO_LARGE:
11+
"The meeting ID entered is invalid. Please check the ID and try again.",
612
MEETING_TITLE_MAXIMUM_LENGTH: `Meeting title must not exceed ${String(MeetingValidationRule.MEETING_TITLE_MAXIMUM_LENGTH)} characters`,
713
OWNER_REQUIRE: "Owner ID must be a positive number.",
814
STATUS_WRONG: "This status doesn't exist",

packages/shared/src/modules/meetings/libs/enums/meeting-validation-rule.enum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const MeetingValidationRule = {
2+
MEETING_ID_MAXIMUM_NUMBER: 2_147_483_647,
23
MEETING_TITLE_MAXIMUM_LENGTH: 25,
34
MINIMAL_HOST_LENGTH: 1,
45
MINIMAL_MEETING_ID_LENGTH: 1,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { z } from "zod";
2+
3+
import {
4+
MeetingValidationMessage,
5+
MeetingValidationRule,
6+
} from "../enums/enums.js";
7+
8+
const meetingIdRouteParameter = z.object({
9+
id: z.coerce
10+
.number({
11+
invalid_type_error: MeetingValidationMessage.MEETING_ID_MUST_BE_NUMBER,
12+
})
13+
.int(MeetingValidationMessage.MEETING_ID_MUST_BE_INTEGER)
14+
.positive(MeetingValidationMessage.MEETING_ID_MUST_BE_POSITIVE)
15+
.max(MeetingValidationRule.MEETING_ID_MAXIMUM_NUMBER, {
16+
message: MeetingValidationMessage.MEETING_ID_TOO_LARGE,
17+
}),
18+
});
19+
20+
export { meetingIdRouteParameter };

packages/shared/src/modules/meetings/libs/validation-schemas/meeting-id.validation-schema.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export { meetingCreate } from "./meeting-create.validation-schema.js";
2-
export { meetingId } from "./meeting-id.validation-schema.js";
2+
export { meetingIdRouteParameter } from "./meeting-id-route-parameter.validation-schema.js";
33
export { meetingUpdate } from "./meeting-update.validation-schema.js";

packages/shared/src/modules/meetings/meetings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ export {
2424
} from "./libs/types/types.js";
2525
export {
2626
meetingCreate as meetingCreateValidationSchema,
27-
meetingId as meetingIdValidationSchema,
27+
meetingIdRouteParameter as meetingIdRouteParameterValidationSchema,
2828
meetingUpdate as meetingUpdateValidationSchema,
2929
} from "./libs/validation-schemas/validation-schemas.js";

0 commit comments

Comments
 (0)