116 lines
4.5 KiB
Python
116 lines
4.5 KiB
Python
"""
|
|
Core API serializers.
|
|
"""
|
|
|
|
from rest_framework import serializers
|
|
from ..models import Tenant, AuditLogEntry, SystemConfiguration, SystemNotification, IntegrationLog
|
|
|
|
|
|
class TenantSerializer(serializers.ModelSerializer):
|
|
"""
|
|
Tenant serializer.
|
|
"""
|
|
user_count = serializers.ReadOnlyField(source='get_user_count')
|
|
patient_count = serializers.ReadOnlyField(source='get_patient_count')
|
|
is_trial_expired = serializers.ReadOnlyField()
|
|
|
|
class Meta:
|
|
model = Tenant
|
|
fields = [
|
|
'tenant_id', 'name', 'display_name', 'description',
|
|
'organization_type', 'address_line1', 'address_line2',
|
|
'city', 'state', 'postal_code', 'country',
|
|
'phone_number', 'email', 'website',
|
|
'license_number', 'accreditation_body', 'accreditation_number',
|
|
'accreditation_expiry', 'timezone', 'locale', 'currency',
|
|
'subscription_plan', 'max_users', 'max_patients',
|
|
'is_active', 'is_trial', 'trial_expires_at',
|
|
'user_count', 'patient_count', 'is_trial_expired',
|
|
'created_at', 'updated_at'
|
|
]
|
|
read_only_fields = ['tenant_id', 'created_at', 'updated_at']
|
|
|
|
|
|
class AuditLogEntrySerializer(serializers.ModelSerializer):
|
|
"""
|
|
Audit log entry serializer.
|
|
"""
|
|
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
|
|
user_name = serializers.CharField(source='user.get_full_name', read_only=True)
|
|
content_type_name = serializers.CharField(source='content_type.name', read_only=True)
|
|
|
|
class Meta:
|
|
model = AuditLogEntry
|
|
fields = [
|
|
'log_id', 'tenant', 'tenant_name', 'event_type', 'event_category',
|
|
'user', 'user_name', 'user_email', 'user_role',
|
|
'session_key', 'ip_address', 'user_agent',
|
|
'content_type', 'content_type_name', 'object_id', 'object_repr',
|
|
'action', 'description', 'changes', 'additional_data',
|
|
'patient_id', 'patient_mrn', 'risk_level',
|
|
'hipaa_relevant', 'gdpr_relevant',
|
|
'is_successful', 'error_message',
|
|
'timestamp', 'created_at'
|
|
]
|
|
read_only_fields = ['log_id', 'created_at']
|
|
|
|
|
|
class SystemConfigurationSerializer(serializers.ModelSerializer):
|
|
"""
|
|
System configuration serializer.
|
|
"""
|
|
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
|
|
typed_value = serializers.ReadOnlyField(source='get_typed_value')
|
|
updated_by_name = serializers.CharField(source='updated_by.get_full_name', read_only=True)
|
|
|
|
class Meta:
|
|
model = SystemConfiguration
|
|
fields = [
|
|
'id', 'tenant', 'tenant_name', 'key', 'value', 'data_type',
|
|
'category', 'description', 'validation_rules', 'default_value',
|
|
'is_sensitive', 'is_encrypted', 'required_permission',
|
|
'is_active', 'is_readonly', 'typed_value',
|
|
'created_at', 'updated_at', 'updated_by', 'updated_by_name'
|
|
]
|
|
read_only_fields = ['created_at', 'updated_at']
|
|
|
|
|
|
class SystemNotificationSerializer(serializers.ModelSerializer):
|
|
"""
|
|
System notification serializer.
|
|
"""
|
|
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
|
|
created_by_name = serializers.CharField(source='created_by.get_full_name', read_only=True)
|
|
is_visible = serializers.ReadOnlyField()
|
|
|
|
class Meta:
|
|
model = SystemNotification
|
|
fields = [
|
|
'notification_id', 'tenant', 'tenant_name', 'title', 'message',
|
|
'notification_type', 'priority', 'target_audience',
|
|
'target_roles', 'is_dismissible', 'auto_dismiss_after',
|
|
'show_on_login', 'start_date', 'end_date',
|
|
'action_url', 'action_text', 'is_active', 'is_visible',
|
|
'created_at', 'created_by', 'created_by_name'
|
|
]
|
|
read_only_fields = ['notification_id', 'created_at']
|
|
|
|
|
|
class IntegrationLogSerializer(serializers.ModelSerializer):
|
|
"""
|
|
Integration log serializer.
|
|
"""
|
|
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
|
|
|
|
class Meta:
|
|
model = IntegrationLog
|
|
fields = [
|
|
'log_id', 'tenant', 'tenant_name', 'integration_type', 'direction',
|
|
'external_system', 'endpoint', 'message_type', 'message_id',
|
|
'correlation_id', 'request_data', 'response_data',
|
|
'status', 'error_code', 'error_message',
|
|
'processing_time_ms', 'timestamp', 'created_at'
|
|
]
|
|
read_only_fields = ['log_id', 'created_at']
|
|
|