error fixing
This commit is contained in:
@@ -52,10 +52,12 @@ class ReportConsumer:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing report message: {e}", exc_info=True)
|
||||
# Rollback explícito en caso de error
|
||||
self.user_repo.db.rollback()
|
||||
raise
|
||||
|
||||
def _handle_create_report(self, message: ReportMessage):
|
||||
"""Handle report create event"""
|
||||
"""Handle report create event con manejo de transacciones cruzadas"""
|
||||
try:
|
||||
logger.info(f"Creating report: {message.id_reporte} from user {message.id_usuario}")
|
||||
|
||||
@@ -73,20 +75,33 @@ class ReportConsumer:
|
||||
fecha_creacion=fecha_creacion
|
||||
)
|
||||
|
||||
# Save to repository
|
||||
saved_report = self.repo.save(report)
|
||||
logger.info(f"Report created successfully: {message.id_reporte}")
|
||||
try:
|
||||
# Save to MongoDB repository
|
||||
saved_report = self.repo.save(report)
|
||||
logger.info(f"Report created successfully in MongoDB: {message.id_reporte}")
|
||||
except Exception as mongo_error:
|
||||
logger.error(f"Error saving report to MongoDB: {mongo_error}", exc_info=True)
|
||||
raise
|
||||
|
||||
# Increment user's report counter
|
||||
self.user_repo.increment_reports(message.id_usuario)
|
||||
logger.info(f"Incremented report counter for user: {message.id_usuario}")
|
||||
try:
|
||||
# Increment user's report counter in MySQL
|
||||
self.user_repo.increment_reports(message.id_usuario)
|
||||
logger.info(f"Incremented report counter for user: {message.id_usuario}")
|
||||
except Exception as sql_error:
|
||||
logger.error(f"Error incrementing report counter: {sql_error}", exc_info=True)
|
||||
# Rollback SQL transaction
|
||||
self.user_repo.db.rollback()
|
||||
# Note: MongoDB save cannot be rolled back, log for manual cleanup
|
||||
logger.critical(f"INCONSISTENCY: Report {message.id_reporte} saved to MongoDB but user counter not incremented for user {message.id_usuario}")
|
||||
raise
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error creating report: {e}", exc_info=True)
|
||||
self.user_repo.db.rollback()
|
||||
raise
|
||||
|
||||
def _handle_update_visibility(self, message: ReportMessage):
|
||||
"""Handle report visibility update event"""
|
||||
"""Handle report visibility update event con manejo de transacciones"""
|
||||
try:
|
||||
logger.info(f"Updating visibility for report: {message.id_reporte}")
|
||||
|
||||
@@ -96,9 +111,13 @@ class ReportConsumer:
|
||||
logger.warning(f"Report not found: {message.id_reporte}")
|
||||
return
|
||||
|
||||
# Update visibility
|
||||
self.repo.update_visibility(message.id_reporte, message.visibilidad)
|
||||
logger.info(f"Report visibility updated: {message.id_reporte} -> {message.visibilidad}")
|
||||
# Update visibility in MongoDB
|
||||
try:
|
||||
self.repo.update_visibility(message.id_reporte, message.visibilidad)
|
||||
logger.info(f"Report visibility updated: {message.id_reporte} -> {message.visibilidad}")
|
||||
except Exception as mongo_error:
|
||||
logger.error(f"Error updating report visibility in MongoDB: {mongo_error}", exc_info=True)
|
||||
raise
|
||||
|
||||
# Penalize author if visibility is very low (shadowban)
|
||||
if message.penalize_author and message.visibilidad < 20:
|
||||
@@ -109,11 +128,17 @@ class ReportConsumer:
|
||||
new_rating = max(0, user.calificacion - 5)
|
||||
self.user_repo.update_rating(report.id_usuario, new_rating)
|
||||
logger.info(f"Author penalized: user {report.id_usuario} rating reduced to {new_rating}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error penalizing author: {e}")
|
||||
|
||||
else:
|
||||
logger.warning(f"User not found for penalty: {report.id_usuario}")
|
||||
except Exception as penalty_error:
|
||||
logger.error(f"Error penalizing author: {penalty_error}", exc_info=True)
|
||||
self.user_repo.db.rollback()
|
||||
logger.critical(f"INCONSISTENCY: Report {message.id_reporte} visibility updated but author penalty failed")
|
||||
raise
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error updating report visibility: {e}", exc_info=True)
|
||||
self.user_repo.db.rollback()
|
||||
raise
|
||||
|
||||
def _handle_delete_report(self, message: ReportMessage):
|
||||
@@ -129,6 +154,7 @@ class ReportConsumer:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error deleting report: {e}", exc_info=True)
|
||||
self.user_repo.db.rollback()
|
||||
raise
|
||||
|
||||
def start(self):
|
||||
@@ -142,6 +168,13 @@ class ReportConsumer:
|
||||
except Exception as e:
|
||||
logger.error(f"Consumer error: {e}", exc_info=True)
|
||||
raise
|
||||
finally:
|
||||
# Asegurar cierre de sesión SQL
|
||||
if self.user_repo.db:
|
||||
try:
|
||||
self.user_repo.db.close()
|
||||
except Exception as e:
|
||||
logger.error(f"Error closing database session: {e}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -50,6 +50,8 @@ class UserConsumer:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing user message: {e}", exc_info=True)
|
||||
# Rollback en caso de error en el procesamiento del mensaje
|
||||
self.repo.db.rollback()
|
||||
raise
|
||||
|
||||
def _handle_create_user(self, message: UserMessage):
|
||||
@@ -75,12 +77,13 @@ class UserConsumer:
|
||||
biografia=message.biografia
|
||||
)
|
||||
|
||||
# Save to repository
|
||||
# Save to repository with transaction handling
|
||||
saved_user = self.repo.save(user)
|
||||
logger.info(f"User created successfully: {saved_user.user_id} - {saved_user.email}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error creating user: {e}", exc_info=True)
|
||||
self.repo.db.rollback()
|
||||
raise
|
||||
|
||||
def _handle_update_user(self, message: UserMessage):
|
||||
@@ -104,12 +107,13 @@ class UserConsumer:
|
||||
if message.biografia is not None:
|
||||
user.biografia = message.biografia
|
||||
|
||||
# Save to repository
|
||||
# Save to repository with transaction handling
|
||||
updated_user = self.repo.update(user)
|
||||
logger.info(f"User updated successfully: {message.user_id}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error updating user: {e}", exc_info=True)
|
||||
self.repo.db.rollback()
|
||||
raise
|
||||
|
||||
def _handle_delete_user(self, message: UserMessage):
|
||||
@@ -125,6 +129,7 @@ class UserConsumer:
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error deleting user: {e}", exc_info=True)
|
||||
self.repo.db.rollback()
|
||||
raise
|
||||
|
||||
def start(self):
|
||||
@@ -138,6 +143,13 @@ class UserConsumer:
|
||||
except Exception as e:
|
||||
logger.error(f"Consumer error: {e}", exc_info=True)
|
||||
raise
|
||||
finally:
|
||||
# Asegurar cierre de sesión
|
||||
if self.repo.db:
|
||||
try:
|
||||
self.repo.db.close()
|
||||
except Exception as e:
|
||||
logger.error(f"Error closing database session: {e}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user