Skip to content

Commit 5e9dadb

Browse files
committed
integrated lab backend
1 parent cee84d2 commit 5e9dadb

File tree

6 files changed

+392
-359
lines changed

6 files changed

+392
-359
lines changed
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
const sql = require('mssql');
2+
3+
// Get all lab tests
4+
const getAllTests = async (req, res) => {
5+
try {
6+
const request = new sql.Request();
7+
const result = await request.query(`
8+
SELECT
9+
t.test_id,
10+
p.patient_id,
11+
p.full_name AS patientName,
12+
p.date_of_birth,
13+
p.gender,
14+
p.contact_info,
15+
p.registration_date,
16+
t.test_name,
17+
t.result,
18+
t.test_date
19+
FROM LabTests t
20+
JOIN Patients p ON t.patient_id = p.patient_id
21+
`);
22+
23+
res.json(result.recordset);
24+
} catch (err) {
25+
console.error('Database error:', err);
26+
res.status(500).json({ message: 'Error fetching lab tests', error: err.message });
27+
}
28+
};
29+
30+
// Get test by ID
31+
const getTestById = async (req, res) => {
32+
const { id } = req.params;
33+
34+
try {
35+
const request = new sql.Request();
36+
request.input('id', sql.Int, id);
37+
38+
const result = await request.query(`
39+
SELECT
40+
t.test_id,
41+
p.patient_id,
42+
p.full_name AS patientName,
43+
p.date_of_birth,
44+
p.gender,
45+
p.contact_info,
46+
p.registration_date,
47+
t.test_name,
48+
t.result,
49+
t.test_date
50+
FROM LabTests t
51+
JOIN Patients p ON t.patient_id = p.patient_id
52+
WHERE t.test_id = @id
53+
`);
54+
55+
if (result.recordset.length === 0) {
56+
return res.status(404).json({ message: 'Test not found' });
57+
}
58+
59+
res.json(result.recordset[0]);
60+
} catch (err) {
61+
console.error('Database error:', err);
62+
res.status(500).json({ message: 'Error fetching test details', error: err.message });
63+
}
64+
};
65+
66+
// Create new test
67+
const createTest = async (req, res) => {
68+
const {
69+
patient_id,
70+
test_name,
71+
result = null
72+
} = req.body;
73+
74+
try {
75+
const request = new sql.Request();
76+
request.input('patient_id', sql.Int, patient_id);
77+
request.input('test_name', sql.VarChar(100), test_name);
78+
request.input('result', sql.Text, result);
79+
80+
const testResult = await request.query(`
81+
INSERT INTO LabTests (
82+
patient_id, test_name, result, test_date
83+
)
84+
OUTPUT INSERTED.test_id
85+
VALUES (
86+
@patient_id, @test_name, @result, GETDATE()
87+
)
88+
`);
89+
90+
const testId = testResult.recordset[0].test_id;
91+
92+
res.status(201).json({
93+
message: 'Lab test created successfully',
94+
testId: testId
95+
});
96+
} catch (err) {
97+
console.error('Database error:', err);
98+
res.status(500).json({ message: 'Error creating lab test', error: err.message });
99+
}
100+
};
101+
102+
// Update test
103+
const updateTest = async (req, res) => {
104+
const { id } = req.params;
105+
const {
106+
test_name,
107+
result
108+
} = req.body;
109+
110+
try {
111+
const request = new sql.Request();
112+
request.input('id', sql.Int, id);
113+
request.input('test_name', sql.VarChar(100), test_name);
114+
request.input('result', sql.Text, result);
115+
116+
await request.query(`
117+
UPDATE LabTests
118+
SET test_name = @test_name,
119+
result = @result
120+
WHERE test_id = @id
121+
`);
122+
123+
res.json({ message: 'Lab test updated successfully' });
124+
} catch (err) {
125+
console.error('Database error:', err);
126+
res.status(500).json({ message: 'Error updating lab test', error: err.message });
127+
}
128+
};
129+
130+
// Delete test
131+
const deleteTest = async (req, res) => {
132+
const { id } = req.params;
133+
134+
try {
135+
const request = new sql.Request();
136+
request.input('id', sql.Int, id);
137+
138+
await request.query(`
139+
DELETE FROM LabTests
140+
WHERE test_id = @id
141+
`);
142+
143+
res.json({ message: 'Lab test deleted successfully' });
144+
} catch (err) {
145+
console.error('Database error:', err);
146+
res.status(500).json({ message: 'Error deleting lab test', error: err.message });
147+
}
148+
};
149+
150+
// Get tests by status (Note: status field removed in simplified schema)
151+
const getTestsByStatus = async (req, res) => {
152+
res.status(501).json({ message: 'Status filtering not implemented in simplified schema' });
153+
};
154+
155+
// Get tests by patient ID
156+
const getTestsByPatient = async (req, res) => {
157+
const { patientId } = req.params;
158+
159+
try {
160+
const request = new sql.Request();
161+
request.input('patientId', sql.Int, patientId);
162+
163+
const result = await request.query(`
164+
SELECT
165+
t.test_id,
166+
t.test_name,
167+
t.result,
168+
t.test_date
169+
FROM LabTests t
170+
WHERE t.patient_id = @patientId
171+
`);
172+
173+
res.json(result.recordset);
174+
} catch (err) {
175+
console.error('Database error:', err);
176+
res.status(500).json({ message: 'Error fetching patient lab tests', error: err.message });
177+
}
178+
};
179+
180+
module.exports = {
181+
getAllTests,
182+
getTestById,
183+
createTest,
184+
updateTest,
185+
deleteTest,
186+
getTestsByStatus,
187+
getTestsByPatient
188+
};

back_end/routes/lab_routes.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const express = require('express');
2+
const {
3+
getAllTests,
4+
getTestById,
5+
createTest,
6+
updateTest,
7+
deleteTest,
8+
getTestsByStatus,
9+
getTestsByPatient
10+
} = require('../controller/labController');
11+
12+
const router = express.Router();
13+
14+
router.get('/', getAllTests); // GET all tests
15+
router.get('/:id', getTestById); // GET test by ID
16+
router.post('/', createTest); // CREATE a new test
17+
router.put('/:id', updateTest); // UPDATE a test
18+
router.delete('/:id', deleteTest); // DELETE a test
19+
router.get('/status/:status', getTestsByStatus); // GET tests by status
20+
router.get('/patient/:patientId', getTestsByPatient); // GET tests by patient ID
21+
22+
module.exports = router;

back_end/server.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ app.use(cors());
99
app.use(express.json());
1010

1111
const pharmacyRoutes = require('./routes/pharmacy_routes');
12+
const labRoutes = require('./routes/lab_routes');
13+
1214
app.use('/api/pharmacy', pharmacyRoutes);
15+
app.use('/api/lab', labRoutes);
1316

1417
app.get('/', (req, res) => {
15-
res.send("🚀 Healvista Pharmacy Backend Running");
18+
res.send("🚀 Healvista Backend Running");
1619
});
1720

1821
const PORT = process.env.PORT || 5000;

front_end/package-lock.json

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

front_end/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"@testing-library/jest-dom": "^6.6.3",
88
"@testing-library/react": "^16.3.0",
99
"@testing-library/user-event": "^13.5.0",
10+
"axios": "^1.9.0",
1011
"lucide-react": "^0.507.0",
1112
"react": "^19.1.0",
1213
"react-dom": "^19.1.0",

0 commit comments

Comments
 (0)