From b1d5b335ac8262f6de63aa751b6265f35d2a740a Mon Sep 17 00:00:00 2001
From: Kenzo-Hugo Hillion <hillion.kenzo@posteo.net>
Date: Tue, 13 Apr 2021 16:48:34 +0200
Subject: [PATCH] update serializer and fix list on frontend

---
 .../metagenedb/apps/catalog/migrations/0029_source.py |  2 +-
 backend/metagenedb/apps/catalog/serializers/gene.py   |  9 ++++++++-
 backend/metagenedb/apps/catalog/serializers/source.py | 11 +++++++++++
 frontend/src/views/genes/genes.html                   |  9 ++++++++-
 frontend/src/views/genes/genes.js                     |  4 ++++
 5 files changed, 32 insertions(+), 3 deletions(-)
 create mode 100644 backend/metagenedb/apps/catalog/serializers/source.py

diff --git a/backend/metagenedb/apps/catalog/migrations/0029_source.py b/backend/metagenedb/apps/catalog/migrations/0029_source.py
index 57129c3..58f7b0d 100644
--- a/backend/metagenedb/apps/catalog/migrations/0029_source.py
+++ b/backend/metagenedb/apps/catalog/migrations/0029_source.py
@@ -15,7 +15,7 @@ def create_sources(apps, schema_editor):
         {
             'name': 'IGC-9.9M',
             'url': 'https://db.cngb.org/microbiome/genecatalog/genecatalog_human/',
-            'doi': '10.1038/s41467-020-14677-3'
+            'doi': '10.1038/nbt.2942'
         },
     ]
     for item in items_to_create:
diff --git a/backend/metagenedb/apps/catalog/serializers/gene.py b/backend/metagenedb/apps/catalog/serializers/gene.py
index 2f034bd..87368ea 100644
--- a/backend/metagenedb/apps/catalog/serializers/gene.py
+++ b/backend/metagenedb/apps/catalog/serializers/gene.py
@@ -3,11 +3,12 @@ import traceback
 
 from rest_framework import serializers
 from rest_framework.utils import model_meta
-from metagenedb.apps.catalog.models import Function, Gene, GeneFunction, Taxonomy
+from metagenedb.apps.catalog.models import Function, Gene, GeneFunction, Source, Taxonomy
 
 from .asymetricslugrelatedfield import AsymetricSlugRelatedField
 from .bulk_list import BulkListSerializer
 from .function import FunctionSerializer
+from .source import SourceSerializer
 from .taxonomy import SimpleTaxonomySerializer
 
 
@@ -65,6 +66,12 @@ class GeneSerializer(serializers.ModelSerializer):
         slug_field='tax_id',
         required=False,
     )
+    source = AsymetricSlugRelatedField.from_serializer(
+        SourceSerializer,
+        queryset=Source.objects.all(),
+        slug_field='name',
+        required=False,
+    )
 
     class Meta:
         model = Gene
diff --git a/backend/metagenedb/apps/catalog/serializers/source.py b/backend/metagenedb/apps/catalog/serializers/source.py
new file mode 100644
index 0000000..97930a9
--- /dev/null
+++ b/backend/metagenedb/apps/catalog/serializers/source.py
@@ -0,0 +1,11 @@
+from rest_framework import serializers
+from metagenedb.apps.catalog.models import Source
+
+
+class SourceSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = Source
+        fields = (
+            'name', 'url', 'doi'
+        )
diff --git a/frontend/src/views/genes/genes.html b/frontend/src/views/genes/genes.html
index fccf073..a0d41bf 100644
--- a/frontend/src/views/genes/genes.html
+++ b/frontend/src/views/genes/genes.html
@@ -337,7 +337,14 @@
                 </v-btn>
               </template>
             </td>
-            <td class="text-xs">{{ props.item.source }}</td>
+            <td class="text-xs">
+              {{ props.item.source }}
+              <v-btn :href="props.item.source_url" icon flat small target="_blank" class="secondary--text mt-1 ml-0" v-if="props.item.source">
+              <v-icon small>
+                open_in_new
+              </v-icon>
+              </v-btn>
+            </td>
             </template>
           </v-data-table>
         </v-list>
diff --git a/frontend/src/views/genes/genes.js b/frontend/src/views/genes/genes.js
index 7e7c820..ba4c8ca 100644
--- a/frontend/src/views/genes/genes.js
+++ b/frontend/src/views/genes/genes.js
@@ -233,6 +233,10 @@ export default {
               item.tax_url = ncbiTaxUrl + item.taxonomy.tax_id;
               item.taxonomy = `${item.taxonomy.name} (${item.taxonomy.rank})`;
             }
+            if (item.source) {
+              item.source_url = item.source.url;
+              item.source = item.source.name;
+            }
             if (item.functions) {
               const { functions } = item;
               item.keggs = [];
-- 
GitLab