diff --git a/app/controllers/auth_controller.py b/app/controllers/auth_controller.py index 09a1012..448cedf 100644 --- a/app/controllers/auth_controller.py +++ b/app/controllers/auth_controller.py @@ -13,13 +13,27 @@ class AuthController: self.auth_service = authService def login(self): - data = request.get_json() - dataSchema = LoginSchema(**data) - response = self.auth_service.login(dataSchema) + try: + data = request.get_json() + dataSchema = LoginSchema(**data) + response = self.auth_service.login(dataSchema) - if response.success: - return jsonify(response.to_dict()), 200 - return jsonify(response.to_dict()), 400 + if response.success: + return jsonify({}), 200 + return jsonify({}), 400 + except ValidationError as e: + current_app.logger.error(f"Validation error: {e}") + response = ResponseSchema(message="Invalid input", data=None, meta=None) + return jsonify(response.model_dump()), 400 + + except Exception as e: + current_app.logger.error( + f"Error during Google login: {str(e)}", exc_info=True + ) + response = ResponseSchema( + message="Internal server error", data=None, meta=None + ) + return jsonify(response.model_dump()), 500 def google_login(self): """Handles Google Login via ID Token verification""" diff --git a/app/mapper/user_mapper.py b/app/mapper/user_mapper.py index 999a4a2..6b89c90 100644 --- a/app/mapper/user_mapper.py +++ b/app/mapper/user_mapper.py @@ -9,7 +9,6 @@ class UserMapper: google_id: str, email: str, payload: Dict[str, Optional[str]] ) -> UserEntity: return UserEntity( - id=str(google_id), google_id=google_id, email=email, name=payload.get("name"), diff --git a/app/models/entities/__init__.py b/app/models/entities/__init__.py index 488041e..b5893dc 100644 --- a/app/models/entities/__init__.py +++ b/app/models/entities/__init__.py @@ -1,3 +1,7 @@ from .user_entity import UserEntity +from .base import PyObjectId -__all__ = ["UserEntity"] +__all__ = [ + "UserEntity", + "PyObjectId", +] diff --git a/app/models/entities/base.py b/app/models/entities/base.py new file mode 100644 index 0000000..b602169 --- /dev/null +++ b/app/models/entities/base.py @@ -0,0 +1,19 @@ +from bson import ObjectId + + +class PyObjectId(ObjectId): + """Custom ObjectId type for Pydantic to handle MongoDB _id""" + + @classmethod + def __get_validators__(cls): + yield cls.validate + + @classmethod + def validate(cls, v): + if not ObjectId.is_valid(v): + raise ValueError("Invalid ObjectId") + return ObjectId(v) + + @classmethod + def __modify_schema__(cls, field_schema): + field_schema.update(type="string") diff --git a/app/models/entities/user_entity.py b/app/models/entities/user_entity.py index 929e5f9..9d74109 100644 --- a/app/models/entities/user_entity.py +++ b/app/models/entities/user_entity.py @@ -1,10 +1,11 @@ from typing import Optional from pydantic import BaseModel, EmailStr from datetime import date, datetime +from .base import PyObjectId class UserEntity(BaseModel): - id: str + _id: Optional[PyObjectId] = None google_id: Optional[str] = None email: EmailStr password: Optional[str] = None diff --git a/app/services/auth_service.py b/app/services/auth_service.py index 699e11f..1807bcf 100644 --- a/app/services/auth_service.py +++ b/app/services/auth_service.py @@ -27,7 +27,6 @@ class AuthService: existing_user = self.user_repository.get_by_google_id(google_id) if existing_user: - current_app.logger.info(f"User {existing_user.email} already exists ") if existing_user.email == email: return existing_user return AuthException("Email not match") @@ -39,25 +38,13 @@ class AuthService: return self.user_repository.get_user_by_id(user_id=user_id) def login(self, data: LoginSchema): - try: - user_data = self.user_repository.get_user_by_email(data.email) + user_data = self.user_repository.get_user_by_email(data.email) - if user_data == None: - # return ApiResponse(success=False, message="User not found", data=None) - return None - - if user_data["password"] == data.password: - del user_data["password"] - # return ApiResponse( - # success=True, message="Login success", data=user_data - # ) - return None - # return ApiResponse(success=False, message="Invalid password", data=None) - return None - except Exception as e: - print(f"the issue is {e}") - # return ApiResponse( - # success=False, message="Internal server error", data=None - # ) + if user_data == None: return None + + if user_data.password == data.password: + del user_data.password + return user_data + return None diff --git a/logs/app.log b/logs/app.log deleted file mode 100644 index 5f7695d..0000000 --- a/logs/app.log +++ /dev/null @@ -1,2 +0,0 @@ -2025-03-19 11:45:54,493 - INFO - Logger has been initialized for Flask application. -2025-03-19 11:46:06,381 - INFO - Logger has been initialized for Flask application. diff --git a/logs/error.log b/logs/error.log deleted file mode 100644 index e69de29..0000000 diff --git a/logs/info.log b/logs/info.log deleted file mode 100644 index e69de29..0000000 diff --git a/logs/warning.log b/logs/warning.log deleted file mode 100644 index e69de29..0000000