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+ } ;
0 commit comments