import logging from django.db import models from asgiref.sync import sync_to_async from channels.layers import get_channel_layer from authentication.models import ExtendedUser class SystemEvent(models.Model): TYPE_CHOICES = [('ticket_created', 'ticket_created'), ('ticket_updated', 'ticket_updated'), ('ticket_deleted', 'ticket_deleted'), ('item_created', 'item_created'), ('item_updated', 'item_updated'), ('item_deleted', 'item_deleted'), ('user_created', 'user_created'), ('event_created', 'event_created'), ('event_updated', 'event_updated'), ('event_deleted', 'event_deleted'), ] id = models.AutoField(primary_key=True) timestamp = models.DateTimeField(auto_now_add=True) user = models.ForeignKey(ExtendedUser, models.SET_NULL, null=True) type = models.CharField(max_length=255, choices=TYPE_CHOICES) reference = models.IntegerField(blank=True, null=True) async def trigger_event(user, type, reference=None): log = logging.getLogger('server.log') log.info(f"Triggering event {type} for user {user} with reference {reference}") try: event = await sync_to_async(SystemEvent.objects.create, thread_sensitive=True)(user=user, type=type, reference=reference) channel_layer = get_channel_layer() await channel_layer.group_send( 'general', { 'type': 'generic.event', 'name': 'send_message_to_frontend', 'message': "event_trigered_from_views", 'event_id': event.id, } ) log.info(f"SystemEvent {event.id} triggered") return event except Exception as e: log.error(e) raise e