1
1
import logging
2
- from typing import Optional
3
2
4
3
import firebase_admin .auth
5
4
from fastapi import HTTPException
6
5
from sqlalchemy .orm import Session
7
6
8
7
from app .models import User
9
- from app .schemas .user import SignUpMethod , UserCreateRequest , UserCreateResponse , UserRole
8
+ from app .schemas .user import (
9
+ SignUpMethod ,
10
+ UserCreateRequest ,
11
+ UserCreateResponse ,
12
+ UserRole ,
13
+ )
10
14
from app .services .interfaces .user_service import IUserService
11
15
12
16
@@ -15,16 +19,12 @@ def __init__(self, db: Session):
15
19
self .db = db
16
20
self .logger = logging .getLogger (__name__ )
17
21
18
- async def create_user (
19
- self ,
20
- user : UserCreateRequest
21
- ) -> UserCreateResponse :
22
+ async def create_user (self , user : UserCreateRequest ) -> UserCreateResponse :
22
23
firebase_user = None
23
24
try :
24
25
if user .signup_method == SignUpMethod .PASSWORD :
25
26
firebase_user = firebase_admin .auth .create_user (
26
- email = user .email ,
27
- password = user .password
27
+ email = user .email , password = user .password
28
28
)
29
29
## TO DO: SSO functionality depends a lot on frontend implementation,
30
30
## so we may need to update this when we have a better idea of what
@@ -55,15 +55,9 @@ async def create_user(
55
55
self .logger .error (f"Firebase error: { str (firebase_error )} " )
56
56
57
57
if isinstance (firebase_error , firebase_admin .auth .EmailAlreadyExistsError ):
58
- raise HTTPException (
59
- status_code = 409 ,
60
- detail = "Email already exists"
61
- )
58
+ raise HTTPException (status_code = 409 , detail = "Email already exists" )
62
59
63
- raise HTTPException (
64
- status_code = 400 ,
65
- detail = str (firebase_error )
66
- )
60
+ raise HTTPException (status_code = 400 , detail = str (firebase_error ))
67
61
68
62
except Exception as e :
69
63
# Clean up Firebase user if a database exception occurs
@@ -72,19 +66,16 @@ async def create_user(
72
66
firebase_admin .auth .delete_user (firebase_user .uid )
73
67
except firebase_admin .auth .AuthError as firebase_error :
74
68
self .logger .error (
75
- "Failed to delete Firebase user after database insertion failed. "
69
+ "Failed to delete Firebase user after database insertion failed"
76
70
f"Firebase UID: { firebase_user .uid } . "
77
71
f"Error: { str (firebase_error )} "
78
72
)
79
73
80
74
# Rollback database changes
81
75
self .db .rollback ()
82
76
self .logger .error (f"Error creating user: { str (e )} " )
83
-
84
- raise HTTPException (
85
- status_code = 500 ,
86
- detail = str (e )
87
- )
77
+
78
+ raise HTTPException (status_code = 500 , detail = str (e ))
88
79
89
80
def delete_user_by_email (self , email : str ):
90
81
pass
0 commit comments