1+ from uuid import UUID
2+
3+ from fastapi import APIRouter , Depends , HTTPException
4+
5+ from app .middleware .auth import has_roles
6+ from app .schemas .user import UserRole
7+ from app .schemas .user_data import (
8+ UserDataCreateRequest ,
9+ UserDataResponse ,
10+ UserDataUpdateRequest ,
11+ )
12+ from app .services .implementations .user_data_service import UserDataService
13+ from app .utilities .service_utils import get_user_data_service
14+
15+ router = APIRouter (
16+ prefix = "/user-data" ,
17+ tags = ["user-data" ],
18+ )
19+
20+
21+ @router .post ("/" , response_model = UserDataResponse )
22+ async def create_user_data (
23+ user_data : UserDataCreateRequest ,
24+ user_data_service : UserDataService = Depends (get_user_data_service ),
25+ authorized : bool = has_roles ([UserRole .ADMIN , UserRole .PARTICIPANT , UserRole .VOLUNTEER ]),
26+ ):
27+ """Create user data for intake form"""
28+ try :
29+ return user_data_service .create_user_data (user_data )
30+ except HTTPException as http_ex :
31+ raise http_ex
32+ except Exception as e :
33+ raise HTTPException (status_code = 500 , detail = str (e ))
34+
35+
36+ @router .get ("/user/{user_id}" , response_model = UserDataResponse )
37+ async def get_user_data_by_user_id (
38+ user_id : UUID ,
39+ user_data_service : UserDataService = Depends (get_user_data_service ),
40+ authorized : bool = has_roles ([UserRole .ADMIN , UserRole .PARTICIPANT , UserRole .VOLUNTEER ]),
41+ ):
42+ """Get user data by user ID"""
43+ try :
44+ return user_data_service .get_user_data_by_user_id (user_id )
45+ except HTTPException as http_ex :
46+ raise http_ex
47+ except Exception as e :
48+ raise HTTPException (status_code = 500 , detail = str (e ))
49+
50+
51+ @router .get ("/{user_data_id}" , response_model = UserDataResponse )
52+ async def get_user_data_by_id (
53+ user_data_id : UUID ,
54+ user_data_service : UserDataService = Depends (get_user_data_service ),
55+ authorized : bool = has_roles ([UserRole .ADMIN ]),
56+ ):
57+ """Get user data by its ID"""
58+ try :
59+ return user_data_service .get_user_data_by_id (user_data_id )
60+ except HTTPException as http_ex :
61+ raise http_ex
62+ except Exception as e :
63+ raise HTTPException (status_code = 500 , detail = str (e ))
64+
65+
66+ @router .put ("/user/{user_id}" , response_model = UserDataResponse )
67+ async def update_user_data_by_user_id (
68+ user_id : UUID ,
69+ user_data : UserDataUpdateRequest ,
70+ user_data_service : UserDataService = Depends (get_user_data_service ),
71+ authorized : bool = has_roles ([UserRole .ADMIN , UserRole .PARTICIPANT , UserRole .VOLUNTEER ]),
72+ ):
73+ """Update user data by user ID"""
74+ try :
75+ return user_data_service .update_user_data_by_user_id (user_id , user_data )
76+ except HTTPException as http_ex :
77+ raise http_ex
78+ except Exception as e :
79+ raise HTTPException (status_code = 500 , detail = str (e ))
80+
81+
82+ @router .delete ("/{user_data_id}" )
83+ async def delete_user_data_by_id (
84+ user_data_id : UUID ,
85+ user_data_service : UserDataService = Depends (get_user_data_service ),
86+ authorized : bool = has_roles ([UserRole .ADMIN ]),
87+ ):
88+ """Delete user data by its ID"""
89+ try :
90+ user_data_service .delete_user_data_by_id (user_data_id )
91+ return {"message" : f"User data { user_data_id } deleted successfully" }
92+ except HTTPException as http_ex :
93+ raise http_ex
94+ except Exception as e :
95+ raise HTTPException (status_code = 500 , detail = str (e ))
96+
97+
98+ @router .delete ("/user/{user_id}" )
99+ async def delete_user_data_by_user_id (
100+ user_id : UUID ,
101+ user_data_service : UserDataService = Depends (get_user_data_service ),
102+ authorized : bool = has_roles ([UserRole .ADMIN ]),
103+ ):
104+ """Delete user data by user ID"""
105+ try :
106+ user_data_service .delete_user_data_by_user_id (user_id )
107+ return {"message" : f"User data for user { user_id } deleted successfully" }
108+ except HTTPException as http_ex :
109+ raise http_ex
110+ except Exception as e :
111+ raise HTTPException (status_code = 500 , detail = str (e ))
0 commit comments