1414)
1515oauth2_scheme = OAuth2PasswordBearer (tokenUrl = "/users/token" )
1616
17- # 현재 로그인한 사용자를 가져오는 의존성 함수
17+ # 현재 로그인한 사용자를 가져오기
1818async def get_current_user (token : str = Depends (oauth2_scheme ), db : Session = Depends (get_db_session )):
1919 jwt_util = JWTUtil ()
2020 payload = jwt_util .decode_token (token )
21+
2122 if payload is None :
2223 raise HTTPException (
2324 status_code = 404 ,
2425 detail = "Could not validate credentials" ,
2526 headers = {"WWW-Authenticate" : "Bearer" },
2627 )
27- user_id : int = payload .get ("id" ) # 수정: "id"를 추출
28+
29+ user_id : int = payload .get ("id" )
2830 if user_id is None :
2931 raise HTTPException (
3032 status_code = 404 ,
3133 detail = "Could not validate credentials" ,
3234 headers = {"WWW-Authenticate" : "Bearer" },
3335 )
34- user = db .get (User , user_id ) # 수정: user_id (id)를 사용하여 조회
36+
37+ user = db .get (User , user_id )
3538 if user is None :
3639 raise HTTPException (status_code = 404 , detail = "User not found" )
40+
3741 return user
3842
39-
43+ # 토큰 발급
4044@router .post ("/token" )
4145def login_for_access_token (
4246 form_data : OAuth2PasswordRequestForm = Depends (),
@@ -66,15 +70,15 @@ def login_for_access_token(
6670 return {
6771 "access_token" : access_token ,
6872 "token_type" : "bearer" ,
69- ** payload # 사용자 정보 포함
73+ ** payload
7074 }
7175
7276#회원가입
7377@router .post ("/signup" )
7478async def auth_signup (req :AuthSignupReq ,
75- db = Depends (get_db_session ),
76- jwtUtil :JWTUtil = Depends (),
77- authService :AuthService = Depends ()):
79+ db = Depends (get_db_session ),
80+ jwtUtil :JWTUtil = Depends (),
81+ authService :AuthService = Depends ()):
7882 user = authService .signup (db , req .login_id , req .pwd , req .name , req .email )
7983
8084 if not user :
@@ -89,14 +93,14 @@ async def auth_signup(req:AuthSignupReq,
8993 "created_at" : user .created_at
9094 }
9195
92- # 🔹 토큰 생성
96+ # 토큰 생성
9397 token = jwtUtil .create_token (payload )
9498
95- # 🔹 DB에 반영되도록 저장
99+ # DB에 반영되도록 저장
96100 user .access_token = token
97- db .add (user ) # 변경된 객체 추가
98- db .commit () # DB에 반영
99- db .refresh (user ) # DB에서 최신 상태 불러오기 (flush 역할)
101+ db .add (user )
102+ db .commit ()
103+ db .refresh (user )
100104
101105 return {
102106 "id" : user .id ,
@@ -105,7 +109,7 @@ async def auth_signup(req:AuthSignupReq,
105109 "username" : user .username ,
106110 "role" : user .role ,
107111 "created_at" : user .created_at ,
108- "access_token" : user .access_token # ✅ DB에도 반영됨!
112+ "access_token" : user .access_token
109113 }
110114
111115# 로그인
@@ -120,142 +124,3 @@ def auth_signin(req:AuthLoginReq,
120124 user .access_token = jwtUtil .create_token (user .model_dump ())
121125 return user
122126
123-
124- ## 내 판매 내역 조회
125-
126- @router .get ("/selling" , status_code = 200 )
127- def check_my_selling_list (
128- db : Session = Depends (get_db_session ),
129- current_user : User = Depends (get_current_user ),
130- ):
131- """
132- 현재 로그인한 사용자의 판매 내역 조회
133- """
134- selling_list = db .exec (select (Product ).where (Product .user_id == current_user .id )).all ()
135- return {"my_selling_list" : selling_list }
136- # 내 구매 내역 조회
137- @router .get ("/{user_id}/bought" )
138- def get_user_bought (user_id : int , db : Session = Depends (get_db_session )):
139- # 사용자 ID에 해당하는 구매 내역을 가져옵니다.
140- purchases = db .exec (select (Purchase ).where (Purchase .user_id == user_id )).all ()
141-
142- # 각 구매 내역에 대해 상품을 찾아서 반환합니다.
143- # 만약 값이 없으면 빈 리스트를 출력
144- results = [db .get (Product , purchase .product_id ) for purchase in purchases ]
145-
146- return results
147-
148- # 내 좋아요 내역 조회
149- @router .get ("/{user_id}/likes" )
150- def get_user_likes (user_id : int , db : Session = Depends (get_db_session )):
151- # 사용자 ID에 해당하는 좋아요 내역을 가져옵니다.
152- like_products = db .exec (select (Likes ).where (Likes .user_id == user_id )).all ()
153-
154- # 각 좋아요 내역에 대해 상품을 찾아서 반환합니다.
155- # 만약 값이 없으면 빈 리스트를 출력
156- results = [db .get (Product , like_product .product_id ) for like_product in like_products ]
157-
158- return results
159-
160-
161- # 내 프로필 조회
162- @router .get ("/{user_id}" )
163- def check_profile (user_id : int , db = Depends (get_db_session )):
164- if not user_id :
165- raise HTTPException (status_code = 404 , detail = "Not Found" )
166- user = db .exec (select (User ).filter (User .id == user_id )).first ()
167- if not user :
168- raise HTTPException (status_code = 404 , detail = "User not found" )
169-
170- return {
171- "id" : user .id ,
172- "login_id" : user .login_id ,
173- "email" : user .email ,
174- "username" : user .username ,
175- "role" : user .role ,
176- "created_at" : user .created_at
177- }
178-
179- #프로필 수정
180- @router .put ("/profile" )
181- def update_profile (
182- update_data : ProfileUpdateRequest ,
183- current_user : User = Depends (get_current_user ),
184- db : Session = Depends (get_db_session ),
185- auth_service : AuthService = Depends (),
186- jwt_util : JWTUtil = Depends ()
187- ):
188- # 현재 비밀번호 확인 (비밀번호 변경 시)
189- if update_data .password :
190- if not auth_service .verify_pwd (update_data .current_password , current_user .password ):
191- raise HTTPException (status_code = status .HTTP_400_BAD_REQUEST , detail = "Current password is incorrect" )
192- current_user .password = auth_service .get_hashed_pwd (update_data .password )
193-
194- # 이메일 중복 확인
195- if update_data .email and update_data .email != current_user .email :
196- existing_user = db .exec (select (User ).where (User .email == update_data .email )).first ()
197- if existing_user :
198- raise HTTPException (status_code = status .HTTP_400_BAD_REQUEST , detail = "Email already in use" )
199-
200- # 로그인 ID 중복 확인
201- if update_data .login_id and update_data .login_id != current_user .login_id :
202- existing_user = db .exec (select (User ).where (User .login_id == update_data .login_id )).first ()
203- if existing_user :
204- raise HTTPException (status_code = status .HTTP_400_BAD_REQUEST , detail = "Login ID already in use" )
205-
206- # 사용자 정보 업데이트
207- if update_data .username and update_data .username != current_user .username :
208- current_user .username = update_data .username
209- if update_data .email and update_data .email != current_user .email :
210- current_user .email = update_data .email
211- if update_data .login_id and update_data .login_id != current_user .login_id :
212- current_user .login_id = update_data .login_id
213-
214- try :
215- db .add (current_user )
216- db .commit ()
217- db .refresh (current_user )
218- except Exception as e :
219- db .rollback ()
220- raise HTTPException (status_code = 500 , detail = "An error occurred while updating the profile" )
221-
222- # 새로운 토큰 생성 (필요한 경우)
223- payload = {
224- "id" : current_user .id ,
225- "login_id" : current_user .login_id ,
226- "email" : current_user .email ,
227- "username" : current_user .username ,
228- "role" : current_user .role ,
229- "created_at" : str (current_user .created_at ) # datetime -> string 변환 필요
230- }
231- new_access_token = jwt_util .create_token (payload )
232-
233- # 업데이트된 사용자 정보와 새 토큰 반환
234- return {
235- "id" : current_user .id ,
236- "login_id" : current_user .login_id ,
237- "email" : current_user .email ,
238- "username" : current_user .username ,
239- "role" : current_user .role ,
240- "created_at" : str (current_user .created_at ),
241- "access_token" : new_access_token # 새 토큰 포함
242- }
243-
244-
245- # 회원 탈퇴
246- @router .delete ("/profile" )
247- def delete_profile (
248- current_user : User = Depends (get_current_user ),
249- db : Session = Depends (get_db_session )
250- ):
251- # 사용자 확인
252- user = db .get (User , current_user .id )
253- if not user :
254- raise HTTPException (status_code = status .HTTP_404_NOT_FOUND , detail = "User not found" )
255-
256- # 데이터베이스에서 사용자 삭제
257- db .delete (user )
258- db .commit ()
259-
260- return {"message" : "Profile deleted successfully" }
261-
0 commit comments