Skip to content

Commit baf877d

Browse files
authored
Add backend routes for medications and reminders (#16)
* Create Medications and Reminders models * Fix server crashing when an error was thrown * Add reminders and medications routes
1 parent 4938c28 commit baf877d

25 files changed

+7464
-2587
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,8 @@ jobs:
5454
- name: Build backend
5555
run: npm run build
5656

57+
- name: Test backend
58+
run: npm run test
59+
5760
- name: Lint backend
5861
run: npm run lint

pill_mate/backend/eslint.config.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default tseslint.config(
1111
...tseslint.configs.recommended,
1212
importPlugin.flatConfigs.recommended,
1313
],
14-
files: ['**/*.{cjs,mjs,ts,tsx}'],
14+
files: ['**/*.{js,cjs,mjs,ts,tsx}'],
1515
languageOptions: {
1616
ecmaVersion: 2020,
1717
globals: globals.node,
@@ -27,6 +27,7 @@ export default tseslint.config(
2727
'import/order': 'error',
2828
'import/no-unresolved': 'off',
2929
'@typescript-eslint/no-require-imports': 'off',
30+
'@typescript-eslint/no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }],
3031
},
3132
},
3233
);

pill_mate/backend/jest.config.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* @type {import('ts-jest').JestConfigWithTsJest}
3+
*/
4+
module.exports = {
5+
testEnvironment: 'node',
6+
testPathIgnorePatterns: ['/node_modules', '/build'],
7+
transform: {
8+
'.ts$': ['ts-jest', {}],
9+
},
10+
};

pill_mate/backend/package-lock.json

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

pill_mate/backend/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"build": "tsc",
66
"start": "node build/index.js",
77
"lint": "eslint .",
8+
"test": "jest",
89
"swagger-generate": "swagger-jsdoc -d swagger.cjs src/**/*.ts",
910
"swagger-serve": "swagger-ui-watcher -c ./swagger-config.json swagger.json",
1011
"swagger": "npm run swagger-generate && npm run swagger-serve"
@@ -14,6 +15,7 @@
1415
"@types/express": "^5.0.0",
1516
"@types/morgan": "^1.9.9",
1617
"@types/node": "^22.13.5",
18+
"@types/sequelize": "^4.28.20",
1719
"@types/validator": "^13.12.2",
1820
"@types/ws": "^8.5.14",
1921
"dotenv": "^16.4.5",
@@ -29,11 +31,14 @@
2931
},
3032
"devDependencies": {
3133
"@eslint/js": "^9.16.0",
34+
"@types/jest": "^29.5.14",
3235
"@types/swagger-jsdoc": "^6.0.4",
3336
"eslint": "^9.16.0",
3437
"eslint-plugin-import": "^2.31.0",
38+
"jest": "^29.7.0",
3539
"swagger-jsdoc": "^6.2.8",
3640
"swagger-ui-watcher": "^2.1.14",
41+
"ts-jest": "^29.2.6",
3742
"typescript-eslint": "^8.18.0"
3843
}
3944
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
declare namespace Express {
1+
import { User } from '../models/User';
2+
3+
declare module 'express-serve-static-core' {
24
export interface Request {
35
homeAssistantUserId: string,
46
homeAssistantUserName: string,
57
homeAssistantUserDisplayName: string,
8+
user?: User,
69
}
710
}

pill_mate/backend/src/app.ts

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
import express, { Request, Response } from 'express';
1+
import express from 'express';
22
import morgan from 'morgan';
33

44
import { createLogger } from './logger';
5+
import medicationRoutes from './routes/medicationRoutes';
6+
import reminderRoutes from './routes/reminderRoutes';
57
import userRoutes from './routes/userRoutes';
6-
import { HTTP_400_BAD_REQUEST } from './status';
8+
import { homeAssistantHeaders } from './middlewares/homeAssistantHeaders';
9+
import { errorHandling } from './middlewares/errorHandling';
10+
import { applicationJson } from './middlewares/applicationJson';
711

812
const app = express();
913

@@ -15,39 +19,15 @@ app.use(morgan('dev', {
1519
},
1620
}));
1721

22+
app.use(applicationJson);
1823
app.use(express.json());
1924

20-
app.use((request: Request, response: Response, next) => {
21-
const homeAssistantUserId = request.get('x-remote-user-id');
22-
if (homeAssistantUserId === undefined) {
23-
response
24-
.status(HTTP_400_BAD_REQUEST)
25-
.json({ message: 'Missing required header: x-remote-user-id.' });
26-
return;
27-
}
28-
request.homeAssistantUserId = homeAssistantUserId;
29-
30-
const homeAssistantUserName = request.get('x-remote-user-name');
31-
if (homeAssistantUserName === undefined) {
32-
response
33-
.status(HTTP_400_BAD_REQUEST)
34-
.json({ message: 'Missing required header: x-remote-user-name.' });
35-
return;
36-
}
37-
request.homeAssistantUserName = homeAssistantUserName;
38-
39-
const homeAssistantUserDisplayName = request.get('x-remote-user-display-name');
40-
if (homeAssistantUserDisplayName === undefined) {
41-
response
42-
.status(HTTP_400_BAD_REQUEST)
43-
.json({ message: 'Missing required header: x-remote-user-display-name.' });
44-
return;
45-
}
46-
request.homeAssistantUserDisplayName = homeAssistantUserDisplayName;
47-
48-
next();
49-
});
25+
app.use(homeAssistantHeaders);
5026

27+
app.use('/medication', medicationRoutes);
28+
app.use('/reminder', reminderRoutes);
5129
app.use('/user', userRoutes);
5230

31+
app.use(errorHandling);
32+
5333
export default app;

0 commit comments

Comments
 (0)