150 lines
4.9 KiB
Python
150 lines
4.9 KiB
Python
from sqlalchemy.orm import Session
|
|
from app.presentation.schemas.useritems_schema import GetItemsRequest, GetItemsResponse, UpdateItemRequest, UpdateItemResponse, DeleteUserItemRequest, DeleteUserItemResponse
|
|
from app.presentation.schemas.user_schema import GetUserNameRequest, GetUserNameResponse, UpdateUserProfileRequest, UpdateUserProfileResponse
|
|
from app.presentation.schemas.userprofile_schema import GetUserProfileRequest, GetUserProfileResponse
|
|
from app.shared.logger import setup_logger
|
|
from app.repositories.item_repository import ItemRepository
|
|
from app.repositories.user_repository import UserRepository
|
|
from app.shared.exception.custom_exception import UserNotFoundError,ItemNotFoundError
|
|
from app.presentation.schemas.useritems_schema import Item
|
|
logger = setup_logger(__name__)
|
|
|
|
class UserService:
|
|
'''사용자 서비스'''
|
|
|
|
def __init__(self, db: Session):
|
|
self.db = db
|
|
self.user_repository = UserRepository(db)
|
|
self.item_repository = ItemRepository(db)
|
|
|
|
def get_items(self, request: GetItemsRequest) -> GetItemsResponse:
|
|
'''업체(items) 가져오기'''
|
|
|
|
# 1. id 검증
|
|
user = self.user_repository.get_by_id(request.id)
|
|
if not user:
|
|
raise UserNotFoundError()
|
|
|
|
# 2. 업체 가져오기
|
|
items = self.item_repository.get_items(request.id)
|
|
return GetItemsResponse(
|
|
total_count=len(items),
|
|
items=[
|
|
Item(
|
|
item_id=item.id,
|
|
name=item.name,
|
|
address=item.address,
|
|
url=item.url,
|
|
phone_number=item.phone_number,
|
|
thumbnail_url=item.thumbnail_url,
|
|
hashtags=item.hashtags
|
|
) for item in items
|
|
]
|
|
)
|
|
|
|
def update_item(self, request: UpdateItemRequest) -> UpdateItemResponse:
|
|
'''업체(Item) 정보 수정'''
|
|
|
|
# 1. 사용자 존재 확인
|
|
user = self.user_repository.get_by_id(request.id)
|
|
if not user:
|
|
raise UserNotFoundError()
|
|
|
|
# 2. 업체 수정
|
|
update_data = {
|
|
"name": request.name,
|
|
"address": request.address,
|
|
"url": request.url,
|
|
"phone_number": request.phone_number
|
|
}
|
|
|
|
updated_item = self.item_repository.update_item(request.item_id, update_data)
|
|
|
|
if not updated_item:
|
|
raise ItemNotFoundError()
|
|
|
|
return UpdateItemResponse(
|
|
success=True,
|
|
item_id=updated_item.id
|
|
)
|
|
|
|
def delete_item(self, request: DeleteUserItemRequest) -> DeleteUserItemResponse:
|
|
'''ID로 업체 삭제'''
|
|
|
|
# 1. 사용자 확인
|
|
user = self.user_repository.get_by_id(request.id)
|
|
if not user:
|
|
raise UserNotFoundError()
|
|
|
|
# 2. 삭제 시도
|
|
deleted = self.item_repository.delete_item(request.item_id)
|
|
|
|
if not deleted:
|
|
raise ItemNotFoundError()
|
|
|
|
return DeleteUserItemResponse(
|
|
success=True,
|
|
item_id=request.item_id
|
|
)
|
|
|
|
def get_user_name(self, request: GetUserNameRequest) -> GetUserNameResponse:
|
|
'''user_id로 사용자 이름 조회'''
|
|
|
|
# 1. 사용자 확인
|
|
user = self.user_repository.get_by_id(request.user_id)
|
|
if not user:
|
|
raise UserNotFoundError()
|
|
|
|
#2. 유저이름 조회
|
|
name = self.user_repository.get_name_by_user_id(request.user_id)
|
|
|
|
if not name:
|
|
raise UserNotFoundError()
|
|
|
|
return GetUserNameResponse(name=name)
|
|
|
|
|
|
def update_user_profile(self, request: UpdateUserProfileRequest) -> UpdateUserProfileResponse:
|
|
'''user의 id로 사용자 프로필 수정'''
|
|
|
|
# 1. 사용자 존재 확인
|
|
user = self.user_repository.get_by_id(request.id)
|
|
if not user:
|
|
raise UserNotFoundError()
|
|
|
|
update_data = {
|
|
"name": request.name,
|
|
"email": request.email,
|
|
"phone_number": request.phone_number
|
|
}
|
|
|
|
updated_user = self.user_repository.update_user(request.id, update_data)
|
|
|
|
if not updated_user:
|
|
raise UserNotFoundError()
|
|
|
|
return UpdateUserProfileResponse(
|
|
success=True,
|
|
id=updated_user.id
|
|
)
|
|
|
|
|
|
|
|
def get_user_profile(self, request: GetUserProfileRequest) -> GetUserProfileResponse:
|
|
'''user의 id로 사용자 프로필 조회'''
|
|
# 1. 사용자 확인
|
|
user = self.user_repository.get_by_id(request.id)
|
|
if not user:
|
|
raise UserNotFoundError()
|
|
|
|
# create_at 형식 변경
|
|
created_at = user.created_at.date().strftime("%Y-%m-%d")
|
|
|
|
# 2. 사용자 프로필 반환
|
|
return GetUserProfileResponse(
|
|
id=user.id,
|
|
name=user.name,
|
|
email=user.email,
|
|
phone_number=user.phone_number,
|
|
created_at=created_at
|
|
) |