fix: login with google is done

This commit is contained in:
akhdanre 2025-03-19 13:51:13 +07:00
parent fab1cea611
commit d63bf3e713
6 changed files with 39 additions and 12 deletions

3
.gitignore vendored
View File

@ -9,3 +9,6 @@ app/**/*.pyo
.env .env
.venv .venv
logs/

View File

@ -16,20 +16,39 @@ class LoggerConfig:
if not os.path.exists(LoggerConfig.LOG_DIR): if not os.path.exists(LoggerConfig.LOG_DIR):
os.makedirs(LoggerConfig.LOG_DIR) os.makedirs(LoggerConfig.LOG_DIR)
# Separate loggers for different levels # Remove default handlers to prevent duplicate logging
LoggerConfig._setup_logger(app.logger, "info.log", logging.INFO) for handler in app.logger.handlers[:]:
LoggerConfig._setup_logger(app.logger, "error.log", logging.ERROR) app.logger.removeHandler(handler)
LoggerConfig._setup_logger(app.logger, "warning.log", logging.WARNING)
# Create separate loggers
info_logger = LoggerConfig._setup_logger(
"info_logger", "info.log", logging.INFO, logging.WARNING
)
error_logger = LoggerConfig._setup_logger(
"error_logger", "error.log", logging.ERROR, logging.CRITICAL
)
warning_logger = LoggerConfig._setup_logger(
"warning_logger", "warning.log", logging.WARNING, logging.WARNING
)
# Attach handlers to Flask app logger
app.logger.addHandler(info_logger)
app.logger.addHandler(error_logger)
app.logger.addHandler(warning_logger)
app.logger.setLevel(logging.DEBUG) # Set lowest level to capture all logs
app.logger.info("Logger has been initialized for Flask application.") app.logger.info("Logger has been initialized for Flask application.")
@staticmethod @staticmethod
def _setup_logger(logger, filename, level): def _setup_logger(name, filename, level, max_level):
"""Helper method to configure loggers for specific levels.""" """Helper method to configure loggers for specific levels."""
logger = logging.getLogger(name)
logger.setLevel(level)
log_file_path = os.path.join(LoggerConfig.LOG_DIR, filename) log_file_path = os.path.join(LoggerConfig.LOG_DIR, filename)
log_handler = RotatingFileHandler(log_file_path, maxBytes=100000, backupCount=3) log_handler = RotatingFileHandler(log_file_path, maxBytes=100000, backupCount=3)
log_handler.setLevel(level) log_handler.setLevel(level)
log_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") log_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
log_handler.setFormatter(log_formatter) log_handler.setFormatter(log_formatter)
log_handler.addFilter(lambda record: level <= record.levelno <= max_level)
logger.addHandler(log_handler) logger.addHandler(log_handler)
return log_handler

View File

@ -4,6 +4,7 @@ from schemas.basic_response_schema import ResponseSchema
from schemas.google_login_schema import GoogleLoginSchema from schemas.google_login_schema import GoogleLoginSchema
from schemas import LoginSchema from schemas import LoginSchema
from services import UserService, AuthService from services import UserService, AuthService
from core import AuthException
class AuthController: class AuthController:
@ -38,7 +39,6 @@ class AuthController:
) )
return jsonify(response.model_dump()), 401 return jsonify(response.model_dump()), 401
# Jika berhasil, kembalikan data user tanpa meta
response = ResponseSchema( response = ResponseSchema(
message="Login successful", message="Login successful",
data=user_info, data=user_info,
@ -51,6 +51,11 @@ class AuthController:
response = ResponseSchema(message="Invalid input", data=None, meta=None) response = ResponseSchema(message="Invalid input", data=None, meta=None)
return jsonify(response.model_dump()), 400 return jsonify(response.model_dump()), 400
except AuthException as e:
current_app.logger.error(f"Auth error: {e}")
response = ResponseSchema(message=e, data=None, meta=None)
return jsonify(response.model_dump()), 400
except Exception as e: except Exception as e:
current_app.logger.error( current_app.logger.error(
f"Error during Google login: {str(e)}", exc_info=True f"Error during Google login: {str(e)}", exc_info=True

View File

@ -25,8 +25,9 @@ class UserRepository:
return user return user
def get_by_google_id(self, google_id: str) -> Optional[UserEntity]: def get_by_google_id(self, google_id: str) -> Optional[UserEntity]:
user = self.collection.find_one({"google_id": google_id}) user_data = self.collection.find_one({"google_id": google_id})
return user
return UserEntity(**user_data) if user_data else None
def insert_user(self, user_data: UserEntity) -> str: def insert_user(self, user_data: UserEntity) -> str:
"""Menambahkan pengguna baru ke dalam database dan mengembalikan ID pengguna.""" """Menambahkan pengguna baru ke dalam database dan mengembalikan ID pengguna."""

View File

@ -5,6 +5,7 @@ from google.oauth2 import id_token
from google.auth.transport import requests from google.auth.transport import requests
from configs import Config from configs import Config
from core import AuthException from core import AuthException
from flask import current_app
class AuthService: class AuthService:
@ -26,6 +27,7 @@ class AuthService:
existing_user = self.user_repository.get_by_google_id(google_id) existing_user = self.user_repository.get_by_google_id(google_id)
if existing_user: if existing_user:
current_app.logger.info(f"User {existing_user.email} already exists ")
if existing_user.email == email: if existing_user.email == email:
return existing_user return existing_user
return AuthException("Email not match") return AuthException("Email not match")

View File

@ -1,3 +0,0 @@
2025-03-19 11:48:56,950 - INFO - Logger has been initialized for Flask application.
2025-03-19 11:49:01,795 - INFO - Logger has been initialized for Flask application.
2025-03-19 11:49:06,664 - INFO - Logger has been initialized for Flask application.