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 )