86 lines
3.6 KiB
Python
86 lines
3.6 KiB
Python
import uuid
|
|
from sqlalchemy.orm import Session
|
|
from app.models.user_model import User
|
|
from app.models.document_model import Document
|
|
from app.schemas.document_schema import DocumentCreate, DocumentUpdate
|
|
from app.repositories import document_repository
|
|
from app.core.logging_config import get_business_logger
|
|
|
|
# Obtain a dedicated logger for business logic
|
|
business_logger = get_business_logger()
|
|
|
|
|
|
def get_documents_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 document in pages: username={current_user.username}, page={page}, pagesize={pagesize}, orderby={orderby}, desc={desc}")
|
|
|
|
try:
|
|
total, items = document_repository.get_documents_paginated(
|
|
db=db,
|
|
filters=filters,
|
|
page=page,
|
|
pagesize=pagesize,
|
|
orderby=orderby,
|
|
desc=desc
|
|
)
|
|
business_logger.info(f"The document 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 document pagination failed: username={current_user.username} - {str(e)}")
|
|
raise
|
|
|
|
|
|
def create_document(
|
|
db: Session, document: DocumentCreate, current_user: User
|
|
) -> Document:
|
|
business_logger.info(f"Create a document: {document.file_name}, creator: {current_user.username}")
|
|
|
|
try:
|
|
document.created_by = current_user.id
|
|
db_document = document_repository.create_document(
|
|
db=db, document=document
|
|
)
|
|
business_logger.info(f"The document has been successfully created: {document.file_name} (ID: {db_document.id}), creator: {current_user.username}")
|
|
return db_document
|
|
except Exception as e:
|
|
business_logger.error(f"Failed to create a document: {document.file_name} - {str(e)}")
|
|
raise
|
|
|
|
|
|
def get_document_by_id(db: Session, document_id: uuid.UUID, current_user: User) -> Document | None:
|
|
business_logger.debug(f"Query document based on ID: document_id={document_id}, username: {current_user.username}")
|
|
|
|
try:
|
|
document = document_repository.get_document_by_id(db=db, document_id=document_id)
|
|
if document:
|
|
business_logger.info(f"document query successful: {document.file_name} (ID: {document_id})")
|
|
else:
|
|
business_logger.warning(f"document does not exist: document_id={document_id}")
|
|
return document
|
|
except Exception as e:
|
|
business_logger.error(f"Failed to query the document based on the ID: document_id={document_id} - {str(e)}")
|
|
raise
|
|
|
|
|
|
def reset_documents_progress_by_kb_id(db: Session, kb_id: uuid.UUID, current_user: User) -> int:
|
|
business_logger.debug(f"Reset the processing progress of all documents under the specified knowledge base: kb_id=={kb_id}, username: {current_user.username}")
|
|
return document_repository.reset_documents_progress_by_kb_id(db=db, kb_id=kb_id)
|
|
|
|
|
|
def delete_document_by_id(db: Session, document_id: uuid.UUID, current_user: User) -> None:
|
|
business_logger.info(f"Delete document: document_id={document_id}, operator: {current_user.username}")
|
|
|
|
try:
|
|
document_repository.delete_document_by_id(db=db, document_id=document_id)
|
|
business_logger.info(f"document deleted successfully: document_id={document_id}, operator: {current_user.username}")
|
|
except Exception as e:
|
|
business_logger.error(f"Failed to delete document: document_id={document_id} - {str(e)}")
|
|
raise
|