feat: adding user login schema response
This commit is contained in:
parent
596f498674
commit
aae53cccce
|
@ -1,13 +1,12 @@
|
|||
from flask import jsonify, request, current_app
|
||||
from pydantic import ValidationError
|
||||
from app.models.login.login_response import UserResponseModel
|
||||
from app.schemas.basic_response_schema import ResponseSchema
|
||||
from app.schemas.google_login_schema import GoogleLoginSchema
|
||||
from app.schemas import LoginSchema
|
||||
from app.services import UserService, AuthService
|
||||
from app.exception import AuthException
|
||||
from app.mapper import UserMapper
|
||||
from app.helpers import make_response
|
||||
from app.helpers import make_response, make_error_response
|
||||
import logging
|
||||
|
||||
logging = logging.getLogger(__name__)
|
||||
|
@ -26,15 +25,7 @@ class AuthController:
|
|||
|
||||
if response is None:
|
||||
return make_response(message="User is not registered", status_code=401)
|
||||
return (
|
||||
jsonify(
|
||||
ResponseSchema(
|
||||
message="Register success",
|
||||
data=UserMapper.user_entity_to_response(response),
|
||||
).model_dump()
|
||||
),
|
||||
200,
|
||||
)
|
||||
return make_response(message="Login success", data=response)
|
||||
except ValidationError as e:
|
||||
current_app.logger.error(f"Validation error: {e}")
|
||||
response = ResponseSchema(message="Invalid input", data=None, meta=None)
|
||||
|
@ -54,25 +45,14 @@ class AuthController:
|
|||
try:
|
||||
data = request.get_json()
|
||||
|
||||
# Validasi data dengan Pydantic
|
||||
validated_data = GoogleLoginSchema(**data)
|
||||
id_token = validated_data.token_id
|
||||
|
||||
# Verifikasi ID Token ke layanan AuthService
|
||||
user_info = self.auth_service.verify_google_id_token(id_token)
|
||||
if not user_info:
|
||||
current_app.logger.error("Invalid Google ID Token")
|
||||
response = ResponseSchema(
|
||||
message="Invalid Google ID Token", data=None, meta=None
|
||||
)
|
||||
return jsonify(response.model_dump()), 401
|
||||
return make_response(message="Invalid Google ID Token", data=user_info)
|
||||
|
||||
response = ResponseSchema(
|
||||
message="Login successful",
|
||||
data=UserMapper.user_entity_to_response(user_info),
|
||||
meta=None,
|
||||
)
|
||||
return jsonify(response.model_dump()), 200
|
||||
return make_response(message="Login Success", data=user_info)
|
||||
|
||||
except ValidationError as e:
|
||||
current_app.logger.error(f"Validation error: {e}")
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
from datetime import datetime
|
||||
from typing import Dict, Optional
|
||||
from app.models import UserEntity, UserResponseModel
|
||||
from app.models import UserEntity
|
||||
from app.schemas import RegisterSchema
|
||||
from app.schemas.response import LoginResponseSchema
|
||||
from app.helpers import DatetimeUtil
|
||||
|
||||
|
||||
class UserMapper:
|
||||
|
@ -41,17 +43,15 @@ class UserMapper:
|
|||
)
|
||||
|
||||
@staticmethod
|
||||
def user_entity_to_response(user: UserEntity) -> UserResponseModel:
|
||||
print(str(user.id))
|
||||
return UserResponseModel(
|
||||
_id=str(user.id) if user.id else None,
|
||||
google_id=user.google_id,
|
||||
def user_entity_to_response(user: UserEntity) -> LoginResponseSchema:
|
||||
return LoginResponseSchema(
|
||||
id=str(user.id) if user.id else None,
|
||||
email=user.email,
|
||||
name=user.name,
|
||||
birth_date=user.birth_date,
|
||||
birth_date=(
|
||||
DatetimeUtil.to_string(user.birth_date) if user.birth_date else None
|
||||
),
|
||||
pic_url=user.pic_url,
|
||||
phone=user.phone,
|
||||
locale=user.locale,
|
||||
# created_at=user.created_at,
|
||||
# updated_at=user.updated_at,
|
||||
)
|
||||
|
|
|
@ -6,6 +6,7 @@ from .history.history_response import HistoryResultSchema
|
|||
from .history.detail_history_response import QuizHistoryResponse, QuestionResult
|
||||
from .recomendation.recomendation_response_schema import ListingQuizResponse
|
||||
from .subject.get_subject_schema import GetSubjectResponse
|
||||
from .auth.login_response import LoginResponseSchema
|
||||
|
||||
__all__ = [
|
||||
"QuizCreationResponse",
|
||||
|
@ -17,4 +18,5 @@ __all__ = [
|
|||
"QuestionResult",
|
||||
"ListingQuizResponse",
|
||||
"GetSubjectResponse",
|
||||
"LoginResponseSchema",
|
||||
]
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
from pydantic import BaseModel, EmailStr, field_serializer
|
||||
from app.models import UserEntity
|
||||
from typing import Optional
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class LoginResponseSchema(BaseModel):
|
||||
id: str
|
||||
email: EmailStr
|
||||
name: str
|
||||
birth_date: Optional[str] = None
|
||||
pic_url: Optional[str] = None
|
||||
phone: Optional[str] = None
|
||||
locale: Optional[str] = None
|
|
@ -1,4 +1,5 @@
|
|||
from app.schemas import LoginSchema
|
||||
from app.schemas.response import LoginResponseSchema
|
||||
from app.repositories import UserRepository
|
||||
from app.mapper import UserMapper
|
||||
from google.oauth2 import id_token
|
||||
|
@ -6,6 +7,8 @@ from google.auth.transport import requests
|
|||
from app.configs import Config
|
||||
from app.exception import AuthException
|
||||
from werkzeug.security import check_password_hash
|
||||
from app.helpers import DatetimeUtil
|
||||
from app.mapper import UserMapper
|
||||
|
||||
|
||||
class AuthService:
|
||||
|
@ -23,14 +26,17 @@ class AuthService:
|
|||
existing_user = self.user_repository.get_by_google_id(google_id)
|
||||
if existing_user:
|
||||
if existing_user.email == email:
|
||||
return existing_user
|
||||
|
||||
return UserMapper.user_entity_to_response(existing_user)
|
||||
raise AuthException("Email not match")
|
||||
|
||||
new_user = UserMapper.from_google_payload(google_id, email, payload)
|
||||
|
||||
user_id = self.user_repository.insert_user(user_data=new_user)
|
||||
|
||||
return self.user_repository.get_user_by_id(user_id=user_id)
|
||||
user_data = self.user_repository.get_user_by_id(user_id=user_id)
|
||||
|
||||
return UserMapper.user_entity_to_response(user_data)
|
||||
|
||||
def login(self, data: LoginSchema):
|
||||
user_data = self.user_repository.get_user_by_email(data.email)
|
||||
|
@ -38,7 +44,8 @@ class AuthService:
|
|||
if user_data is None:
|
||||
return None
|
||||
|
||||
if check_password_hash(user_data.password, data.password):
|
||||
user_data.password = None
|
||||
return user_data
|
||||
if not check_password_hash(user_data.password, data.password):
|
||||
return None
|
||||
user_data.password = None
|
||||
|
||||
return UserMapper.user_entity_to_response(user_data)
|
||||
|
|
Loading…
Reference in New Issue