""" Notification Serializers """ from rest_framework import serializers from .models import Notification class NotificationSerializer(serializers.ModelSerializer): """Serializer for Notification model""" site_name = serializers.CharField(source='site.name', read_only=True, default=None) class Meta: model = Notification fields = [ 'id', 'notification_type', 'title', 'message', 'severity', 'site', 'site_name', 'action_url', 'action_label', 'is_read', 'read_at', 'metadata', 'created_at', ] read_only_fields = ['id', 'created_at', 'read_at'] class NotificationListSerializer(serializers.ModelSerializer): """Lightweight serializer for notification lists""" site_name = serializers.CharField(source='site.name', read_only=True, default=None) time_ago = serializers.SerializerMethodField() class Meta: model = Notification fields = [ 'id', 'notification_type', 'title', 'message', 'severity', 'site_name', 'action_url', 'action_label', 'is_read', 'created_at', 'time_ago', 'metadata', ] def get_time_ago(self, obj): """Return human-readable time since notification""" from django.utils import timezone from datetime import timedelta now = timezone.now() diff = now - obj.created_at if diff < timedelta(minutes=1): return 'Just now' elif diff < timedelta(hours=1): minutes = int(diff.total_seconds() / 60) return f'{minutes} minute{"s" if minutes != 1 else ""} ago' elif diff < timedelta(days=1): hours = int(diff.total_seconds() / 3600) return f'{hours} hour{"s" if hours != 1 else ""} ago' elif diff < timedelta(days=7): days = diff.days if days == 1: return 'Yesterday' return f'{days} days ago' else: return obj.created_at.strftime('%b %d, %Y') class MarkReadSerializer(serializers.Serializer): """Serializer for marking notifications as read""" notification_ids = serializers.ListField( child=serializers.IntegerField(), required=False, help_text='List of notification IDs to mark as read. If empty, marks all as read.' )