fix: [FL-195][创建用户报错] 为用户服务事务添加异常处理和回滚机制

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
chengkai3
2026-06-18 12:26:58 +08:00
parent 172e124d4d
commit 80cf981fdb
+21
View File
@@ -114,6 +114,7 @@ def create_user(
status="ENABLED",
)
try:
db.add(user)
db.flush()
_assign_legacy_roles(db, user_id, [])
@@ -128,6 +129,9 @@ def create_user(
),
)
db.commit()
except SQLAlchemyError:
db.rollback()
return None
created = get_user_by_id(db, user_id)
if created:
@@ -150,6 +154,7 @@ def delete_user(db: Session, user_id: str, *, actor_user_id: str | None) -> bool
return False
target_username = user.username
try:
revoke_active_sessions_for_user(db, user_id)
write_audit_log(
db,
@@ -162,6 +167,9 @@ def delete_user(db: Session, user_id: str, *, actor_user_id: str | None) -> bool
)
db.delete(user)
db.commit()
except SQLAlchemyError:
db.rollback()
return False
_fire_and_forget(
publish_topic(
@@ -186,6 +194,7 @@ def reset_user_password(
if not user:
return None
try:
user.password_hash = hash_password(payload.new_password)
revoke_active_sessions_for_user(db, user_id)
write_audit_log(
@@ -200,6 +209,9 @@ def reset_user_password(
),
)
db.commit()
except SQLAlchemyError:
db.rollback()
return None
updated = get_user_by_id(db, user_id)
if updated:
@@ -276,6 +288,7 @@ def update_user(
if not changed_fields:
return serialize_user(user)
try:
write_audit_log(
db,
action="user.update",
@@ -292,6 +305,10 @@ def update_user(
),
)
db.commit()
except SQLAlchemyError:
db.rollback()
return None
updated = get_user_by_id(db, user_id)
if updated:
queue_user_auth_refresh(updated, status_changed=status_changed)
@@ -339,6 +356,7 @@ def set_user_roles(
updated = get_user_by_id(db, user_id)
if updated:
authz = get_user_authorization(db, updated.id)
try:
write_audit_log(
db,
action="user.roles.replace",
@@ -350,6 +368,9 @@ def set_user_roles(
),
)
db.commit()
except SQLAlchemyError:
db.rollback()
return None
queue_user_auth_refresh(updated)
_fire_and_forget(
publish_topic(