Skip to content

Commit 10335d5

Browse files
feat: initialize frontend project with Angular dependencies and add global HTTP error interceptor
1 parent 2d4b008 commit 10335d5

2 files changed

Lines changed: 45 additions & 4 deletions

File tree

frontend/package.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,15 @@
3232
"flowbite": "^4.0.1",
3333
"jwt-decode": "^4.0.0",
3434
"rxjs": "^7.8.1"
35-
"rxjs": "^7.8.1"
3635
},
3736
"devDependencies": {
3837
"@analogjs/vite-plugin-angular": "^2.4.0",
3938
"@playwright/test": "^1.59.1",
4039
"@types/node": "^22.14.0",
4140
"autoprefixer": "^10.4.27",
42-
"autoprefixer": "^10.4.27",
4341
"flowbite": "^4.0.1",
4442
"jsdom": "^29.0.2",
4543
"postcss": "^8.5.9",
46-
"tailwindcss": "^3.4.19",
47-
"postcss": "^8.5.9",
4844
"tailwindcss": "^3.4.1",
4945
"typescript": "~5.8.2",
5046
"vite": "^6.2.0",
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { HttpErrorResponse, HttpInterceptorFn } from "@angular/common/http";
2+
import { inject } from "@angular/core";
3+
import { catchError, throwError } from "rxjs";
4+
import { ErrorService } from "@shared/services";
5+
6+
export const errorInterceptor: HttpInterceptorFn = (req, next) => {
7+
const errorService = inject(ErrorService);
8+
9+
return next(req).pipe(
10+
catchError((error: HttpErrorResponse) => {
11+
let message = "An unexpected error occurred";
12+
13+
if (error.error instanceof ErrorEvent) {
14+
// Client-side error
15+
message = `Client Error: ${error.error.message}`;
16+
} else {
17+
// Backend error
18+
if (error.status === 0) {
19+
message = "Network error. Please check your internet connection.";
20+
} else if (error.status === 400) {
21+
// Check for Veil/NestJS validation array
22+
if (Array.isArray(error.error.message)) {
23+
message = error.error.message.join("\n");
24+
} else if (typeof error.error.message === "string") {
25+
message = error.error.message;
26+
} else {
27+
message = "Bad Request";
28+
}
29+
} else if (error.status === 401) {
30+
message = "Unauthorized. Please login again.";
31+
} else if (error.status === 403) {
32+
message =
33+
"Forbidden. You do not have permission to access this resource.";
34+
} else if (error.status === 404) {
35+
message = "Resource not found.";
36+
} else if (error.status >= 500) {
37+
message = "Server error. Please try again later.";
38+
}
39+
}
40+
41+
errorService.showError(message, error.status);
42+
return throwError(() => error);
43+
}),
44+
);
45+
};

0 commit comments

Comments
 (0)