Я согласен с Уиллом в этом вопросе.
Создайте «события» на страницах, чтобы каждый раз, когда событие происходит, т.е. пользователь удаляет сообщение, он запрашивает у модуля события событие, скажем, EVENT_USER_DELETE_POST, а затем вы можете выбрать это событие и построить запрос на его основе. Затем вы можете решить, будет ли награжден значок или нет.
Это позволит разделить две логики и сохранить модульную конструкцию. Это должно быть очень легко реализовать таким образом.
Единственным недостатком является то, что если событие не было «захвачено», то пользователь вполне мог заработать критерий значка, но он еще не был вознагражден. Однако этого никогда не должно происходить. Единственная ситуация, о которой я могу думать, - это если база данных обрабатывается вручную.