old_console/incident/serializers/incident.py
2024-11-02 14:12:45 +03:00

94 lines
3.6 KiB
Python

from django.contrib.auth.models import User
from core import serializers
from incident.models import Incident, IncidentCategory, IncidentEffect, IncidentRecommendations
class IncidentEffectSerializer(serializers.ModelSerializer):
class Meta:
model = IncidentEffect
fields = ['id', 'name', 'description']
class IncidentRecommendationsSerializer(serializers.ModelSerializer): # todo delete
class Meta:
model = IncidentRecommendations
fields = ['id', 'name', 'description']
class IncidentCategorySerializer(serializers.ModelLocalizedSerializer):
"""Incident Category incident for IncidentSerializer"""
class Meta:
model = IncidentCategory
fields = ['name', 'description', 'id']
class IncidentSerializer(serializers.ModelLocalizedSerializer):
"""Main Incident Serializer for ViewSet"""
category = IncidentCategorySerializer()
assigned_to = serializers.StringRelatedField()
events = serializers.JSONField()
notification_id = serializers.SerializerMethodField(read_only=True)
close_recommendations = IncidentRecommendationsSerializer(many=True)
effects = IncidentEffectSerializer(many=True)
def get_notification_id(self, incident: Incident) -> int:
context = self.context.get('incident_notification_id_map', {})
notification_id = context.get(str(incident.pk))
return notification_id
class Meta:
model = Incident
fields = ['user_friendly_id', 'timestamp', 'incident_id', 'title', 'category', 'importance', 'status',
'assigned_to', 'event_count', 'created', 'updated', 'deadline', 'comment', 'events',
'notification_id', 'close_recommendations', 'effects']
class IncidentsCsvExportSerializer(serializers.ModelLocalizedSerializer):
""" Serializer for CSV export of Incidents data
The idea behind parsing almost every field is that if we dont do this, than fields that are used as links to the
other models will be shown in table as the dictionary
"""
status = serializers.ReadOnlyField(source='get_status_display', allow_null=False)
category = serializers.ReadOnlyField(source='category.name', allow_null=True)
assigned_to = serializers.ReadOnlyField(source='obj.assigned_to.username', allow_null=True)
events = serializers.JSONField()
class Meta:
model = Incident
fields = ['user_friendly_id', 'timestamp', 'title', 'category', 'importance', 'status', 'assigned_to',
'event_count', 'created', 'updated', 'description', 'deadline', 'comment', 'events']
class DumpIncidentSerializer(serializers.ModelSerializer):
"""Serializer for dupm full incident data in `rotate_incidents` data."""
class DumpIncidentCategorySerializer(serializers.ModelSerializer):
class Meta:
model = IncidentCategory
fields = '__all__'
class DumpIncidentEffectSerializer(serializers.ModelSerializer):
class Meta:
model = IncidentEffect
fields = '__all__'
class DumpIncidentRecommendationsSerializer(serializers.ModelSerializer):
class Meta:
model = IncidentRecommendations
fields = '__all__'
class DumpIncidentAssignedToSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'first_name')
category = DumpIncidentCategorySerializer()
effects = DumpIncidentEffectSerializer(many=True)
close_recommendations = DumpIncidentRecommendationsSerializer(many=True)
assigned_to = DumpIncidentAssignedToSerializer()
class Meta:
model = Incident
fields = '__all__'