refactor: replace SQLModel with QueryModel in various models and update query methods
This commit is contained in:
@@ -42,7 +42,7 @@ async def build_group_snapshot(
|
||||
include_done: bool = False,
|
||||
per_board_task_limit: int = 5,
|
||||
) -> BoardGroupSnapshot:
|
||||
statement = select(Board).where(col(Board.board_group_id) == group.id)
|
||||
statement = Board.objects.filter_by(board_group_id=group.id).statement
|
||||
if exclude_board_id is not None:
|
||||
statement = statement.where(col(Board.id) != exclude_board_id)
|
||||
boards = list(await session.exec(statement.order_by(func.lower(col(Board.name)).asc())))
|
||||
@@ -146,7 +146,7 @@ async def build_board_group_snapshot(
|
||||
) -> BoardGroupSnapshot:
|
||||
if not board.board_group_id:
|
||||
return BoardGroupSnapshot(group=None, boards=[])
|
||||
group = await session.get(BoardGroup, board.board_group_id)
|
||||
group = await BoardGroup.objects.by_id(board.board_group_id).first(session)
|
||||
if group is None:
|
||||
return BoardGroupSnapshot(group=None, boards=[])
|
||||
return await build_group_snapshot(
|
||||
|
||||
@@ -97,9 +97,9 @@ async def build_board_snapshot(session: AsyncSession, board: Board) -> BoardSnap
|
||||
board_read = BoardRead.model_validate(board, from_attributes=True)
|
||||
|
||||
tasks = list(
|
||||
await session.exec(
|
||||
select(Task).where(col(Task.board_id) == board.id).order_by(col(Task.created_at).desc())
|
||||
)
|
||||
await Task.objects.filter_by(board_id=board.id)
|
||||
.order_by(col(Task.created_at).desc())
|
||||
.all(session)
|
||||
)
|
||||
task_ids = [task.id for task in tasks]
|
||||
|
||||
@@ -114,12 +114,10 @@ async def build_board_snapshot(session: AsyncSession, board: Board) -> BoardSnap
|
||||
)
|
||||
|
||||
main_session_keys = await _gateway_main_session_keys(session)
|
||||
agents = list(
|
||||
await session.exec(
|
||||
select(Agent)
|
||||
.where(col(Agent.board_id) == board.id)
|
||||
.order_by(col(Agent.created_at).desc())
|
||||
)
|
||||
agents = (
|
||||
await Agent.objects.filter_by(board_id=board.id)
|
||||
.order_by(col(Agent.created_at).desc())
|
||||
.all(session)
|
||||
)
|
||||
agent_reads = [_agent_to_read(agent, main_session_keys) for agent in agents]
|
||||
agent_name_by_id = {agent.id: agent.name for agent in agents}
|
||||
@@ -134,13 +132,11 @@ async def build_board_snapshot(session: AsyncSession, board: Board) -> BoardSnap
|
||||
).one()
|
||||
)
|
||||
|
||||
approvals = list(
|
||||
await session.exec(
|
||||
select(Approval)
|
||||
.where(col(Approval.board_id) == board.id)
|
||||
.order_by(col(Approval.created_at).desc())
|
||||
.limit(200)
|
||||
)
|
||||
approvals = (
|
||||
await Approval.objects.filter_by(board_id=board.id)
|
||||
.order_by(col(Approval.created_at).desc())
|
||||
.limit(200)
|
||||
.all(session)
|
||||
)
|
||||
approval_reads = [_approval_to_read(approval) for approval in approvals]
|
||||
|
||||
@@ -173,17 +169,15 @@ async def build_board_snapshot(session: AsyncSession, board: Board) -> BoardSnap
|
||||
for task in tasks
|
||||
]
|
||||
|
||||
chat_messages = list(
|
||||
await session.exec(
|
||||
select(BoardMemory)
|
||||
.where(col(BoardMemory.board_id) == board.id)
|
||||
.where(col(BoardMemory.is_chat).is_(True))
|
||||
# Old/invalid rows (empty/whitespace-only content) can exist; exclude them to
|
||||
# satisfy the NonEmptyStr response schema.
|
||||
.where(func.length(func.trim(col(BoardMemory.content))) > 0)
|
||||
.order_by(col(BoardMemory.created_at).desc())
|
||||
.limit(200)
|
||||
)
|
||||
chat_messages = (
|
||||
await BoardMemory.objects.filter_by(board_id=board.id)
|
||||
.filter(col(BoardMemory.is_chat).is_(True))
|
||||
# Old/invalid rows (empty/whitespace-only content) can exist; exclude them to
|
||||
# satisfy the NonEmptyStr response schema.
|
||||
.filter(func.length(func.trim(col(BoardMemory.content))) > 0)
|
||||
.order_by(col(BoardMemory.created_at).desc())
|
||||
.limit(200)
|
||||
.all(session)
|
||||
)
|
||||
chat_messages.sort(key=lambda item: item.created_at)
|
||||
chat_reads = [_memory_to_read(memory) for memory in chat_messages]
|
||||
|
||||
@@ -19,7 +19,6 @@ from app.models.organization_invites import OrganizationInvite
|
||||
from app.models.organization_members import OrganizationMember
|
||||
from app.models.organizations import Organization
|
||||
from app.models.users import User
|
||||
from app.queries import organizations as org_queries
|
||||
from app.schemas.organizations import OrganizationBoardAccessSpec, OrganizationMemberAccessUpdate
|
||||
|
||||
DEFAULT_ORG_NAME = "Personal"
|
||||
@@ -38,7 +37,7 @@ def is_org_admin(member: OrganizationMember) -> bool:
|
||||
|
||||
|
||||
async def get_default_org(session: AsyncSession) -> Organization | None:
|
||||
return await org_queries.organization_by_name(DEFAULT_ORG_NAME).first(session)
|
||||
return await Organization.objects.filter_by(name=DEFAULT_ORG_NAME).first(session)
|
||||
|
||||
|
||||
async def ensure_default_org(session: AsyncSession) -> Organization:
|
||||
@@ -58,14 +57,18 @@ async def get_member(
|
||||
user_id: UUID,
|
||||
organization_id: UUID,
|
||||
) -> OrganizationMember | None:
|
||||
return await org_queries.member_by_user_and_org(
|
||||
return await OrganizationMember.objects.filter_by(
|
||||
user_id=user_id,
|
||||
organization_id=organization_id,
|
||||
).first(session)
|
||||
|
||||
|
||||
async def get_first_membership(session: AsyncSession, user_id: UUID) -> OrganizationMember | None:
|
||||
return await org_queries.first_membership_for_user(user_id).first(session)
|
||||
return (
|
||||
await OrganizationMember.objects.filter_by(user_id=user_id)
|
||||
.order_by(col(OrganizationMember.created_at).asc())
|
||||
.first(session)
|
||||
)
|
||||
|
||||
|
||||
async def set_active_organization(
|
||||
@@ -88,7 +91,7 @@ async def get_active_membership(
|
||||
session: AsyncSession,
|
||||
user: User,
|
||||
) -> OrganizationMember | None:
|
||||
db_user = await session.get(User, user.id)
|
||||
db_user = await User.objects.by_id(user.id).first(session)
|
||||
if db_user is None:
|
||||
db_user = user
|
||||
if db_user.active_organization_id:
|
||||
@@ -119,7 +122,14 @@ async def _find_pending_invite(
|
||||
session: AsyncSession,
|
||||
email: str,
|
||||
) -> OrganizationInvite | None:
|
||||
return await org_queries.pending_invite_by_email(email).first(session)
|
||||
return (
|
||||
await OrganizationInvite.objects.filter(
|
||||
col(OrganizationInvite.accepted_at).is_(None),
|
||||
col(OrganizationInvite.invited_email) == email,
|
||||
)
|
||||
.order_by(col(OrganizationInvite.created_at).asc())
|
||||
.first(session)
|
||||
)
|
||||
|
||||
|
||||
async def accept_invite(
|
||||
@@ -230,7 +240,7 @@ async def has_board_access(
|
||||
else:
|
||||
if member_all_boards_read(member):
|
||||
return True
|
||||
access = await org_queries.board_access_for_member_and_board(
|
||||
access = await OrganizationBoardAccess.objects.filter_by(
|
||||
organization_member_id=member.id,
|
||||
board_id=board.id,
|
||||
).first(session)
|
||||
|
||||
@@ -328,7 +328,7 @@ async def sync_gateway_templates(
|
||||
result.errors.append(GatewayTemplatesSyncError(message=str(exc)))
|
||||
return result
|
||||
|
||||
boards = list(await session.exec(select(Board).where(col(Board.gateway_id) == gateway.id)))
|
||||
boards = await Board.objects.filter_by(gateway_id=gateway.id).all(session)
|
||||
boards_by_id = {board.id: board for board in boards}
|
||||
if board_id is not None:
|
||||
board = boards_by_id.get(board_id)
|
||||
@@ -345,12 +345,10 @@ async def sync_gateway_templates(
|
||||
paused_board_ids = await _paused_board_ids(session, list(boards_by_id.keys()))
|
||||
|
||||
if boards_by_id:
|
||||
agents = list(
|
||||
await session.exec(
|
||||
select(Agent)
|
||||
.where(col(Agent.board_id).in_(list(boards_by_id.keys())))
|
||||
.order_by(col(Agent.created_at).asc())
|
||||
)
|
||||
agents = await (
|
||||
Agent.objects.by_field_in("board_id", list(boards_by_id.keys()))
|
||||
.order_by(col(Agent.created_at).asc())
|
||||
.all(session)
|
||||
)
|
||||
else:
|
||||
agents = []
|
||||
@@ -471,10 +469,10 @@ async def sync_gateway_templates(
|
||||
|
||||
if include_main:
|
||||
main_agent = (
|
||||
await session.exec(
|
||||
select(Agent).where(col(Agent.openclaw_session_id) == gateway.main_session_key)
|
||||
)
|
||||
).first()
|
||||
await Agent.objects.all()
|
||||
.filter(col(Agent.openclaw_session_id) == gateway.main_session_key)
|
||||
.first(session)
|
||||
)
|
||||
if main_agent is None:
|
||||
result.errors.append(
|
||||
GatewayTemplatesSyncError(
|
||||
|
||||
Reference in New Issue
Block a user