This is an automated email from the ASF dual-hosted git repository.

gjm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bloodhound-core.git

commit 31087bbed0e4fd6d598b07c6d9519168b5cdaa48
Author: Gary Martin <[email protected]>
AuthorDate: Mon Mar 14 13:09:16 2022 +0000

    Beginning of integrating ticketchange model
---
 .gitignore                  |  1 +
 trackers/api/serializers.py | 36 +++++++++++++++++++++++++++++++++++-
 trackers/api/urls.py        |  1 +
 trackers/api/views.py       | 10 ++++++++++
 trackers/models.py          | 15 ++++++++++++---
 5 files changed, 59 insertions(+), 4 deletions(-)

diff --git a/.gitignore b/.gitignore
index e0db8ba..fd75ab4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ __pycache__/
 db.sqlite3
 tags
 *.log
+.hypothesis/
diff --git a/trackers/api/serializers.py b/trackers/api/serializers.py
index c8e58cd..703c7b0 100644
--- a/trackers/api/serializers.py
+++ b/trackers/api/serializers.py
@@ -2,7 +2,14 @@ from django.contrib.auth.models import User, Group
 from django.shortcuts import get_object_or_404
 from rest_framework import serializers
 from rest_framework.reverse import reverse
-from ..models import Component, Milestone, Product, Ticket, Version
+from ..models import (
+    Component,
+    Milestone,
+    Product,
+    Ticket,
+    TicketChange,
+    Version,
+)
 from functools import partial
 
 
@@ -12,6 +19,8 @@ def get_self_url(obj, context, obj_type):
     }
     if obj_type == 'ticket':
         keywords['product_ticket_id'] = obj.product_ticket_id
+    elif obj_type == 'ticketchange':
+        keywords['time'] = obj.time
     else:
         keywords['name'] = obj.name
 
@@ -55,6 +64,17 @@ class 
GroupSerializer(serializers.HyperlinkedModelSerializer):
         fields = ('url', 'name')
 
 
+class TicketChangeSerializer(ProductChildSerializer):
+    url = serializers.SerializerMethodField()
+
+    class Meta:
+        model = TicketChange
+        fields = ('url', 'time', 'author', 'field', 'oldvalue', 'newvalue')
+
+    def get_url(self, obj):
+        return get_self_url(obj, self.context, 'ticketchange')
+
+
 class TicketSerializer(ProductChildSerializer):
     url = serializers.SerializerMethodField()
 
@@ -66,6 +86,15 @@ class TicketSerializer(ProductChildSerializer):
             'product_ticket_id',
             'summary',
             'description',
+            'time',
+            'changetime',
+            'reporter',
+            'owner',
+            'cc',
+            'status',
+            'severity',
+            'priority',
+            'keywords',
         )
         extra_kwargs = {
             'product_ticket_id': {'required': False},
@@ -152,6 +181,10 @@ class 
ProductSerializer(serializers.HyperlinkedModelSerializer):
         view_name='product-versions-list',
     )
 
+    ticketchanges_url = ProductHyperlinkedModelSerializer(
+        view_name='product-ticketchanges-list',
+    )
+
     class Meta:
         model = Product
         fields = (
@@ -164,4 +197,5 @@ class 
ProductSerializer(serializers.HyperlinkedModelSerializer):
             'components_url',
             'milestones_url',
             'versions_url',
+            'ticketchanges_url',
         )
diff --git a/trackers/api/urls.py b/trackers/api/urls.py
index 403ea05..6b5eaa4 100644
--- a/trackers/api/urls.py
+++ b/trackers/api/urls.py
@@ -31,6 +31,7 @@ products_router.register('tickets', views.TicketViewSet, 
basename='product-ticke
 products_router.register('components', views.ComponentViewSet, 
basename='product-components')
 products_router.register('milestones', views.MilestoneViewSet, 
basename='product-milestones')
 products_router.register('versions', views.VersionViewSet, 
basename='product-versions')
+products_router.register('ticketchanges', views.TicketChangeViewSet, 
basename='product-ticketchanges')
 
 urlpatterns = [
     path('', include(router.urls)),
diff --git a/trackers/api/views.py b/trackers/api/views.py
index 91ceabd..d7f31c9 100644
--- a/trackers/api/views.py
+++ b/trackers/api/views.py
@@ -49,6 +49,16 @@ class ProductViewSet(viewsets.ModelViewSet):
     lookup_field = 'prefix'
 
 
+class TicketChangeViewSet(viewsets.ModelViewSet):
+    queryset = models.TicketChange.objects.all()
+    serializer_class = serializers.TicketChangeSerializer
+    lookup_field = 'time'
+
+    def get_queryset(self, *args, **kwargs):
+        prefix = self.kwargs['product_prefix']
+        return models.TicketChange.objects.filter(product=prefix)
+
+
 class TicketViewSet(viewsets.ModelViewSet):
     queryset = models.Ticket.objects.all()
     serializer_class = serializers.TicketSerializer
diff --git a/trackers/models.py b/trackers/models.py
index 5c6592d..373235a 100644
--- a/trackers/models.py
+++ b/trackers/models.py
@@ -188,13 +188,22 @@ class Ticket(models.Model):
 
 
 class TicketChange(models.Model):
-    ticket = models.ForeignKey(Ticket, on_delete=models.PROTECT)
-    time = models.BigIntegerField()
+    ticket = models.ForeignKey(
+        Ticket,
+        on_delete=models.PROTECT,
+        db_column='ticket',
+        related_name='%(app_label)s_%(class)s_ticket_related',
+    )
+    time = models.BigIntegerField(blank=True, null=True)
     author = models.TextField(blank=True, null=True)
     field = models.TextField()
     oldvalue = models.TextField(blank=True, null=True)
     newvalue = models.TextField(blank=True, null=True)
-    product = models.ForeignKey(Product, on_delete=models.PROTECT)
+    product = models.ForeignKey(
+        Product,
+        db_column="product",
+        on_delete=models.PROTECT,
+    )
 
     class Meta:
         db_table = 'ticket_change'

Reply via email to