From 0ad53a971e09a8421a03027d15699cf49828ae68 Mon Sep 17 00:00:00 2001
From: Julian Keck <julian.keck9@kit.edu>
Date: Wed, 31 Jul 2024 17:37:57 +0200
Subject: [PATCH] UPD use rr_chain_target_subnet_gpk_list

Closes #734
---
 frontend/src/api-services/dns_fqdn.service.js |  6 ++---
 .../api-services/dns_null_records.service.js  |  2 +-
 frontend/src/components/FlatRecordTable.vue   | 27 ++++++++++++-------
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/frontend/src/api-services/dns_fqdn.service.js b/frontend/src/api-services/dns_fqdn.service.js
index e81f8b279..37ac3eca8 100644
--- a/frontend/src/api-services/dns_fqdn.service.js
+++ b/frontend/src/api-services/dns_fqdn.service.js
@@ -15,10 +15,9 @@ export default {
       { idx: 'rec_fqdns', name: 'dns.fqdn.list', inner_join_ref: { record_list: 'default' } },
       { name: 'dnscfg.fqdn_type.list', old: { sorting_params_list: ['position'] } },
       { name: 'dnscfg.record_inttype.list', old: { is_own: true, sorting_params_list: ['record_type'] } },
-      { name: 'dns.ip_addr.list', inner_join_ref: { record_list: 'default' } },
       {
         name: 'nd.ip_subnet.list',
-        inner_join_ref: { ip_addr_list: 'default' },
+        inner_join_ref: { record_list: 'api_func_dns_record_rr_chain_target_contains_subnet' },
         old: { sorting_params_list: ['type ASC', 'cidr ASC'] }
       }
     ]
@@ -30,10 +29,9 @@ export default {
       { name: 'dns.record.list', old: { sorting_params_list: ['type', 'fqdn'], is_auth: true }, inner_join_ref: { fqdn_list: 'default' } },
       { name: 'dnscfg.fqdn_type.list', old: { sorting_params_list: ['position'] } },
       { name: 'dnscfg.record_inttype.list', old: { is_own: true, sorting_params_list: ['record_type'] } },
-      { name: 'dns.ip_addr.list', inner_join_ref: { record_list: 'default' } },
       {
         name: 'nd.ip_subnet.list',
-        inner_join_ref: { ip_addr_list: 'default' },
+        inner_join_ref: { record_list: 'api_func_dns_record_rr_chain_target_contains_subnet' },
         old: { sorting_params_list: ['type ASC', 'cidr ASC'] }
       }
     ]
diff --git a/frontend/src/api-services/dns_null_records.service.js b/frontend/src/api-services/dns_null_records.service.js
index 72b872d97..e03984a6f 100644
--- a/frontend/src/api-services/dns_null_records.service.js
+++ b/frontend/src/api-services/dns_null_records.service.js
@@ -3,7 +3,7 @@ import TransactionService from './transaction.service'
 export default {
   get_all(config, own) {
     const ta = [
-      { name: 'dns.record.list', old: { is_own: own, sorting_params_list: ['type', 'fqdn'], rr_chain_target_subnet_list: null, is_auth: true } },
+      { name: 'dns.record.list', old: { is_own: own, sorting_params_list: ['type', 'fqdn'], rr_chain_target_subnet_gfk_list: null, is_auth: true } },
       { name: 'dns.fqdn.list', inner_join_ref: { record_list: 'default' } },
     ]
     if (own === null) {
diff --git a/frontend/src/components/FlatRecordTable.vue b/frontend/src/components/FlatRecordTable.vue
index e77d10ab8..9982e156c 100644
--- a/frontend/src/components/FlatRecordTable.vue
+++ b/frontend/src/components/FlatRecordTable.vue
@@ -216,7 +216,7 @@ export default {
       return this.filtered_and_sorted_records.slice(this.per_page * (this.current_page - 1), this.per_page * this.current_page)
     },
     fqdn_list_fields() {
-      return [
+      let fields = [
         {
           label: this.$t('system.fqdn'),
           key: 'fqdn',
@@ -246,18 +246,25 @@ export default {
           label: this.$t('system.ttl'),
           key: 'ttl',
           sortable: true
-        },
-        {
-          label: this.$tc('system.bcd', 2),
-          key: 'bcds',
-          sortable: false
-        },
+        }
+      ]
+      if (this.subnets && this.subnets.length > 0) {
+        fields = fields.concat([
+          {
+            label: this.$tc('system.bcd', 2),
+            key: 'bcds',
+            sortable: false
+          }
+        ])
+      }
+      fields = fields.concat([
         {
           label: this.$tc('system.action', 2),
           key: 'actions',
           sortable: false
         }
-      ]
+      ])
+      return fields
     },
     subnets_by_cidr() {
       return apiutil.dict_by_value_of_array(this.subnets, 'cidr')
@@ -337,10 +344,10 @@ export default {
       URL.revokeObjectURL(link.href)
     },
     get_bcd_for_record(record) {
-      if (!record.rr_chain_target_subnet_list) {
+      if (!record.rr_chain_target_subnet_gfk_list) {
         return new Set()
       }
-      return new Set(record.rr_chain_target_subnet_list.map(net => this.subnets_by_cidr[net]?.bcd || '').filter(net => net.length > 0))
+      return new Set(this.subnets.filter(net => record.rr_chain_target_subnet_gfk_list.includes(net.gpk)).map(net => net.bcd).filter(net => net.length > 0))
     },
     filterFunc(item, term) {
       if (typeof term === 'string') {
-- 
GitLab