feat: Add base project structure with API and web components
This commit is contained in:
87
api/app/services/file_service.py
Normal file
87
api/app/services/file_service.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import uuid
|
||||
from sqlalchemy.orm import Session
|
||||
from app.models.user_model import User
|
||||
from app.models.file_model import File
|
||||
from app.schemas.file_schema import FileCreate, FileUpdate
|
||||
from app.repositories import file_repository
|
||||
from app.core.logging_config import get_business_logger
|
||||
|
||||
# Obtain a dedicated logger for business logic
|
||||
business_logger = get_business_logger()
|
||||
|
||||
|
||||
def get_files_paginated(
|
||||
db: Session,
|
||||
current_user: User,
|
||||
filters: list,
|
||||
page: int,
|
||||
pagesize: int,
|
||||
orderby: str = None,
|
||||
desc: bool = False
|
||||
) -> tuple[int, list]:
|
||||
business_logger.debug(f"Query file in pages: username={current_user.username}, page={page}, pagesize={pagesize}, orderby={orderby}, desc={desc}")
|
||||
|
||||
try:
|
||||
total, items = file_repository.get_files_paginated(
|
||||
db=db,
|
||||
filters=filters,
|
||||
page=page,
|
||||
pagesize=pagesize,
|
||||
orderby=orderby,
|
||||
desc=desc
|
||||
)
|
||||
business_logger.info(f"The file paging query has been successful: username={current_user.username}, total={total}, Number of current page={len(items)}")
|
||||
return total, items
|
||||
except Exception as e:
|
||||
business_logger.error(f"Querying file pagination failed: username={current_user.username} - {str(e)}")
|
||||
raise
|
||||
|
||||
|
||||
def create_file(
|
||||
db: Session, file: FileCreate, current_user: User
|
||||
) -> File:
|
||||
business_logger.info(f"Create a file: {file.file_name}, creator: {current_user.username}")
|
||||
|
||||
try:
|
||||
file.created_by = current_user.id
|
||||
if file.parent_id is None:
|
||||
file.parent_id = file.kb_id
|
||||
db_file = file_repository.create_file(
|
||||
db=db, file=file
|
||||
)
|
||||
business_logger.info(f"The file has been successfully created: {file.file_name} (ID: {db_file.id}), creator: {current_user.username}")
|
||||
return db_file
|
||||
except Exception as e:
|
||||
business_logger.error(f"Failed to create a file: {file.file_name} - {str(e)}")
|
||||
raise
|
||||
|
||||
|
||||
def get_file_by_id(db: Session, file_id: uuid.UUID) -> File | None:
|
||||
business_logger.debug(f"Query file based on ID: file_id={file_id}")
|
||||
|
||||
try:
|
||||
file = file_repository.get_file_by_id(db=db, file_id=file_id)
|
||||
if file:
|
||||
business_logger.info(f"file query successful: {file.file_name} (ID: {file_id})")
|
||||
else:
|
||||
business_logger.warning(f"file does not exist: file_id={file_id}")
|
||||
return file
|
||||
except Exception as e:
|
||||
business_logger.error(f"Failed to query the file based on the ID: file_id={file_id} - {str(e)}")
|
||||
raise
|
||||
|
||||
|
||||
def get_files_by_parent_id(db: Session, parent_id: uuid.UUID | None, current_user: User) -> list | None:
|
||||
business_logger.debug(f"Query file based on folder ID: parent_id={parent_id}, username: {current_user.username}")
|
||||
return file_repository.get_files_by_parent_id(db=db, parent_id=parent_id)
|
||||
|
||||
|
||||
def delete_file_by_id(db: Session, file_id: uuid.UUID, current_user: User) -> None:
|
||||
business_logger.info(f"Delete file: file_id={file_id}, operator: {current_user.username}")
|
||||
|
||||
try:
|
||||
file_repository.delete_file_by_id(db=db, file_id=file_id)
|
||||
business_logger.info(f"file_id deleted successfully: file_id={file_id}, operator: {current_user.username}")
|
||||
except Exception as e:
|
||||
business_logger.error(f"Failed to delete file: file_id={file_id} - {str(e)}")
|
||||
raise
|
||||
Reference in New Issue
Block a user