zalsaeed / cgav

Certificate Generation and Verification
GNU General Public License v3.0
3 stars 1 forks source link

Database Update Bug: Fixed Using SQLAlchemy Update Method #11

Closed wesamhamad closed 7 months ago

wesamhamad commented 7 months ago

Problem Overview

The original code attempted to delete an event type by updating the is_active field to False. However, this approach lacked precision and didn't effectively reflect the change in the database. The implementation relied on a conventional update statement, which might not have been sufficient for SQLAlchemy's ORM to track and apply the modification accurately.

Solution Overview

To enhance the precision of the update operation and ensure a reliable modification in the database, I opted for SQLAlchemy's update method. This method provides a more direct and specific way to construct SQL UPDATE statements.

Key Changes Explained

1. Precision with update Method

The update method allows us to precisely construct SQL UPDATE statements, specifying the table, conditions, and values. In this case, update(EventType) designates the table to be updated, where(EventType.event_type_name == type_name) sets the condition for the update, and values(is_active=False) indicates the new value for the is_active column.

Before Update (Bug)

if deleted_event_type:
    try:
        deleted_event_type.is_active = False
        db.session.commit()
        return jsonify({'message': f'The type "{type_name}" has been deleted.'})
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': f'An error occurred while updating the database: {str(e)}'})
else:
    return jsonify({'message': f'The type "{type_name}" does not exist.'})

After Update (Resolution)

elif action == 'delete':
        try:
            stmt = update(EventType).where(EventType.event_type_name == type_name).values(is_active=False)
            db.session.execute(stmt)
            db.session.commit()
            return jsonify({'message': f'The type "{type_name}" has been deleted.'})
        except Exception as e:
            db.session.rollback()
            return jsonify({'error': f'An error occurred while updating the database: {str(e)}'})

Specifically

#Before 
deleted_event_type.is_active = False

#After
stmt = update(EventType).where(EventType.event_type_name == type_name).values(is_active=False)