From 3f9ea37d1c3c87fdbfe5b9c5946a4c5be50183b3 Mon Sep 17 00:00:00 2001
From: Remco Tukker <remco.tukker@geant.org>
Date: Fri, 19 May 2023 13:14:35 +0200
Subject: [PATCH] clean up interfaces a bit further

---
 compendium_v2/routes/budget.py        |   8 +-
 webapp/src/Schema.tsx                 | 101 +++++++++++---------------
 webapp/src/helpers/dataconversion.tsx |   4 +-
 3 files changed, 48 insertions(+), 65 deletions(-)

diff --git a/compendium_v2/routes/budget.py b/compendium_v2/routes/budget.py
index 3a7c2774..4d06ec0d 100644
--- a/compendium_v2/routes/budget.py
+++ b/compendium_v2/routes/budget.py
@@ -22,9 +22,9 @@ BUDGET_RESPONSE_SCHEMA = {
                 'nren': {'type': 'string'},
                 'nren_country': {'type': 'string'},
                 'budget': {'type': 'number'},
-                'budget_year': {'type': 'integer'},
+                'year': {'type': 'integer'},
             },
-            'required': ['nren', 'nren_country', 'budget', 'budget_year'],
+            'required': ['nren', 'nren_country', 'budget', 'year'],
             'additionalProperties': False
         }
     },
@@ -53,11 +53,11 @@ def budget_view() -> Any:
             'nren': entry.nren.name,
             'nren_country': entry.nren.country,
             'budget': float(entry.budget),
-            'budget_year': entry.year,
+            'year': entry.year,
         }
 
     entries = sorted(
         [_extract_data(entry) for entry in db.session.scalars(select(BudgetEntry))],
-        key=lambda d: (d['budget_year'], d['nren'])
+        key=lambda d: (d['year'], d['nren'])
     )
     return jsonify(entries)
diff --git a/webapp/src/Schema.tsx b/webapp/src/Schema.tsx
index 936bb30a..305a2a72 100644
--- a/webapp/src/Schema.tsx
+++ b/webapp/src/Schema.tsx
@@ -3,27 +3,57 @@ export interface Nren {
     country: string
 }
 
-export interface Budget {
-    budget: string,
-    budget_year: number,
+export interface FilterSelection {
+    selectedNrens: string[]
+    selectedYears: number[]
+}
+
+export interface NrenAndYearDatapoint {
     nren: string,
-    nren_country: string
+    nren_country: string,
+    year: number
+}
+
+export interface Budget extends NrenAndYearDatapoint {
+    budget: string
 }
 
-export interface FundingSource {
+export interface FundingSource extends NrenAndYearDatapoint {
     client_institutions: number,
     commercial: number,
     european_funding: number,
     gov_public_bodies: number,
-    other: number,
-    nren: string,
-    nren_country: string,
-    year: number
+    other: number
 }
 
-export interface FilterSelection {
-    selectedNrens: string[]
-    selectedYears: number[]
+export interface ChargingStructure extends NrenAndYearDatapoint {
+    fee_type: (string | null)
+}
+
+export interface NrenStaff extends NrenAndYearDatapoint {
+    permanent_fte: number,
+    subcontracted_fte: number,
+    technical_fte: number,
+    non_technical_fte: number
+}
+
+export interface Organisation extends NrenAndYearDatapoint {
+    name: string,
+    role?: string
+}
+
+export interface ECProject extends NrenAndYearDatapoint {
+    project: string
+}
+
+export interface Policy extends NrenAndYearDatapoint {
+    acceptable_use: string,
+    connectivity: string,
+    data_protection: string,
+    environmental: string,
+    equal_opportunity: string,
+    privacy_notice: string,
+    strategic_plan: string
 }
 
 export interface BasicDataset {
@@ -38,7 +68,6 @@ export interface BasicDataset {
 }
 
 export interface FundingSourceDataset {
-
     labels: string[],
     datasets: {
         label: string,
@@ -54,13 +83,6 @@ export interface FundingSourceDataset {
     }[]
 }
 
-export interface ChargingStructure {
-    nren: string,
-    nren_country: string,
-    year: number,
-    fee_type: (string | null),
-}
-
 export interface ChargingStructureDataset {
     labels: string[],
     datasets: {
@@ -74,16 +96,6 @@ export interface ChargingStructureDataset {
     }[]
 }
 
-export interface NrenStaff {
-    nren: string,
-    nren_country: string,
-    year: number,
-    permanent_fte: number,
-    subcontracted_fte: number,
-    technical_fte: number,
-    non_technical_fte: number
-}
-
 export interface NrenStaffDataset {
 
     labels: string[],
@@ -100,32 +112,3 @@ export interface NrenStaffDataset {
         hidden: boolean
     }[]
 }
-
-export interface Organisation {
-    nren: string,
-    nren_country: string,
-    year: number,
-    name: string,
-    role?: string
-}
-
-export interface ECProject {
-    nren: string,
-    nren_country: string,
-    year: number,
-    project: string,
-}
-
-export interface Policy {
-    nren: string,
-    nren_country: string,
-    year: number,
-    acceptable_use: string,
-    connectivity: string,
-    data_protection: string,
-    environmental: string,
-    equal_opportunity: string,
-    privacy_notice: string,
-    strategic_plan: string
-}
-
diff --git a/webapp/src/helpers/dataconversion.tsx b/webapp/src/helpers/dataconversion.tsx
index d281c258..9a4e7ec1 100644
--- a/webapp/src/helpers/dataconversion.tsx
+++ b/webapp/src/helpers/dataconversion.tsx
@@ -117,14 +117,14 @@ export const createFundingSourceDataset = (fundingSourcesData: FundingSource[])
 function createBudgetDataLookup(budgetEntries: Budget[]) {
     const dataLookup = new Map<string, number>();
     budgetEntries.forEach((item: Budget) => {
-        const lookupKey = `${item.nren}/${item.budget_year}`;
+        const lookupKey = `${item.nren}/${item.year}`;
         dataLookup.set(lookupKey, Number(item.budget));
     })
     return dataLookup;
 }
 
 export function createBudgetDataset(budgetEntries: Budget[]): BasicDataset {
-    const labelsYear = [...new Set(budgetEntries.map((item) => item.budget_year))].sort();
+    const labelsYear = [...new Set(budgetEntries.map((item) => item.year))].sort();
     const labelsNREN = [...new Set(budgetEntries.map((item) => item.nren))].sort();
 
     const dataLookup = createBudgetDataLookup(budgetEntries);
-- 
GitLab