Skip to content

Commit 3d10a03

Browse files
authored
Feat: drizzle postgres freds changes (#927)
* adjust device model to frontend schema but keep sensebox v1 models * enhance error handling and improve code consistency * add unconfirmed_email field to user model and update email handling logic * add additional `_id` to db query return (mongoDb default) * update boxes `PUT` requests and tests * small test and query adjustments
1 parent 18889f0 commit 3d10a03

18 files changed

Lines changed: 2263 additions & 296 deletions

File tree

packages/api/lib/controllers/usersController.js

Lines changed: 115 additions & 89 deletions
Large diffs are not rendered by default.

packages/api/lib/helpers/errorHandler.js

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,51 @@
1-
'use strict';
1+
"use strict";
22

3-
const restifyErrors = require('restify-errors');
3+
const restifyErrors = require("restify-errors");
44

5-
const restifyErrorNames = Object.keys(restifyErrors).filter(e => e.includes('Error') && e !== 'codeToHttpError');
5+
const restifyErrorNames = Object.keys(restifyErrors).filter(
6+
(e) => e.includes("Error") && e !== "codeToHttpError"
7+
);
68

79
const handleError = function (err) {
8-
if (err.name === 'ModelError') {
9-
if (err.data && err.data.type) {
10-
return Promise.reject(new restifyErrors[err.data.type](err.message));
10+
if (err.name === "ModelError") {
11+
const status = err.status || 400; // Ensure a fallback status
12+
13+
// Map `status` to a Restify error type
14+
switch (status) {
15+
case 400:
16+
return Promise.reject(new restifyErrors.BadRequestError(err.message));
17+
case 401:
18+
return Promise.reject(new restifyErrors.UnauthorizedError(err.message));
19+
case 403:
20+
return Promise.reject(new restifyErrors.ForbiddenError(err.message)); // ✅ Now properly handling 403
21+
case 404:
22+
return Promise.reject(new restifyErrors.NotFoundError(err.message));
23+
case 422:
24+
return Promise.reject(
25+
new restifyErrors.UnprocessableEntityError(err.message)
26+
);
27+
case 500:
28+
default:
29+
return Promise.reject(
30+
new restifyErrors.InternalServerError(err.message)
31+
);
1132
}
12-
13-
return Promise.reject(new restifyErrors.BadRequestError(err.message));
1433
}
1534

16-
if (err.name === 'ValidationError') {
17-
const msgs = [];
18-
for (const field in err.errors) {
19-
if (!err.errors[field].errors) {
20-
msgs.push(err.errors[field].message);
21-
}
22-
}
35+
if (err.name === "ValidationError") {
36+
const msgs = Object.keys(err.errors)
37+
.map((field) => err.errors[field].message)
38+
.join(", ");
2339

24-
return Promise.reject(new restifyErrors.UnprocessableEntityError(`Validation failed: ${msgs.join(', ')}`));
40+
return Promise.reject(
41+
new restifyErrors.UnprocessableEntityError(`Validation failed: ${msgs}`)
42+
);
2543
}
2644

2745
if (restifyErrorNames.includes(err.name)) {
2846
return Promise.reject(err);
2947
}
3048

31-
if (err.errors) {
32-
const msg = Object.keys(err.errors)
33-
.map(f => `${err.errors[f].message}`)
34-
.join(', ');
35-
36-
return Promise.reject(new restifyErrors.UnprocessableEntityError(msg));
37-
}
38-
3949
return Promise.reject(new restifyErrors.InternalServerError(err.message));
4050
};
4151

packages/api/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"Gerald Pape",
1010
"Norwin Roosen",
1111
"Umut Tas",
12-
"Felix Erdmann"
12+
"Felix Erdmann",
13+
"Frederick Bruch"
1314
],
1415
"dependencies": {
1516
"@paralleldrive/cuid2": "^2.2.2",
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
ALTER TYPE "model" ADD VALUE 'homeEthernet';--> statement-breakpoint
2+
ALTER TYPE "model" ADD VALUE 'homeWifi';--> statement-breakpoint
3+
ALTER TYPE "model" ADD VALUE 'homeLora';--> statement-breakpoint
4+
ALTER TYPE "model" ADD VALUE 'homeV2Lora';--> statement-breakpoint
5+
ALTER TYPE "model" ADD VALUE 'homeV2Ethernet';--> statement-breakpoint
6+
ALTER TYPE "model" ADD VALUE 'homeV2Wifi';--> statement-breakpoint
7+
ALTER TYPE "model" ADD VALUE 'senseBox:Edu';--> statement-breakpoint
8+
ALTER TYPE "model" ADD VALUE 'luftdaten.info';--> statement-breakpoint
9+
ALTER TYPE "model" ADD VALUE 'Custom';
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE "user" ADD COLUMN "unconfirmed_email" text;--> statement-breakpoint
2+
ALTER TABLE "user" ADD CONSTRAINT "user_unconfirmed_email_unique" UNIQUE("unconfirmed_email");

0 commit comments

Comments
 (0)