feat: Add base project structure with API and web components
This commit is contained in:
171
api/app/repositories/__init__.py
Normal file
171
api/app/repositories/__init__.py
Normal file
@@ -0,0 +1,171 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""仓储模块
|
||||
|
||||
本模块提供统一的数据访问层,包括PostgreSQL和Neo4j的仓储实现。
|
||||
|
||||
Classes:
|
||||
RepositoryFactory: 仓储工厂,统一管理所有数据库的仓储实例
|
||||
"""
|
||||
|
||||
from typing import Optional
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.repositories.neo4j.neo4j_connector import Neo4jConnector
|
||||
from app.repositories.neo4j.dialog_repository import DialogRepository
|
||||
from app.repositories.neo4j.statement_repository import StatementRepository
|
||||
from app.repositories.neo4j.entity_repository import EntityRepository
|
||||
from app.repositories.user_repository import UserRepository
|
||||
from app.repositories.workspace_repository import WorkspaceRepository
|
||||
from app.repositories.app_repository import AppRepository
|
||||
|
||||
|
||||
class RepositoryFactory:
|
||||
"""仓储工厂 - 统一管理所有数据库的仓储
|
||||
|
||||
这个工厂类提供了获取各种仓储实例的统一接口。
|
||||
支持Neo4j图数据库和PostgreSQL关系数据库的仓储。
|
||||
|
||||
Attributes:
|
||||
neo4j_connector: Neo4j连接器实例(可选)
|
||||
db_session: SQLAlchemy数据库会话(可选)
|
||||
|
||||
Example:
|
||||
>>> # 创建工厂实例
|
||||
>>> factory = RepositoryFactory(
|
||||
... neo4j_connector=Neo4jConnector(),
|
||||
... db_session=db_session
|
||||
... )
|
||||
>>>
|
||||
>>> # 获取Neo4j仓储
|
||||
>>> dialog_repo = factory.get_dialog_repository()
|
||||
>>> statement_repo = factory.get_statement_repository()
|
||||
>>>
|
||||
>>> # 获取PostgreSQL仓储
|
||||
>>> knowledge_repo = factory.get_knowledge_repository()
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
neo4j_connector: Optional[Neo4jConnector] = None,
|
||||
db_session: Optional[Session] = None
|
||||
):
|
||||
"""初始化仓储工厂
|
||||
|
||||
Args:
|
||||
neo4j_connector: Neo4j连接器实例(可选)
|
||||
db_session: SQLAlchemy数据库会话(可选)
|
||||
"""
|
||||
self.neo4j_connector = neo4j_connector
|
||||
self.db_session = db_session
|
||||
|
||||
# ==================== Neo4j 仓储 ====================
|
||||
|
||||
def get_dialog_repository(self) -> DialogRepository:
|
||||
"""获取对话仓储
|
||||
|
||||
Returns:
|
||||
DialogRepository: 对话仓储实例
|
||||
|
||||
Raises:
|
||||
ValueError: 如果Neo4j连接器未初始化
|
||||
"""
|
||||
if not self.neo4j_connector:
|
||||
raise ValueError("Neo4j connector not initialized")
|
||||
return DialogRepository(self.neo4j_connector)
|
||||
|
||||
def get_statement_repository(self) -> StatementRepository:
|
||||
"""获取陈述句仓储
|
||||
|
||||
Returns:
|
||||
StatementRepository: 陈述句仓储实例
|
||||
|
||||
Raises:
|
||||
ValueError: 如果Neo4j连接器未初始化
|
||||
"""
|
||||
if not self.neo4j_connector:
|
||||
raise ValueError("Neo4j connector not initialized")
|
||||
return StatementRepository(self.neo4j_connector)
|
||||
|
||||
def get_entity_repository(self) -> EntityRepository:
|
||||
"""获取实体仓储
|
||||
|
||||
Returns:
|
||||
EntityRepository: 实体仓储实例
|
||||
|
||||
Raises:
|
||||
ValueError: 如果Neo4j连接器未初始化
|
||||
"""
|
||||
if not self.neo4j_connector:
|
||||
raise ValueError("Neo4j connector not initialized")
|
||||
return EntityRepository(self.neo4j_connector)
|
||||
|
||||
# ==================== PostgreSQL 仓储 ====================
|
||||
# 注意:现有的PostgreSQL仓储保持不变,这里只是提供统一的访问接口
|
||||
# 部分仓储(如knowledge_repository、document_repository)使用函数式接口
|
||||
# 部分仓储(如user_repository、workspace_repository)使用类接口
|
||||
|
||||
def get_user_repository(self) -> UserRepository:
|
||||
"""获取用户仓储
|
||||
|
||||
Returns:
|
||||
UserRepository: 用户仓储实例
|
||||
|
||||
Raises:
|
||||
ValueError: 如果数据库会话未初始化
|
||||
"""
|
||||
if not self.db_session:
|
||||
raise ValueError("Database session not initialized")
|
||||
return UserRepository(self.db_session)
|
||||
|
||||
def get_workspace_repository(self) -> WorkspaceRepository:
|
||||
"""获取工作空间仓储
|
||||
|
||||
Returns:
|
||||
WorkspaceRepository: 工作空间仓储实例
|
||||
|
||||
Raises:
|
||||
ValueError: 如果数据库会话未初始化
|
||||
"""
|
||||
if not self.db_session:
|
||||
raise ValueError("Database session not initialized")
|
||||
return WorkspaceRepository(self.db_session)
|
||||
|
||||
def get_app_repository(self) -> AppRepository:
|
||||
"""获取应用仓储
|
||||
|
||||
Returns:
|
||||
AppRepository: 应用仓储实例
|
||||
|
||||
Raises:
|
||||
ValueError: 如果数据库会话未初始化
|
||||
"""
|
||||
if not self.db_session:
|
||||
raise ValueError("Database session not initialized")
|
||||
return AppRepository(self.db_session)
|
||||
|
||||
def get_db_session(self) -> Session:
|
||||
"""获取数据库会话
|
||||
|
||||
用于访问函数式仓储(如knowledge_repository、document_repository)
|
||||
|
||||
Returns:
|
||||
Session: SQLAlchemy数据库会话
|
||||
|
||||
Raises:
|
||||
ValueError: 如果数据库会话未初始化
|
||||
|
||||
Example:
|
||||
>>> factory = RepositoryFactory(db_session=session)
|
||||
>>> db = factory.get_db_session()
|
||||
>>> # 使用函数式仓储
|
||||
>>> from app.repositories import knowledge_repository
|
||||
>>> knowledges = knowledge_repository.get_knowledges_paginated(db, [], 1, 10)
|
||||
"""
|
||||
if not self.db_session:
|
||||
raise ValueError("Database session not initialized")
|
||||
return self.db_session
|
||||
|
||||
|
||||
__all__ = [
|
||||
'RepositoryFactory',
|
||||
]
|
||||
Reference in New Issue
Block a user