app.memos.serializers
1from drf_spectacular.utils import extend_schema_serializer, OpenApiExample 2from rest_framework import serializers 3from .models import Memo, MemoEvents, MemoSnapshot 4from accounts.models import Role, Hospital 5from django.shortcuts import get_object_or_404 6 7@extend_schema_serializer( 8 examples=[ 9 OpenApiExample( 10 'Memo Snapshot Example', 11 value={ 12 "memoId": "123e4567-e89b-12d3-a456-426614174000", 13 "created_at": "2025-09-20T12:34:56Z", 14 "latest_snapshot": {"title": "Test Memo", "status": "pending"} 15 } 16 ) 17 ] 18) 19class MemoSerializer(serializers.ModelSerializer): 20 """ 21 Serializer for listing memo snapshots with basic info. 22 23 Fields: 24 - memoId: UUID of the memo. 25 - created_at: Timestamp when the memo was created. 26 - latest_snapshot: JSON field with latest snapshot info. 27 """ 28 memoId = serializers.CharField(source='memo.memoId', read_only=True) 29 latest_snapshot = serializers.JSONField(source='info', read_only=True) 30 created_at = serializers.DateTimeField(source='memo.created_at', read_only=True) 31 class Meta: 32 model = MemoSnapshot 33 fields = ['memoId','created_at','latest_snapshot'] 34 35@extend_schema_serializer( 36 examples=[ 37 OpenApiExample( 38 'Create Memo Example', 39 value={ 40 "hospital": 1, 41 "uuid": "123e4567-e89b-12d3-a456-426614174000", 42 "payload": {"title": "Test Memo", "description": "Details"}, 43 "metadata": {"priority": "high"} 44 } 45 ) 46 ] 47) 48class MemoCreateSerializer(serializers.Serializer): 49 """ 50 Serializer for creating and deleting memos. 51 52 Fields: 53 - hospital: Hospital ID. 54 - uuid: Memo UUID. 55 - payload: JSON field with memo details. 56 - metadata: JSON field with additional metadata. 57 58 Methods: 59 - create(): Creates a Memo and logs a 'created' event. 60 - delete(): Soft-deletes a Memo and logs a 'deleted' event. 61 """ 62 hospital = serializers.PrimaryKeyRelatedField(queryset=Hospital.objects.all()) 63 uuid = serializers.CharField() 64 payload = serializers.JSONField() 65 metadata = serializers.JSONField() 66 67 def create(self, validated_data): 68 """Create a Memo instance and log a 'created' event.""" 69 request = self.context["request"] 70 instance = Memo.objects.create( 71 hospital=validated_data["hospital"], 72 memoId=validated_data["uuid"], 73 ) 74 # log event 75 MemoEvents.objects.create( 76 memo=instance, 77 event_type="created", 78 event_by=request.user, 79 metadata=validated_data["metadata"], 80 payload=validated_data["payload"], 81 ) 82 return instance 83 84 def delete(self, validated_data): 85 """Soft-delete a Memo and log a 'deleted' event.""" 86 request = self.context["request"] 87 obj = get_object_or_404( 88 Memo, 89 hospital=validated_data["hospital"], 90 memoId=validated_data["uuid"], 91 ) 92 obj.is_deleted = True 93 obj.save() 94 MemoEvents.objects.create( 95 memo=obj, 96 event_type="deleted", 97 event_by=request.user, 98 metadata=validated_data["metadata"], 99 ) 100 return obj 101 102@extend_schema_serializer( 103 examples=[ 104 OpenApiExample( 105 'Memo Snapshot Example', 106 value={ 107 "id": 1, 108 "memo": 1, 109 "attendee_otp": "123456", 110 "completion_otp": "654321", 111 "created_at": "2025-09-20T12:34:56Z", 112 # ...other fields... 113 } 114 ) 115 ] 116) 117class MemoSnapshotSerializer(serializers.ModelSerializer): 118 """ 119 Serializer for memo snapshot details including OTPs. 120 121 Fields: 122 - attendee_otp: OTP for attendee verification. 123 - completion_otp: OTP for completion verification. 124 - created_at: Timestamp when the memo was created. 125 - All other fields from MemoSnapshot model. 126 """ 127 attendee_otp = serializers.CharField(read_only=True) 128 completion_otp = serializers.CharField(read_only=True) 129 created_at = serializers.CharField(source='memo.created_at',read_only=True) 130 class Meta: 131 model = MemoSnapshot 132 fields = '__all__' 133 134from .models import AttendeeETA 135 136@extend_schema_serializer( 137 examples=[ 138 OpenApiExample( 139 'Attendee ETA Example', 140 value={ 141 "id": 1, 142 "memo": 1, 143 "attendee": 2, 144 "attendee_name": "John Doe", 145 "eta": "2025-09-20T13:00:00Z", 146 "created_at": "2025-09-20T12:00:00Z", 147 "updated_at": "2025-09-20T12:30:00Z", 148 "updated_count": 1 149 } 150 ) 151 ] 152) 153class AttendeeETASerializer(serializers.ModelSerializer): 154 """ 155 Serializer for attendee ETA records. 156 157 Fields: 158 - attendee: User ID of the attendee. 159 - attendee_name: Username of the attendee. 160 - eta: Estimated time of arrival. 161 - created_at: Timestamp when ETA was created. 162 - updated_at: Timestamp when ETA was last updated. 163 - updated_count: Number of times ETA was updated. 164 """ 165 attendee = serializers.PrimaryKeyRelatedField(read_only=True) 166 attendee_name = serializers.CharField(source='attendee.username', read_only=True) 167 eta = serializers.DateTimeField() 168 class Meta: 169 model = AttendeeETA 170 fields = ['id', 'memo', 'attendee', 'attendee_name', 'eta', 'created_at', 'updated_at', 'updated_count'] 171 172@extend_schema_serializer( 173 examples=[ 174 OpenApiExample( 175 'Memo Event Example', 176 value={ 177 "id": 1, 178 "memo": 1, 179 "event_type": "created", 180 "event_by": 1, 181 "metadata": {"key": "value"}, 182 "payload": {"title": "Test Memo", "description": "Details"}, 183 "created_at": "2025-09-20T12:34:56Z" 184 } 185 ) 186 ] 187) 188class MemoEventsSerializer(serializers.ModelSerializer): 189 """ 190 Serializer for memo event logs. 191 192 Fields: 193 - All fields from MemoEvents model. 194 """ 195 class Meta: 196 model = MemoEvents 197 fields = '__all__'
8@extend_schema_serializer( 9 examples=[ 10 OpenApiExample( 11 'Memo Snapshot Example', 12 value={ 13 "memoId": "123e4567-e89b-12d3-a456-426614174000", 14 "created_at": "2025-09-20T12:34:56Z", 15 "latest_snapshot": {"title": "Test Memo", "status": "pending"} 16 } 17 ) 18 ] 19) 20class MemoSerializer(serializers.ModelSerializer): 21 """ 22 Serializer for listing memo snapshots with basic info. 23 24 Fields: 25 - memoId: UUID of the memo. 26 - created_at: Timestamp when the memo was created. 27 - latest_snapshot: JSON field with latest snapshot info. 28 """ 29 memoId = serializers.CharField(source='memo.memoId', read_only=True) 30 latest_snapshot = serializers.JSONField(source='info', read_only=True) 31 created_at = serializers.DateTimeField(source='memo.created_at', read_only=True) 32 class Meta: 33 model = MemoSnapshot 34 fields = ['memoId','created_at','latest_snapshot']
Serializer for listing memo snapshots with basic info.
Fields: - memoId: UUID of the memo. - created_at: Timestamp when the memo was created. - latest_snapshot: JSON field with latest snapshot info.
36@extend_schema_serializer( 37 examples=[ 38 OpenApiExample( 39 'Create Memo Example', 40 value={ 41 "hospital": 1, 42 "uuid": "123e4567-e89b-12d3-a456-426614174000", 43 "payload": {"title": "Test Memo", "description": "Details"}, 44 "metadata": {"priority": "high"} 45 } 46 ) 47 ] 48) 49class MemoCreateSerializer(serializers.Serializer): 50 """ 51 Serializer for creating and deleting memos. 52 53 Fields: 54 - hospital: Hospital ID. 55 - uuid: Memo UUID. 56 - payload: JSON field with memo details. 57 - metadata: JSON field with additional metadata. 58 59 Methods: 60 - create(): Creates a Memo and logs a 'created' event. 61 - delete(): Soft-deletes a Memo and logs a 'deleted' event. 62 """ 63 hospital = serializers.PrimaryKeyRelatedField(queryset=Hospital.objects.all()) 64 uuid = serializers.CharField() 65 payload = serializers.JSONField() 66 metadata = serializers.JSONField() 67 68 def create(self, validated_data): 69 """Create a Memo instance and log a 'created' event.""" 70 request = self.context["request"] 71 instance = Memo.objects.create( 72 hospital=validated_data["hospital"], 73 memoId=validated_data["uuid"], 74 ) 75 # log event 76 MemoEvents.objects.create( 77 memo=instance, 78 event_type="created", 79 event_by=request.user, 80 metadata=validated_data["metadata"], 81 payload=validated_data["payload"], 82 ) 83 return instance 84 85 def delete(self, validated_data): 86 """Soft-delete a Memo and log a 'deleted' event.""" 87 request = self.context["request"] 88 obj = get_object_or_404( 89 Memo, 90 hospital=validated_data["hospital"], 91 memoId=validated_data["uuid"], 92 ) 93 obj.is_deleted = True 94 obj.save() 95 MemoEvents.objects.create( 96 memo=obj, 97 event_type="deleted", 98 event_by=request.user, 99 metadata=validated_data["metadata"], 100 ) 101 return obj
Serializer for creating and deleting memos.
Fields: - hospital: Hospital ID. - uuid: Memo UUID. - payload: JSON field with memo details. - metadata: JSON field with additional metadata.
Methods: - create(): Creates a Memo and logs a 'created' event. - delete(): Soft-deletes a Memo and logs a 'deleted' event.
68 def create(self, validated_data): 69 """Create a Memo instance and log a 'created' event.""" 70 request = self.context["request"] 71 instance = Memo.objects.create( 72 hospital=validated_data["hospital"], 73 memoId=validated_data["uuid"], 74 ) 75 # log event 76 MemoEvents.objects.create( 77 memo=instance, 78 event_type="created", 79 event_by=request.user, 80 metadata=validated_data["metadata"], 81 payload=validated_data["payload"], 82 ) 83 return instance
Create a Memo instance and log a 'created' event.
85 def delete(self, validated_data): 86 """Soft-delete a Memo and log a 'deleted' event.""" 87 request = self.context["request"] 88 obj = get_object_or_404( 89 Memo, 90 hospital=validated_data["hospital"], 91 memoId=validated_data["uuid"], 92 ) 93 obj.is_deleted = True 94 obj.save() 95 MemoEvents.objects.create( 96 memo=obj, 97 event_type="deleted", 98 event_by=request.user, 99 metadata=validated_data["metadata"], 100 ) 101 return obj
Soft-delete a Memo and log a 'deleted' event.
103@extend_schema_serializer( 104 examples=[ 105 OpenApiExample( 106 'Memo Snapshot Example', 107 value={ 108 "id": 1, 109 "memo": 1, 110 "attendee_otp": "123456", 111 "completion_otp": "654321", 112 "created_at": "2025-09-20T12:34:56Z", 113 # ...other fields... 114 } 115 ) 116 ] 117) 118class MemoSnapshotSerializer(serializers.ModelSerializer): 119 """ 120 Serializer for memo snapshot details including OTPs. 121 122 Fields: 123 - attendee_otp: OTP for attendee verification. 124 - completion_otp: OTP for completion verification. 125 - created_at: Timestamp when the memo was created. 126 - All other fields from MemoSnapshot model. 127 """ 128 attendee_otp = serializers.CharField(read_only=True) 129 completion_otp = serializers.CharField(read_only=True) 130 created_at = serializers.CharField(source='memo.created_at',read_only=True) 131 class Meta: 132 model = MemoSnapshot 133 fields = '__all__'
Serializer for memo snapshot details including OTPs.
Fields: - attendee_otp: OTP for attendee verification. - completion_otp: OTP for completion verification. - created_at: Timestamp when the memo was created. - All other fields from MemoSnapshot model.
137@extend_schema_serializer( 138 examples=[ 139 OpenApiExample( 140 'Attendee ETA Example', 141 value={ 142 "id": 1, 143 "memo": 1, 144 "attendee": 2, 145 "attendee_name": "John Doe", 146 "eta": "2025-09-20T13:00:00Z", 147 "created_at": "2025-09-20T12:00:00Z", 148 "updated_at": "2025-09-20T12:30:00Z", 149 "updated_count": 1 150 } 151 ) 152 ] 153) 154class AttendeeETASerializer(serializers.ModelSerializer): 155 """ 156 Serializer for attendee ETA records. 157 158 Fields: 159 - attendee: User ID of the attendee. 160 - attendee_name: Username of the attendee. 161 - eta: Estimated time of arrival. 162 - created_at: Timestamp when ETA was created. 163 - updated_at: Timestamp when ETA was last updated. 164 - updated_count: Number of times ETA was updated. 165 """ 166 attendee = serializers.PrimaryKeyRelatedField(read_only=True) 167 attendee_name = serializers.CharField(source='attendee.username', read_only=True) 168 eta = serializers.DateTimeField() 169 class Meta: 170 model = AttendeeETA 171 fields = ['id', 'memo', 'attendee', 'attendee_name', 'eta', 'created_at', 'updated_at', 'updated_count']
Serializer for attendee ETA records.
Fields: - attendee: User ID of the attendee. - attendee_name: Username of the attendee. - eta: Estimated time of arrival. - created_at: Timestamp when ETA was created. - updated_at: Timestamp when ETA was last updated. - updated_count: Number of times ETA was updated.
169 class Meta: 170 model = AttendeeETA 171 fields = ['id', 'memo', 'attendee', 'attendee_name', 'eta', 'created_at', 'updated_at', 'updated_count']
173@extend_schema_serializer( 174 examples=[ 175 OpenApiExample( 176 'Memo Event Example', 177 value={ 178 "id": 1, 179 "memo": 1, 180 "event_type": "created", 181 "event_by": 1, 182 "metadata": {"key": "value"}, 183 "payload": {"title": "Test Memo", "description": "Details"}, 184 "created_at": "2025-09-20T12:34:56Z" 185 } 186 ) 187 ] 188) 189class MemoEventsSerializer(serializers.ModelSerializer): 190 """ 191 Serializer for memo event logs. 192 193 Fields: 194 - All fields from MemoEvents model. 195 """ 196 class Meta: 197 model = MemoEvents 198 fields = '__all__'
Serializer for memo event logs.
Fields: - All fields from MemoEvents model.