add timeline information to the /items endpoint

This commit is contained in:
j3d1 2024-11-23 01:22:24 +01:00
parent 0f5517e0ac
commit b19f59c689
5 changed files with 161 additions and 11 deletions

View file

@ -35,16 +35,18 @@ class ContainerSerializer(serializers.ModelSerializer):
read_only_fields = ['id', 'itemCount']
def get_itemCount(self, instance):
return Item.objects.filter(container=instance.id).count()
return len(instance.items)
class ItemSerializer(BasicItemSerializer):
timeline = serializers.SerializerMethodField()
dataImage = serializers.CharField(write_only=True, required=False)
related_issues = BasicIssueSerializer(many=True, read_only=True)
class Meta:
model = Item
fields = ['cid', 'box', 'id', 'description', 'file', 'dataImage', 'returned', 'event', 'related_issues']
fields = ['cid', 'box', 'id', 'description', 'file', 'dataImage', 'returned', 'event', 'related_issues',
'timeline']
read_only_fields = ['id']
def to_internal_value(self, data):
@ -86,6 +88,26 @@ class ItemSerializer(BasicItemSerializer):
instance.files.add(file)
return super().update(instance, validated_data)
@staticmethod
def get_timeline(obj):
timeline = []
for comment in obj.comments.all():
timeline.append({
'type': 'comment',
'id': comment.id,
'timestamp': comment.timestamp,
'comment': comment.comment,
})
for relation in (obj.issue_relation_changes.all()):
timeline.append({
'type': 'issue_relation',
'id': relation.id,
'status': relation.status,
'timestamp': relation.timestamp,
'issue_thread': BasicIssueSerializer(relation.issue_thread).data,
})
return sorted(timeline, key=lambda x: x['timestamp'])
class SearchResultSerializer(serializers.Serializer):
search_score = serializers.IntegerField()