from rest_framework import serializers class NotificationActorSerializer(serializers.Serializer): id = serializers.IntegerField(allow_null=True) name = serializers.CharField() type = serializers.CharField(required=False, allow_null=True) class NotificationItemSerializer(serializers.Serializer): id = serializers.IntegerField() title = serializers.CharField() message = serializers.CharField() short_message = serializers.CharField() is_read = serializers.BooleanField() created_at = serializers.DateTimeField() category = serializers.CharField() action_url = serializers.CharField( required=False, allow_blank=True, allow_null=True) data = serializers.JSONField(required=False, allow_null=True) verb = serializers.CharField() description = serializers.CharField() actor = NotificationActorSerializer(required=False, allow_null=True) unread = serializers.BooleanField() public = serializers.BooleanField() deleted = serializers.BooleanField() emailed = serializers.BooleanField() timestamp = serializers.DateTimeField() timesince = serializers.CharField() class NotificationsListResponseSerializer(serializers.Serializer): total = serializers.IntegerField() page = serializers.IntegerField() page_size = serializers.IntegerField() unread_count = serializers.IntegerField() notifications = NotificationItemSerializer(many=True) class CountResponseSerializer(serializers.Serializer): count = serializers.IntegerField() class UnreadSummaryVerbSerializer(serializers.Serializer): verb = serializers.CharField() unread = serializers.IntegerField() class UnreadSummaryProcurementRequestSerializer(serializers.Serializer): request_id = serializers.IntegerField() unread = serializers.IntegerField() class UnreadSummaryEmployeeRequestSerializer(serializers.Serializer): request_id = serializers.IntegerField() unread = serializers.IntegerField() class UnreadSummaryProcurementItemCommentSerializer(serializers.Serializer): item_id = serializers.IntegerField() unread = serializers.IntegerField() class UnreadSummaryTaskBoardSerializer(serializers.Serializer): board_id = serializers.IntegerField() unread = serializers.IntegerField() class UnreadSummaryRegulationDepartmentSerializer(serializers.Serializer): department_id = serializers.IntegerField() unread = serializers.IntegerField() class UnreadSummaryResponseSerializer(serializers.Serializer): total = serializers.IntegerField() verbs = UnreadSummaryVerbSerializer(many=True) employee_requests = UnreadSummaryEmployeeRequestSerializer(many=True) procurement_requests = UnreadSummaryProcurementRequestSerializer(many=True) procurement_item_comments = UnreadSummaryProcurementItemCommentSerializer( many=True, ) task_boards = UnreadSummaryTaskBoardSerializer(many=True) regulation_departments = UnreadSummaryRegulationDepartmentSerializer( many=True, ) regulation_company_unread = serializers.IntegerField() regulation_personal_unread = serializers.IntegerField() class StatusResponseSerializer(serializers.Serializer): status = serializers.CharField() message = serializers.CharField(required=False) notification_id = serializers.IntegerField(required=False) count = serializers.IntegerField(required=False) deleted_count = serializers.IntegerField(required=False) device_id = serializers.IntegerField(required=False) created = serializers.BooleanField(required=False) verbs = serializers.ListField( child=serializers.CharField(), required=False, ) class VerbTypeSerializer(serializers.Serializer): verb = serializers.CharField() name = serializers.CharField() total = serializers.IntegerField() unread = serializers.IntegerField() class VerbTypesResponseSerializer(serializers.Serializer): verb_types = VerbTypeSerializer(many=True) class MarkAllAsReadRequestSerializer(serializers.Serializer): verb = serializers.CharField(required=False) class MarkCategoryAsReadRequestSerializer(serializers.Serializer): verbs = serializers.ListField(child=serializers.CharField()) category = serializers.CharField(required=False) class ChannelPreferencesSerializer(serializers.Serializer): web_enabled = serializers.BooleanField() email_enabled = serializers.BooleanField() email_frequency = serializers.CharField() push_enabled = serializers.BooleanField() dnd_enabled = serializers.BooleanField() dnd_start_time = serializers.CharField(required=False, allow_null=True) dnd_end_time = serializers.CharField(required=False, allow_null=True) disabled_verbs = serializers.ListField(child=serializers.CharField()) class UpdateChannelPreferencesSerializer(serializers.Serializer): web_enabled = serializers.BooleanField(required=False) email_enabled = serializers.BooleanField(required=False) email_frequency = serializers.CharField(required=False) push_enabled = serializers.BooleanField(required=False) dnd_enabled = serializers.BooleanField(required=False) dnd_start_time = serializers.CharField(required=False, allow_null=True) dnd_end_time = serializers.CharField(required=False, allow_null=True) disabled_verbs = serializers.ListField( child=serializers.CharField(), required=False, ) class VapidPublicKeyResponseSerializer(serializers.Serializer): status = serializers.CharField() message = serializers.CharField(required=False) vapid_public_key = serializers.CharField(required=False, allow_null=True) class PushKeysSerializer(serializers.Serializer): p256dh = serializers.CharField() auth = serializers.CharField() class SubscribePushRequestSerializer(serializers.Serializer): endpoint = serializers.CharField() keys = PushKeysSerializer() device_name = serializers.CharField(required=False) installation_id = serializers.UUIDField(required=False) device_group_id = serializers.UUIDField(required=False) app_kind = serializers.ChoiceField( choices=("main", "messenger"), required=False, default="main", ) installed = serializers.BooleanField(required=False, default=False) class UnsubscribePushRequestSerializer(serializers.Serializer): endpoint = serializers.CharField(required=False) class InstallationHeartbeatRequestSerializer(serializers.Serializer): installation_id = serializers.UUIDField() device_group_id = serializers.UUIDField() app_kind = serializers.ChoiceField(choices=("main", "messenger")) device_name = serializers.CharField(required=False, allow_blank=True) installed = serializers.BooleanField(required=False, default=True) class DeliveryRoutingRequestSerializer(serializers.Serializer): device_group_id = serializers.UUIDField() routes = serializers.DictField( child=serializers.ListField( child=serializers.ChoiceField(choices=("main", "messenger")), allow_empty=False, ), ) class DisconnectInstallationRequestSerializer(serializers.Serializer): device_group_id = serializers.UUIDField() app_kind = serializers.ChoiceField(choices=("main", "messenger"))