1+ import User from '../models/User.js' ;
2+ import bcrypt from 'bcrypt' ;
3+
4+ const createLabtechnician = async ( req , res ) => {
5+ try {
6+ const password = req . body . password || 'labtech@123' ;
7+ const hashedPassword = await bcrypt . hash ( password , 10 ) ;
8+
9+ const technician = new User ( {
10+ ...req . body ,
11+ password : hashedPassword ,
12+ role : 'lab-technician'
13+ } ) ;
14+
15+ await technician . save ( ) ;
16+ res . status ( 201 ) . json ( technician ) ;
17+ } catch ( err ) {
18+ res . status ( 400 ) . json ( { message : err . message } ) ;
19+ }
20+ } ;
21+
22+ const changePassword = async ( req , res ) => {
23+ try {
24+ const technician = await User . findById ( req . user . id ) ;
25+ const { oldPassword, newPassword } = req . body ;
26+
27+ const isMatch = await bcrypt . compare ( oldPassword , technician . password ) ;
28+ if ( ! isMatch ) return res . status ( 400 ) . json ( { message : 'Old password is incorrect' } ) ;
29+
30+ technician . password = await bcrypt . hash ( newPassword , 10 ) ;
31+ await technician . save ( ) ;
32+
33+ res . status ( 200 ) . json ( { message : 'Password updated successfully' } ) ;
34+ } catch ( err ) {
35+ res . status ( 500 ) . json ( { message : err . message } ) ;
36+ }
37+ } ;
38+
39+ const getLabtechnicians = async ( req , res ) => {
40+ try {
41+ const technician = await User . find ( { role : 'lab-technician' } ) ;
42+ res . json ( technician ) ;
43+ } catch ( err ) {
44+ res . status ( 500 ) . json ( { message : err . message } ) ;
45+ }
46+ } ;
47+
48+ const updateLabtechnician = async ( req , res ) => {
49+ try {
50+ const { id } = req . params ;
51+
52+ if ( req . body . password ) {
53+ req . body . password = await bcrypt . hash ( req . body . password , 10 ) ;
54+ }
55+
56+ const technician = await User . findOneAndUpdate (
57+ { _id : id , role : 'lab-technician' } ,
58+ req . body ,
59+ { new : true , runValidators : true }
60+ ) ;
61+
62+ if ( ! technician ) {
63+ return res . status ( 404 ) . json ( { message : 'Lab technician not found' } ) ;
64+ }
65+
66+ res . json ( technician ) ;
67+ } catch ( err ) {
68+ res . status ( 400 ) . json ( { message : err . message } ) ;
69+ }
70+ } ;
71+
72+ const deleteLabtechnician = async ( req , res ) => {
73+ try {
74+ const { id } = req . params ;
75+
76+ const technician = await User . findOneAndDelete ( { _id : id , role : 'lab-technician' } ) ;
77+
78+ if ( ! technician ) {
79+ return res . status ( 404 ) . json ( { message : 'Lab technician not found' } ) ;
80+ }
81+
82+ res . json ( { message : 'Lab technician deleted successfully' } ) ;
83+ } catch ( err ) {
84+ res . status ( 500 ) . json ( { message : err . message } ) ;
85+ }
86+ } ;
87+
88+ export {
89+ createLabtechnician ,
90+ changePassword ,
91+ getLabtechnicians ,
92+ updateLabtechnician ,
93+ deleteLabtechnician
94+ } ;
0 commit comments