@@ -4,83 +4,126 @@ import logger from "../utils/logger.js";
44const prisma = prismaInstance ;
55
66
7- export const getUser = async ( req , res ) => {
8- try {
9- if ( ! req . query . id && ! req . query . email ) {
10- return res . status ( 400 ) . json ( {
11- message : "id or email query is required"
12- } ) ;
13- }
14-
15- // verify logged in user matches requested user
16- if ( ( req . query . id && req . user . id !== req . query . id ) || ( req . query . email && req . user . email !== req . query . email ) ) {
17- logger . warn ( `Attempted unauthorized access to user with id ${ req . query . id } or email ${ req . query . email } ` ) ;
18- return res . status ( 403 ) . json ( {
19- message : "You are not authorized to access this resource"
20- } ) ;
21- }
22-
23- const user = await prisma . user . findFirst ( {
24- where : {
25- OR : [
26- { id : req . query . id || '' } ,
27- { email : req . query . email || '' }
28- ]
29- } ,
30- include : {
31- projects : req . query . include ? true : false ,
32- applications : req . query . include ? true : false ,
33- } ,
34-
35- } ) ;
36-
37- if ( ! user ) {
38- return res . status ( 404 ) . json ( {
39- message : "User not found"
40- } ) ;
41- }
42-
43-
44- logger . info ( `User with id ${ req . query . id } retrieved` )
45- return res . status ( 200 ) . json ( user ) ;
46-
47-
48- } catch ( err ) {
49- logger . error ( err ) ;
50- res . status ( 500 ) . json ( {
51- message : "Something went wrong" ,
52- error : err
53- } ) ;
7+ export const getUser = async ( req , res ) => {
8+ try {
9+ if ( ! req . query . id && ! req . query . email ) {
10+ return res . status ( 400 ) . json ( {
11+ message : "id or email query is required"
12+ } ) ;
5413 }
14+
15+ // verify logged in user matches requested user
16+ if ( ( req . query . id && req . user . id !== req . query . id ) || ( req . query . email && req . user . email !== req . query . email ) ) {
17+ logger . warn ( `Attempted unauthorized access to user with id ${ req . query . id } or email ${ req . query . email } ` ) ;
18+ return res . status ( 403 ) . json ( {
19+ message : "You are not authorized to access this resource"
20+ } ) ;
21+ }
22+
23+ const user = await prisma . user . findFirst ( {
24+ where : {
25+ OR : [
26+ { id : req . query . id || '' } ,
27+ { email : req . query . email || '' }
28+ ]
29+ } ,
30+ include : {
31+ projects : req . query . include ? true : false ,
32+ applications : req . query . include ? true : false ,
33+ } ,
34+
35+ } ) ;
36+
37+ if ( ! user ) {
38+ return res . status ( 404 ) . json ( {
39+ message : "User not found"
40+ } ) ;
41+ }
42+
43+
44+ logger . info ( `User with id ${ req . query . id } retrieved` )
45+ return res . status ( 200 ) . json ( user ) ;
46+
47+
48+ } catch ( err ) {
49+ logger . error ( err ) ;
50+ res . status ( 500 ) . json ( {
51+ message : "Something went wrong" ,
52+ error : err
53+ } ) ;
54+ }
5555}
5656
57- export const getSelf = async ( req , res ) => {
58- try {
59- // finds user based on token info instead of query
60- const user = await prisma . user . findUnique ( {
61- where : {
62- id : req . user . id
63- } ,
64- select : {
65- id : true ,
66- email : true
67- }
68- } ) ;
69-
70- if ( ! user ) {
71- return res . status ( 404 ) . json ( {
72- message : "User not found"
73- } ) ;
74- }
75-
76- // logger.info(`User with id ${req.user.id} retrieved`)
77- return res . status ( 200 ) . json ( user ) ;
78-
79- } catch ( err ) {
80- logger . error ( err ) ;
81- res . status ( 500 ) . json ( {
82- message : "Something went wrong" ,
83- error : err
84- } ) ;
57+ export const getSelf = async ( req , res ) => {
58+ try {
59+ // finds user based on token info instead of query
60+ const user = await prisma . user . findUnique ( {
61+ where : {
62+ id : req . user . id
63+ } ,
64+ select : {
65+ id : true ,
66+ email : true
67+ }
68+ } ) ;
69+
70+ if ( ! user ) {
71+ return res . status ( 404 ) . json ( {
72+ message : "User not found"
73+ } ) ;
8574 }
75+
76+ // logger.info(`User with id ${req.user.id} retrieved`)
77+ return res . status ( 200 ) . json ( user ) ;
78+
79+ } catch ( err ) {
80+ logger . error ( err ) ;
81+ res . status ( 500 ) . json ( {
82+ message : "Something went wrong" ,
83+ error : err
84+ } ) ;
85+ }
86+ }
87+
88+ export const updateUser = async ( req , res ) => {
89+ try {
90+ if ( ! req . params . id ) {
91+ return res . status ( 400 ) . json ( {
92+ message : "id param is required"
93+ } ) ;
94+ }
95+
96+ if ( req . user . id !== req . params . id ) {
97+ logger . warn ( `Attempted unauthorized update to user with id ${ req . params . id } ` ) ;
98+ return res . status ( 403 ) . json ( {
99+ message : "You are not authorized to update this resource"
100+ } ) ;
101+ }
102+
103+ const { firstName, lastName } = req . body ;
104+
105+ const updatedUser = await prisma . user . update ( {
106+ where : {
107+ id : req . params . id
108+ } ,
109+ data : {
110+ firstName,
111+ lastName
112+ }
113+ } ) ;
114+
115+ return res . status ( 200 ) . json ( updatedUser ) ;
116+ } catch ( err ) {
117+ if ( err . name === "ZodError" ) {
118+ return res . status ( 400 ) . json ( {
119+ message : "Invalid request data" ,
120+ error : err . errors
121+ } ) ;
122+ }
123+
124+ return res . status ( 500 ) . json ( {
125+ message : "Something went wrong" ,
126+ error : err
127+ } ) ;
128+ }
86129}
0 commit comments