perf: optimize database queries in functions, feedbacks, and groups (#21019)
This commit is contained in:
@@ -460,23 +460,15 @@ class FeedbackTable:
|
|||||||
self, user_id: str, db: Optional[Session] = None
|
self, user_id: str, db: Optional[Session] = None
|
||||||
) -> bool:
|
) -> bool:
|
||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
feedbacks = db.query(Feedback).filter_by(user_id=user_id).all()
|
result = db.query(Feedback).filter_by(user_id=user_id).delete()
|
||||||
if not feedbacks:
|
|
||||||
return False
|
|
||||||
for feedback in feedbacks:
|
|
||||||
db.delete(feedback)
|
|
||||||
db.commit()
|
db.commit()
|
||||||
return True
|
return result > 0
|
||||||
|
|
||||||
def delete_all_feedbacks(self, db: Optional[Session] = None) -> bool:
|
def delete_all_feedbacks(self, db: Optional[Session] = None) -> bool:
|
||||||
with get_db_context(db) as db:
|
with get_db_context(db) as db:
|
||||||
feedbacks = db.query(Feedback).all()
|
result = db.query(Feedback).delete()
|
||||||
if not feedbacks:
|
|
||||||
return False
|
|
||||||
for feedback in feedbacks:
|
|
||||||
db.delete(feedback)
|
|
||||||
db.commit()
|
db.commit()
|
||||||
return True
|
return result > 0
|
||||||
|
|
||||||
|
|
||||||
Feedbacks = FeedbackTable()
|
Feedbacks = FeedbackTable()
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ class FunctionsTable:
|
|||||||
function.updated_at = int(time.time())
|
function.updated_at = int(time.time())
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(function)
|
db.refresh(function)
|
||||||
return self.get_function_by_id(id, db=db)
|
return FunctionModel.model_validate(function)
|
||||||
except Exception:
|
except Exception:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -319,7 +319,7 @@ class FunctionsTable:
|
|||||||
function.updated_at = int(time.time())
|
function.updated_at = int(time.time())
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(function)
|
db.refresh(function)
|
||||||
return self.get_function_by_id(id, db=db)
|
return FunctionModel.model_validate(function)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -381,7 +381,8 @@ class FunctionsTable:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
return self.get_function_by_id(id, db=db)
|
function = db.get(Function, id)
|
||||||
|
return FunctionModel.model_validate(function) if function else None
|
||||||
except Exception:
|
except Exception:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
@@ -589,11 +589,10 @@ class GroupTable:
|
|||||||
if not user_ids:
|
if not user_ids:
|
||||||
return GroupModel.model_validate(group)
|
return GroupModel.model_validate(group)
|
||||||
|
|
||||||
# Remove each user from group_member
|
# Remove users from group_member in batch
|
||||||
for user_id in user_ids:
|
db.query(GroupMember).filter(
|
||||||
db.query(GroupMember).filter(
|
GroupMember.group_id == id, GroupMember.user_id.in_(user_ids)
|
||||||
GroupMember.group_id == id, GroupMember.user_id == user_id
|
).delete(synchronize_session=False)
|
||||||
).delete()
|
|
||||||
|
|
||||||
# Update group timestamp
|
# Update group timestamp
|
||||||
group.updated_at = int(time.time())
|
group.updated_at = int(time.time())
|
||||||
|
|||||||
Reference in New Issue
Block a user