Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
⚡️ update methods to use SQLAlchemy Core and async
Browse files Browse the repository at this point in the history
agn-7 committed Nov 30, 2023
1 parent ce3d184 commit 1612ae9
Showing 2 changed files with 25 additions and 24 deletions.
36 changes: 19 additions & 17 deletions ifsguid/crud.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from typing import List
from uuid import UUID

from sqlalchemy.orm import Session, joinedload, selectinload
from sqlalchemy import delete, update
from sqlalchemy.orm import joinedload
from sqlalchemy.future import select
from sqlalchemy.ext.asyncio import AsyncSession

@@ -40,13 +41,11 @@ async def create_interaction(


async def delete_interaction(db: AsyncSession, id: UUID) -> None:
interaction = (
db.query(models.Interaction).filter(models.Interaction.id == id).first()
)
stmt = delete(models.Interaction).where(models.Interaction.id == id)
result = await db.execute(stmt)

if interaction is not None:
db.delete(interaction)
db.commit()
if result.rowcount:
await db.commit()
return True

return False
@@ -55,30 +54,33 @@ async def delete_interaction(db: AsyncSession, id: UUID) -> None:
async def update_interaction(
db: AsyncSession, id: UUID, settings: schemas.Settings
) -> models.Interaction:
interaction: models.Interaction = (
db.query(models.Interaction).filter(models.Interaction.id == id).first()
stmt = (
update(models.Interaction).
where(models.Interaction.id == id).
values(settings=settings)
)
result = await db.execute(stmt)

if interaction is not None:
interaction.settings = settings
db.commit()
return interaction
if result.rowcount:
await db.commit()
return True

return None


async def get_messages(
db: AsyncSession, interaction_id: UUID = None, page: int = None, per_page: int = 10
) -> List[models.Message]:
query = db.query(models.Message)
stmt = select(models.Message)

if interaction_id is not None:
query = query.filter(models.Message.interaction_id == interaction_id)
stmt = stmt.where(models.Message.interaction_id == interaction_id)

if page is not None:
query = query.offset((page - 1) * per_page).limit(per_page)
stmt = stmt.offset((page - 1) * per_page).limit(per_page)

return query.all()
result = await db.execute(stmt)
return result.scalars().all()


async def create_message(
13 changes: 6 additions & 7 deletions ifsguid/endpoints.py
Original file line number Diff line number Diff line change
@@ -85,19 +85,18 @@ async def get_all_message_in_interaction(
per_page: Optional[int] = None,
db: AsyncSession = Depends(get_db),
) -> List[schemas.Message]:
interaction = crud.get_interaction(db=db, id=str(interaction_id))
interaction = await crud.get_interaction(db=db, id=str(interaction_id))

if not interaction:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Interaction not found"
)

return [
schemas.Message.model_validate(message)
for message in crud.get_messages(
db=db, interaction_id=str(interaction_id), page=page, per_page=per_page
)
]
messages = await crud.get_messages(
db=db, interaction_id=str(interaction_id), page=page, per_page=per_page
)

return [schemas.Message.model_validate(message) for message in messages]


@router.post(

0 comments on commit 1612ae9

Please sign in to comment.