Mudanza de repo
This commit is contained in:
103
api/logger/mixins.py
Normal file
103
api/logger/mixins.py
Normal file
@@ -0,0 +1,103 @@
|
||||
from .utils import log_user_activity
|
||||
|
||||
class LoggingMixin:
|
||||
"""
|
||||
Mixin para añadir logging automático a ViewSets
|
||||
"""
|
||||
log_actions = True
|
||||
log_object_type = None
|
||||
|
||||
def get_log_object_type(self):
|
||||
"""Obtiene el tipo de objeto del modelo del ViewSet"""
|
||||
if self.log_object_type:
|
||||
return self.log_object_type
|
||||
|
||||
if hasattr(self, 'queryset') and self.queryset is not None:
|
||||
return self.queryset.model.__name__
|
||||
|
||||
if hasattr(self, 'model') and self.model is not None:
|
||||
return self.model.__name__
|
||||
|
||||
return self.__class__.__name__.replace('ViewSet', '')
|
||||
|
||||
def perform_create(self, serializer):
|
||||
"""Override para loggear creaciones"""
|
||||
instance = serializer.save()
|
||||
|
||||
if self.log_actions and self.request.user.is_authenticated:
|
||||
log_user_activity(
|
||||
user=self.request.user,
|
||||
action='create',
|
||||
object_type=self.get_log_object_type(),
|
||||
object_id=instance.pk,
|
||||
description=f'Creado {self.get_log_object_type()} {instance.pk}',
|
||||
request=self.request
|
||||
)
|
||||
|
||||
return instance
|
||||
|
||||
def perform_update(self, serializer):
|
||||
"""Override para loggear actualizaciones"""
|
||||
instance = serializer.save()
|
||||
|
||||
if self.log_actions and self.request.user.is_authenticated:
|
||||
log_user_activity(
|
||||
user=self.request.user,
|
||||
action='update',
|
||||
object_type=self.get_log_object_type(),
|
||||
object_id=instance.pk,
|
||||
description=f'Actualizado {self.get_log_object_type()} {instance.pk}',
|
||||
request=self.request
|
||||
)
|
||||
|
||||
return instance
|
||||
|
||||
def perform_destroy(self, instance):
|
||||
"""Override para loggear eliminaciones"""
|
||||
object_id = instance.pk
|
||||
object_type = self.get_log_object_type()
|
||||
|
||||
instance.delete()
|
||||
|
||||
if self.log_actions and self.request.user.is_authenticated:
|
||||
log_user_activity(
|
||||
user=self.request.user,
|
||||
action='delete',
|
||||
object_type=object_type,
|
||||
object_id=object_id,
|
||||
description=f'Eliminado {object_type} {object_id}',
|
||||
request=self.request
|
||||
)
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
"""Override para loggear visualizaciones de detalle"""
|
||||
response = super().retrieve(request, *args, **kwargs)
|
||||
|
||||
if self.log_actions and request.user.is_authenticated:
|
||||
instance = self.get_object()
|
||||
log_user_activity(
|
||||
user=request.user,
|
||||
action='view',
|
||||
object_type=self.get_log_object_type(),
|
||||
object_id=instance.pk,
|
||||
description=f'Visto detalle de {self.get_log_object_type()} {instance.pk}',
|
||||
request=request
|
||||
)
|
||||
|
||||
return response
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
"""Override para loggear listados"""
|
||||
response = super().list(request, *args, **kwargs)
|
||||
|
||||
if self.log_actions and request.user.is_authenticated:
|
||||
log_user_activity(
|
||||
user=request.user,
|
||||
action='view',
|
||||
object_type=self.get_log_object_type(),
|
||||
object_id='',
|
||||
description=f'Visto listado de {self.get_log_object_type()}',
|
||||
request=request
|
||||
)
|
||||
|
||||
return response
|
||||
Reference in New Issue
Block a user