From bad5ad1f1ff808f65a0f154ccb1f94d8757f20b1 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Mon, 2 Jun 2025 21:59:51 +0200 Subject: [PATCH] added recipe export --- cookbook/serializer.py | 11 +- cookbook/urls.py | 1 + cookbook/views/api.py | 36 +- vue3/src/apps/tandoor/main.ts | 1 + .../settings/ExportDataSettings.vue | 95 + vue3/src/locales/ar.json | 2 + vue3/src/locales/bg.json | 2 + vue3/src/locales/ca.json | 2 + vue3/src/locales/cs.json | 2 + vue3/src/locales/da.json | 2 + vue3/src/locales/de.json | 2 + vue3/src/locales/el.json | 2 + vue3/src/locales/en.json | 2 + vue3/src/locales/es.json | 2 + vue3/src/locales/fi.json | 2 + vue3/src/locales/fr.json | 2 + vue3/src/locales/he.json | 2 + vue3/src/locales/hu.json | 2 + vue3/src/locales/hy.json | 2 + vue3/src/locales/id.json | 2 + vue3/src/locales/is.json | 2 + vue3/src/locales/it.json | 2 + vue3/src/locales/lt.json | 2 + vue3/src/locales/nb_NO.json | 2 + vue3/src/locales/nl.json | 2 + vue3/src/locales/pl.json | 2 + vue3/src/locales/pt.json | 2 + vue3/src/locales/pt_BR.json | 2 + vue3/src/locales/ro.json | 2 + vue3/src/locales/ru.json | 2 + vue3/src/locales/sl.json | 2 + vue3/src/locales/sv.json | 2 + vue3/src/locales/tr.json | 2 + vue3/src/locales/uk.json | 2 + vue3/src/locales/zh_Hans.json | 2 + vue3/src/locales/zh_Hant.json | 2 + vue3/src/openapi/.openapi-generator/FILES | 21 +- vue3/src/openapi/apis/ApiApi.ts | 1832 +++++++++++++++++ vue3/src/openapi/models/Automation.ts | 18 +- vue3/src/openapi/models/ExportRequest.ts | 98 + .../openapi/models/ImportOpenDataResponse.ts | 30 +- .../models/ImportOpenDataResponseDetail.ts | 20 +- vue3/src/openapi/models/PatchedAutomation.ts | 18 +- vue3/src/openapi/models/index.ts | 21 +- vue3/src/pages/SettingsPage.vue | 1 + vue3/src/utils/integration_utils.ts | 2 +- 46 files changed, 2213 insertions(+), 54 deletions(-) create mode 100644 vue3/src/components/settings/ExportDataSettings.vue create mode 100644 vue3/src/openapi/models/ExportRequest.ts diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 306ae32a1..db18ee37b 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -1704,6 +1704,12 @@ class AiImportSerializer(serializers.Serializer): text = serializers.CharField(allow_null=True, allow_blank=True) +class ExportRequestSerializer(serializers.Serializer): + type = serializers.CharField() + all = serializers.BooleanField(default=False) + recipes = RecipeFlatSerializer(many=True, default=[]) + custom_filter = CustomFilterSerializer(many=False, default=None, allow_null=True) + class ImportOpenDataSerializer(serializers.Serializer): selected_version = serializers.CharField() selected_datatypes = serializers.ListField(child=serializers.CharField()) @@ -1717,6 +1723,7 @@ class ImportOpenDataResponseDetailSerializer(serializers.Serializer): total_untouched = serializers.IntegerField(default=0) total_errored = serializers.IntegerField(default=0) + class ImportOpenDataResponseSerializer(serializers.Serializer): food = ImportOpenDataResponseDetailSerializer(required=False) unit = ImportOpenDataResponseDetailSerializer(required=False) @@ -1725,6 +1732,7 @@ class ImportOpenDataResponseSerializer(serializers.Serializer): store = ImportOpenDataResponseDetailSerializer(required=False) conversion = ImportOpenDataResponseDetailSerializer(required=False) + class ImportOpenDataVersionMetaDataSerializer(serializers.Serializer): food = serializers.IntegerField() unit = serializers.IntegerField() @@ -1733,6 +1741,7 @@ class ImportOpenDataVersionMetaDataSerializer(serializers.Serializer): store = serializers.IntegerField() conversion = serializers.IntegerField() + class ImportOpenDataMetaDataSerializer(serializers.Serializer): versions = serializers.ListField(child=serializers.CharField()) datatypes = serializers.ListField(child=serializers.CharField()) @@ -1754,4 +1763,4 @@ class ImportOpenDataMetaDataSerializer(serializers.Serializer): pt_BR = ImportOpenDataVersionMetaDataSerializer() sk = ImportOpenDataVersionMetaDataSerializer() sl = ImportOpenDataVersionMetaDataSerializer() - zh_Hans = ImportOpenDataVersionMetaDataSerializer() \ No newline at end of file + zh_Hans = ImportOpenDataVersionMetaDataSerializer() diff --git a/cookbook/urls.py b/cookbook/urls.py index f6d52dcb9..6bd8d1407 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -111,6 +111,7 @@ urlpatterns = [ path('data/batch/import', data.batch_import, name='data_batch_import'), path('data/sync/wait', data.sync_wait, name='data_sync_wait'), path('api/import/', api.AppImportView.as_view(), name='view_import'), + path('api/export/', api.AppExportView.as_view(), name='api_export'), path('data/import/url', data.import_url, name='data_import_url'), path('api/get_external_file_link//', api.get_external_file_link, name='api_get_external_file_link'), path('api/get_recipe_file//', api.get_recipe_file, name='api_get_recipe_file'), diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 4e725107a..86301241f 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -62,7 +62,7 @@ from rest_framework.serializers import CharField, IntegerField, UUIDField from treebeard.exceptions import InvalidMoveToDescendant, InvalidPosition, PathOverflow from cookbook.connectors.connector_manager import ConnectorManager, ActionType -from cookbook.forms import ImportForm +from cookbook.forms import ImportForm, ImportExportBase from cookbook.helper import recipe_url_import as helper from cookbook.helper.HelperFunctions import str2bool, validate_import_url from cookbook.helper.image_processing import handle_image @@ -109,7 +109,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au UnitConversionSerializer, UnitSerializer, UserFileSerializer, UserPreferenceSerializer, UserSerializer, UserSpaceSerializer, ViewLogSerializer, LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer, FdcQuerySerializer, - AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer + AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer, ExportRequestSerializer ) from cookbook.version_info import TANDOOR_VERSION from cookbook.views.import_export import get_integration @@ -1952,6 +1952,38 @@ class AppImportView(APIView): return Response({'error': True, 'msg': form.errors}, status=status.HTTP_400_BAD_REQUEST) +class AppExportView(APIView): + throttle_classes = [RecipeImportThrottle] + permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope] + + @extend_schema(request=ExportRequestSerializer(many=False), responses=ExportLogSerializer(many=False)) + def post(self, request, *args, **kwargs): + + serializer = ExportRequestSerializer(data=request.data, partial=True) + if serializer.is_valid(): + if serializer.validated_data['all']: + recipes = Recipe.objects.filter(space=request.space, internal=True).all() + elif serializer.validated_data['custom_filter']: + search = RecipeSearch(request, filter=serializer.initial_data['custom_filter']['id']) + recipes = search.get_queryset(Recipe.objects.filter(space=request.space, internal=True)) + elif len(serializer.validated_data['recipes']) > 0: + recipes = Recipe.objects.filter(space=request.space, internal=True, id__in=[item['id'] for item in serializer.initial_data['recipes']]).all() + + integration = get_integration(request, serializer.validated_data['type']) + + if serializer.validated_data['type'] == ImportExportBase.PDF and not settings.ENABLE_PDF_EXPORT: + return JsonResponse({'error': _('The PDF Exporter is not enabled on this instance as it is still in an experimental state.')}) + + el = ExportLog.objects.create(type=serializer.validated_data['type'], created_by=request.user, space=request.space) + + t = threading.Thread(target=integration.do_export, args=[recipes, el]) + t.setDaemon(True) + t.start() + + return Response(ExportLogSerializer(context={'request': request}).to_representation(el), status=status.HTTP_200_OK) + + return Response({'error': True, 'msg': serializer.errors}, status=status.HTTP_400_BAD_REQUEST) + class FdcSearchView(APIView): permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope] diff --git a/vue3/src/apps/tandoor/main.ts b/vue3/src/apps/tandoor/main.ts index 7d315a4b9..2b82efbd2 100644 --- a/vue3/src/apps/tandoor/main.ts +++ b/vue3/src/apps/tandoor/main.ts @@ -29,6 +29,7 @@ const routes = [ {path: 'space-members', component: () => import("@/components/settings/SpaceMemberSettings.vue"), name: 'SpaceMemberSettings'}, {path: 'user-space', component: () => import("@/components/settings/UserSpaceSettings.vue"), name: 'UserSpaceSettings'}, {path: 'open-data-import', component: () => import("@/components/settings/OpenDataImportSettings.vue"), name: 'OpenDataImportSettings'}, + {path: 'export', component: () => import("@/components/settings/ExportDataSettings.vue"), name: 'ExportDataSettings'}, {path: 'api', component: () => import("@/components/settings/ApiSettings.vue"), name: 'ApiSettings'}, ] }, diff --git a/vue3/src/components/settings/ExportDataSettings.vue b/vue3/src/components/settings/ExportDataSettings.vue new file mode 100644 index 000000000..16439d4fa --- /dev/null +++ b/vue3/src/components/settings/ExportDataSettings.vue @@ -0,0 +1,95 @@ + + + + + + \ No newline at end of file diff --git a/vue3/src/locales/ar.json b/vue3/src/locales/ar.json index 55652b22c..694425e8a 100644 --- a/vue3/src/locales/ar.json +++ b/vue3/src/locales/ar.json @@ -478,6 +478,7 @@ "filter_to_supermarket_desc": "", "food_inherit_info": "", "food_recipe_help": "", + "hours": "", "ignore_shopping_help": "", "import_duplicates": "", "import_running": "", @@ -536,6 +537,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/bg.json b/vue3/src/locales/bg.json index e2875547a..45c5ba4dd 100644 --- a/vue3/src/locales/bg.json +++ b/vue3/src/locales/bg.json @@ -468,6 +468,7 @@ "filter_to_supermarket": "Филтрирайте до супермаркет", "filter_to_supermarket_desc": "По подразбиране филтрирайте списъка за пазаруване, за да включва само категории за избран супермаркет.", "food_recipe_help": "Свързването на рецепта тук ще включва свързаната рецепта във всяка друга рецепта, която използва тази храна", + "hours": "", "ignore_shopping_help": "Никога не добавяйте храна към списъка за пазаруване (например вода)", "import_duplicates": "За да се предотврати дублирането, рецептите със същото име като съществуващите се игнорират. Поставете отметка в това квадратче, за да импортирате всичко.", "import_running": "Импортирането се изпълнява, моля, изчакайте!", @@ -524,6 +525,7 @@ "search_import_help_text": "Импортирайте рецепта от външен уебсайт или приложение.", "search_no_recipes": "Не можах да намеря никакви рецепти!", "search_rank": "Ранг на търсене", + "seconds": "", "select_file": "Избери файл", "select_food": "Изберете Храна", "select_keyword": "Изберете Ключова дума", diff --git a/vue3/src/locales/ca.json b/vue3/src/locales/ca.json index dbce49685..792b2d45d 100644 --- a/vue3/src/locales/ca.json +++ b/vue3/src/locales/ca.json @@ -581,6 +581,7 @@ "g": "", "gallon": "", "hide_step_ingredients": "", + "hours": "", "ignore_shopping_help": "", "imperial_fluid_ounce": "", "imperial_gallon": "", @@ -659,6 +660,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/cs.json b/vue3/src/locales/cs.json index 065f601d1..afa8e16ad 100644 --- a/vue3/src/locales/cs.json +++ b/vue3/src/locales/cs.json @@ -574,6 +574,7 @@ "g": "gram [g] (metrický systém, hmotnost)", "gallon": "galon [gal] (US, objem)", "hide_step_ingredients": "Skrýt ingredience u kroku", + "hours": "", "ignore_shopping_help": "Nikdy nepřidávat potravinu na nákupní seznam (např. voda)", "imperial_fluid_ounce": "tekutá unce imperiální [imp fl oz] (UK, objem)", "imperial_gallon": "galon imperiální [imp gal] (UK, objem)", @@ -652,6 +653,7 @@ "search_import_help_text": "Importovat recept z externí webové stránky nebo aplikace.", "search_no_recipes": "Nebyly nealezeny žádné recepty!", "search_rank": "Skóre shody", + "seconds": "", "select_file": "Vybrat soubor", "select_food": "Vybrat potravinu", "select_keyword": "Vybrat štítek", diff --git a/vue3/src/locales/da.json b/vue3/src/locales/da.json index f303f8421..7182867dd 100644 --- a/vue3/src/locales/da.json +++ b/vue3/src/locales/da.json @@ -553,6 +553,7 @@ "g": "gram [g] (metrisk, vægt)", "gallon": "gallon [gal] (US, volumen)", "hide_step_ingredients": "Skjul trinnets ingredienser", + "hours": "", "ignore_shopping_help": "Aldrig tilføj vare til indkøbslisten (f.eks. vand)", "imperial_fluid_ounce": "imperial fluid ounce [imp fl oz] (UK, volumen)", "imperial_gallon": "imperial gal [imp gal] (UK, volumen)", @@ -630,6 +631,7 @@ "search_import_help_text": "Importer en opskrift fra en ekstern hjemmeside eller applikation.", "search_no_recipes": "Kunne ikke finde nogen opskrifter!", "search_rank": "Søg efter rang", + "seconds": "", "select_file": "Vælg fil", "select_food": "Vælg mad", "select_keyword": "Vælg nøgleord", diff --git a/vue3/src/locales/de.json b/vue3/src/locales/de.json index 93b4ea7cf..f5a822341 100644 --- a/vue3/src/locales/de.json +++ b/vue3/src/locales/de.json @@ -586,6 +586,7 @@ "g": "Gramm [g] (metrisch, Gewicht)", "gallon": "Gallone", "hide_step_ingredients": "Schritt Zutaten ausblenden", + "hours": "Stunden", "ignore_shopping_help": "Zutat nie auf Einkaufsliste setzen (z.B. Wasser)", "imperial_fluid_ounce": "Engl. \"Fluid Ounce\" [imp fl oz] (UK, Volumen)", "imperial_gallon": "Engl. Gallone [imp gal] (UK, Volumen)", @@ -665,6 +666,7 @@ "search_import_help_text": "Importiere ein Rezept von einer externen Webseite oder Anwendung.", "search_no_recipes": "Keine Rezepte gefunden!", "search_rank": "Such-Rang", + "seconds": "Sekunden", "select_file": "Datei auswählen", "select_food": "Zutat auswählen", "select_keyword": "Stichwort auswählen", diff --git a/vue3/src/locales/el.json b/vue3/src/locales/el.json index 6c0ee1f59..1c9185a8d 100644 --- a/vue3/src/locales/el.json +++ b/vue3/src/locales/el.json @@ -541,6 +541,7 @@ "food_recipe_help": "Η σύνδεση μιας συνταγής εδώ θα συμπεριλάβει τη συνταγή που συνδέεται σε κάθε άλλη συνταγή που χρησιμοποιεί αυτό το φαγητό", "g": "γραμμάριο [g] (μετρικό, βάρος)", "gallon": "γαλόνι [gal] (ΗΠΑ, όγκος)", + "hours": "", "ignore_shopping_help": "Το φαγητό να μην προστίθεται στη λίστα αγορών (π.χ. νερό)", "imperial_fluid_ounce": "αυτοκρατορική υγρή ουγγιά [imp fl oz] (Ηνωμένο Βασίλειο, όγκος)", "imperial_gallon": "αυτοκρατορικό γαλόνι [imp gal] (Ηνωμένο Βασίλειο, όγκος)", @@ -617,6 +618,7 @@ "search_import_help_text": "Εισαγωγή συνταγής από μια ιστοσελίδα ή εφαρμογή.", "search_no_recipes": "Δεν βρέθηκαν συνταγές!", "search_rank": "Σειρά αναζήτησης", + "seconds": "", "select_file": "Επιλογή αρχείου", "select_food": "Επιλογή φαγητού", "select_keyword": "Επιλογή λέξης-κλειδί", diff --git a/vue3/src/locales/en.json b/vue3/src/locales/en.json index 90e45b935..0db751f82 100644 --- a/vue3/src/locales/en.json +++ b/vue3/src/locales/en.json @@ -583,6 +583,7 @@ "g": "gram [g] (metric, weight)", "gallon": "gallon [gal] (US, volume)", "hide_step_ingredients": "Hide Step Ingredients", + "hours": "hours", "ignore_shopping_help": "Never add food to the shopping list (e.g. water)", "imperial_fluid_ounce": "imperial fluid ounce [imp fl oz] (UK, volume)", "imperial_gallon": "imperial gal [imp gal] (UK, volume)", @@ -662,6 +663,7 @@ "search_import_help_text": "Import a recipe from an external website or application.", "search_no_recipes": "Could not find any recipes!", "search_rank": "Search Rank", + "seconds": "seconds", "select_file": "Select File", "select_food": "Select Food", "select_keyword": "Select Keyword", diff --git a/vue3/src/locales/es.json b/vue3/src/locales/es.json index df7235aaf..713bc46cb 100644 --- a/vue3/src/locales/es.json +++ b/vue3/src/locales/es.json @@ -581,6 +581,7 @@ "g": "gramo [g] (métrico, peso)", "gallon": "galón [gal] (US, volumen)", "hide_step_ingredients": "Ocultar Ingredientes por Pasos", + "hours": "", "ignore_shopping_help": "No añadir nunca alimento a la lista de la compra (ej. agua)", "imperial_fluid_ounce": "onza líquida imperial [imp fl oz] (Reino Unido, volumen)", "imperial_gallon": "galón imperial [imp gal] (Reino Unido, volumen)", @@ -659,6 +660,7 @@ "search_import_help_text": "Importar una receta de un sitio web externo o aplicación.", "search_no_recipes": "¡No pudo encontrarse ninguna receta!", "search_rank": "Buscar Rango", + "seconds": "", "select_file": "Seleccionar Fichero", "select_food": "Seleccionar Alimento", "select_keyword": "Seleccionar Palabra Clave", diff --git a/vue3/src/locales/fi.json b/vue3/src/locales/fi.json index 30eb69f84..08a089791 100644 --- a/vue3/src/locales/fi.json +++ b/vue3/src/locales/fi.json @@ -348,6 +348,7 @@ "exact": "", "exclude": "", "file_upload_disabled": "Tiedoston lähetys ei ole käytössä tilassasi.", + "hours": "", "import_running": "Tuonti käynnissä, odota!", "merge_confirmation": "Korvaa {source} esiintymiset {target}:lla", "merge_selection": "Korvaa kaikki {source} esiintymiset valitulla {type}:llä.", @@ -364,6 +365,7 @@ "searchFilterObjectsAndHelp": "", "searchFilterObjectsAndNotHelp": "", "searchFilterObjectsOrNotHelp": "", + "seconds": "", "show_only_internal": "Näytä vain sisäiset reseptit", "show_split_screen": "Jaettu näkymä", "step_time_minutes": "Askelaika minuutteina", diff --git a/vue3/src/locales/fr.json b/vue3/src/locales/fr.json index 4ee9db9d5..0b7c481b0 100644 --- a/vue3/src/locales/fr.json +++ b/vue3/src/locales/fr.json @@ -579,6 +579,7 @@ "food_recipe_help": "Ajouter un lien vers la recette ici incluera cette recette dans n'importe qu'elle autre recette qui utilise cet ingrédient", "g": "gramme [g] (métrique, poids)", "hide_step_ingredients": "Cacher les ingrédients de l'étape", + "hours": "", "ignore_shopping_help": "Ne jamais ajouter d’aliment à la liste de courses (ex. : eau)", "import_duplicates": "Pour éviter les doublons, les recettes de même nom seront ignorées. Cocher la case pour tout importer.", "import_running": "Importation en cours, veuillez patienter !", @@ -648,6 +649,7 @@ "search_import_help_text": "Importer une recette depuis un site ou une application externe.", "search_no_recipes": "Aucune recette trouvée !", "search_rank": "Rechercher par note", + "seconds": "", "select_file": "Sélectionner Fichier", "select_food": "Sélectionner l’aliment", "select_keyword": "Sélectionner Mot Clé", diff --git a/vue3/src/locales/he.json b/vue3/src/locales/he.json index 8ac803b7b..3c591e804 100644 --- a/vue3/src/locales/he.json +++ b/vue3/src/locales/he.json @@ -582,6 +582,7 @@ "g": "גרם (g)", "gallon": "גלון [gal]", "hide_step_ingredients": "הסתר חומרי גלם בשלבי המרשם", + "hours": "", "ignore_shopping_help": "לעולם אל תוסיף מאכלים לרשימת הקניות (לדוגמא, מים)", "imperial_fluid_ounce": "אונקיה אמפיריאלית", "imperial_gallon": "גאלון אימפריאלי", @@ -660,6 +661,7 @@ "search_import_help_text": "ייבא מתכון מאתר חיצוני או אפליקציה.", "search_no_recipes": "לא נמצאו כל מתכונים!", "search_rank": "חיפוש דירוג", + "seconds": "", "select_file": "בחר קובץ", "select_food": "בחר מאכל", "select_keyword": "בחר מילת מפתח", diff --git a/vue3/src/locales/hu.json b/vue3/src/locales/hu.json index 9807cd60c..3b69b85de 100644 --- a/vue3/src/locales/hu.json +++ b/vue3/src/locales/hu.json @@ -544,6 +544,7 @@ "food_recipe_help": "Egy recept itt történő linkelése magában foglalja a linkelt receptet bármely más receptben, amely ezt az alapanyagot használja", "g": "gramm [g] (metrikus, súly)", "gallon": "gallon [gal] (USA, térfogat)", + "hours": "", "ignore_shopping_help": "Soha ne adja hozzá az alapanyagot a bevásárlólistához (pl. víz)", "imperial_fluid_ounce": "imperial folyadékuncia [imp fl oz] (Egyesült Királyság, térfogat)", "imperial_gallon": "imperial galon [imp gal] (Egyesült Királyság, térfogat)", @@ -619,6 +620,7 @@ "search_import_help_text": "Recept importálása külső webhelyről vagy alkalmazásból.", "search_no_recipes": "Nem találtunk semmilyen receptet!", "search_rank": "Keresési rangsor", + "seconds": "", "select_file": "Fájl kiválasztása", "select_food": "Étel kiválasztása", "select_keyword": "Kulcsszó kiválasztása", diff --git a/vue3/src/locales/hy.json b/vue3/src/locales/hy.json index 67ae4f001..e233d6e65 100644 --- a/vue3/src/locales/hy.json +++ b/vue3/src/locales/hy.json @@ -268,6 +268,7 @@ "exact": "", "exclude": "", "file_upload_disabled": "Ջեր տարածությունում ֆայլերի վերբեռնումը միացված չէ։", + "hours": "", "import_running": "Ներմուծվում է, խնդրում ենք սպասել։", "min": "", "on": "", @@ -278,6 +279,7 @@ "searchFilterObjectsAndHelp": "", "searchFilterObjectsAndNotHelp": "", "searchFilterObjectsOrNotHelp": "", + "seconds": "", "show_only_internal": "Ցույց տալ միայն ներքին բաղադրատոմսերը", "step_time_minutes": "Քայլի տևողությունը րոպեներով", "success_creating_resource": "Ռեսուրսը հաջողությամբ ստեղծվել է։", diff --git a/vue3/src/locales/id.json b/vue3/src/locales/id.json index 050c9ac1e..d36da3ef5 100644 --- a/vue3/src/locales/id.json +++ b/vue3/src/locales/id.json @@ -503,6 +503,7 @@ "filter_to_supermarket_desc": "", "food_inherit_info": "Bidang pada makanan yang harus diwarisi secara default.", "food_recipe_help": "", + "hours": "", "ignore_shopping_help": "", "import_duplicates": "", "import_running": "Impor berjalan, harap tunggu!", @@ -561,6 +562,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/is.json b/vue3/src/locales/is.json index f7396c020..5bc2d2fe5 100644 --- a/vue3/src/locales/is.json +++ b/vue3/src/locales/is.json @@ -580,6 +580,7 @@ "g": "", "gallon": "", "hide_step_ingredients": "", + "hours": "", "ignore_shopping_help": "", "imperial_fluid_ounce": "", "imperial_gallon": "", @@ -658,6 +659,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/it.json b/vue3/src/locales/it.json index d346ddba3..702ebb7dd 100644 --- a/vue3/src/locales/it.json +++ b/vue3/src/locales/it.json @@ -520,6 +520,7 @@ "filter_to_supermarket_desc": "Per impostazione predefinita, filtra la lista della spesa per includere esclusivamente le categorie del supermercato selezionato.", "food_inherit_info": "Campi di alimenti che devono essere ereditati per impostazione predefinita.", "food_recipe_help": "Collegando qui una ricetta, includerà la stessa in ogni altra ricetta che usa questo alimento", + "hours": "", "ignore_shopping_help": "Non aggiungere gli alimenti alla lista della spesa (es. acqua)", "import_duplicates": "Per evitare duplicati, le ricette con lo stesso nome di quelle esistenti vengono ignorate. Selezionare questa casella per importare tutto.", "import_running": "Importazione in corso, attendere prego!", @@ -579,6 +580,7 @@ "search_import_help_text": "Importa una ricetta da un sito web o da una applicazione.", "search_no_recipes": "Non sono state trovate ricette!", "search_rank": "Posizione di ricerca", + "seconds": "", "select_file": "Seleziona file", "select_food": "Seleziona alimento", "select_keyword": "Seleziona parola chiave", diff --git a/vue3/src/locales/lt.json b/vue3/src/locales/lt.json index 0df25059a..605e69f61 100644 --- a/vue3/src/locales/lt.json +++ b/vue3/src/locales/lt.json @@ -551,6 +551,7 @@ "g": "", "gallon": "", "hide_step_ingredients": "", + "hours": "", "ignore_shopping_help": "", "imperial_fluid_ounce": "", "imperial_gallon": "", @@ -628,6 +629,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/nb_NO.json b/vue3/src/locales/nb_NO.json index 33635ce30..0aa7899c9 100644 --- a/vue3/src/locales/nb_NO.json +++ b/vue3/src/locales/nb_NO.json @@ -537,6 +537,7 @@ "filter_to_supermarket_desc": "Som standard, filtrerer handlelisten til å kun inkludere kategorier for den valgte butikken.", "food_inherit_info": "Felter på matvarer som skal arves som standard.", "food_recipe_help": "", + "hours": "", "ignore_shopping_help": "", "import_duplicates": "", "import_running": "Importering pågår. Vennligst vent!", @@ -600,6 +601,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "Søk etter vurdering", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/nl.json b/vue3/src/locales/nl.json index 65b4f04a5..1f5a33e7e 100644 --- a/vue3/src/locales/nl.json +++ b/vue3/src/locales/nl.json @@ -545,6 +545,7 @@ "food_recipe_help": "Hier een recept koppelen voegt het gekoppelde recept toe in elk ander recept dat dit ingrediënt gebruikt", "g": "gram [g] (metrisch, gewicht)", "gallon": "gallon [gal] (VS, volume)", + "hours": "", "ignore_shopping_help": "Voeg ingrediënt nooit toe aan boodschappenlijstjes (bijv. water)", "imperial_fluid_ounce": "imperial fluid ounce [imp fl oz] (Verenigd Koninkrijk, volume)", "imperial_gallon": "imperial gal [imp gal] (Verenigd Koninkrijk, volume)", @@ -621,6 +622,7 @@ "search_import_help_text": "Importeer een recept van een externe website of applicatie.", "search_no_recipes": "Er zijn geen recepten gevonden!", "search_rank": "Zoekrang", + "seconds": "", "select_file": "Selecteer bestand", "select_food": "Selecteer ingrediënt", "select_keyword": "Selecteer etiket", diff --git a/vue3/src/locales/pl.json b/vue3/src/locales/pl.json index 0074ba2bf..3654ca3cd 100644 --- a/vue3/src/locales/pl.json +++ b/vue3/src/locales/pl.json @@ -584,6 +584,7 @@ "g": "gram [g] (metryczny, waga)", "gallon": "galon [gal] (USA, objętość)", "hide_step_ingredients": "Ukryj składniki kroku", + "hours": "", "ignore_shopping_help": "Nigdy nie dodawaj żywności do listy zakupów (np. wody)", "imperial_fluid_ounce": "imperialna uncja płynu [imp fl oz] (WB, objętość)", "imperial_gallon": "imperialny galon [imp gal] (WB, objętość)", @@ -662,6 +663,7 @@ "search_import_help_text": "Zaimportuj przepis z zewnętrznej strony internetowej lub aplikacji.", "search_no_recipes": "Nie udało się znaleźć żadnych przepisów!", "search_rank": "Szukaj w rankingu", + "seconds": "", "select_file": "Wybierz plik", "select_food": "Wybierz jedzenie/produkt", "select_keyword": "Wybierz słowo kluczowe", diff --git a/vue3/src/locales/pt.json b/vue3/src/locales/pt.json index 3dc12db88..36845b058 100644 --- a/vue3/src/locales/pt.json +++ b/vue3/src/locales/pt.json @@ -462,6 +462,7 @@ "filter_to_supermarket_desc": "", "food_inherit_info": "Campos no alimento que devem ser herdados por padrão.", "food_recipe_help": "", + "hours": "", "ignore_shopping_help": "", "import_running": "Importação a decorrer, por favor aguarde!", "in_shopping": "", @@ -517,6 +518,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "Selecionar Ficheiro", "select_food": "Selecionar Comida", "select_keyword": "Selecionar Palavra Chave", diff --git a/vue3/src/locales/pt_BR.json b/vue3/src/locales/pt_BR.json index 7b21ebb6a..805807829 100644 --- a/vue3/src/locales/pt_BR.json +++ b/vue3/src/locales/pt_BR.json @@ -557,6 +557,7 @@ "food_recipe_help": "", "g": "grama [g] (métrico, peso)", "hide_step_ingredients": "Ocultar Etapas de Ingredientes", + "hours": "", "ignore_shopping_help": "", "import_duplicates": "Para evitar duplicatas, as receitas com o mesmo nome das existentes são ignoradas. Marque esta caixa para importar tudo.", "import_running": "Importação em execução, aguarde!", @@ -624,6 +625,7 @@ "search_import_help_text": "Importe uma receita de um website externo ou aplicação.", "search_no_recipes": "Não encontrou nenhuma receita!", "search_rank": "Rank de Pesquisa", + "seconds": "", "select_file": "Selecionar Arquivo", "select_food": "Selecionar Alimento", "select_keyword": "Selecionar Palavra-Chave", diff --git a/vue3/src/locales/ro.json b/vue3/src/locales/ro.json index f20af3fc5..268ffe3e8 100644 --- a/vue3/src/locales/ro.json +++ b/vue3/src/locales/ro.json @@ -522,6 +522,7 @@ "filter_to_supermarket_desc": "În mod implicit, filtrați lista de cumpărături pentru a include numai categoriile pentru supermarketul selectat.", "food_inherit_info": "Câmpuri pe alimente care ar trebui să fie moștenite în mod implicit.", "food_recipe_help": "Legarea unei rețete aici va include rețeta legată în orice altă rețetă care utilizează acest aliment", + "hours": "", "ignore_shopping_help": "Nu adăugați niciodată alimente pe lista de cumpărături (ex. apă)", "import_duplicates": "Pentru a preveni duplicatele, rețetele cu același nume ca și cele existente sunt ignorate. Bifați această casetă pentru a importa totul.", "import_running": "Import în desfășurare, așteptați!", @@ -582,6 +583,7 @@ "search_import_help_text": "Importați o rețetă de pe un site web sau o aplicație externă.", "search_no_recipes": "Nu a putut găsi nici o rețetă!", "search_rank": "Rang de căutare", + "seconds": "", "select_file": "Selectare fișier", "select_food": "Selectare mâncare", "select_keyword": "Selectați cuvânt cheie", diff --git a/vue3/src/locales/ru.json b/vue3/src/locales/ru.json index 8d2cc6044..d52287dcd 100644 --- a/vue3/src/locales/ru.json +++ b/vue3/src/locales/ru.json @@ -426,6 +426,7 @@ "filter_to_supermarket": "Фильтр для супермаркета", "food_inherit_info": "Поля для продуктов питания, которые должны наследоваться по умолчанию.", "food_recipe_help": "Если вы разместите здесь ссылку на рецепт, то он будет включен в любой другой рецепт, в котором используется это блюдо", + "hours": "", "import_running": "Идет загрузка, пожалуйста ждите!", "ingredient_list": "Список ингредиентов", "last_cooked": "Последнее приготовленое", @@ -466,6 +467,7 @@ "searchFilterObjectsAndNotHelp": "", "searchFilterObjectsOrNotHelp": "", "search_rank": "Поисковый рейтинг", + "seconds": "", "select_file": "Выбрать файл", "select_food": "Выберите продукты питания", "select_keyword": "Выбрать ключевое слово", diff --git a/vue3/src/locales/sl.json b/vue3/src/locales/sl.json index f4502a920..53385c842 100644 --- a/vue3/src/locales/sl.json +++ b/vue3/src/locales/sl.json @@ -413,6 +413,7 @@ "file_upload_disabled": "Nalaganje datoteke ni omogočeno za tvoj prostor.", "filter_to_supermarket_desc": "Privzeto, razvrsti nakupovalni listek, da vključi samo označene trgovine.", "food_inherit_info": "Polja za živila, ki so privzeto podedovana.", + "hours": "", "import_running": "Uvoz poteka, prosim počakaj!", "in_shopping": "V nakupovalnem listku", "left_handed": "Način za levičarje", @@ -447,6 +448,7 @@ "searchFilterObjectsAndHelp": "", "searchFilterObjectsAndNotHelp": "", "searchFilterObjectsOrNotHelp": "", + "seconds": "", "shopping_add_onhand": "Avtomatsko v roki", "shopping_auto_sync": "Avtomatska sinhronizacija", "shopping_auto_sync_desc": "Nastavitev na 0 bo onemogoča avtomatsko sinhronizacijo. Pri ogledu nakupovalnega seznama se seznam posodablja vsakih nekaj sekund za sinhronizacijo sprememb, ki jih je morda naredil nekdo drug. Uporabno pri nakupovanju z več ljudmi, vendar bo uporabljalo mobilne podatke.", diff --git a/vue3/src/locales/sv.json b/vue3/src/locales/sv.json index a6ce3de0c..4ffe81af6 100644 --- a/vue3/src/locales/sv.json +++ b/vue3/src/locales/sv.json @@ -584,6 +584,7 @@ "g": "gram [g] (metriskt, vikt)", "gallon": "gallon [gal] (US, volym)", "hide_step_ingredients": "Dölj ingredienser för steget", + "hours": "", "ignore_shopping_help": "Lägg aldrig till ingrediens på inköpslistan (t.ex. vatten)", "imperial_fluid_ounce": "imperial flouid ounce [imp fl oz] (UK, volym)", "imperial_gallon": "imperial gal [imp gal] (UK, volym)", @@ -662,6 +663,7 @@ "search_import_help_text": "Importera ett recept från en extern webbplats eller applikation.", "search_no_recipes": "Hittade inga recept!", "search_rank": "Sök rank", + "seconds": "", "select_file": "Välj fil", "select_food": "Välj mat", "select_keyword": "Välj nyckelord", diff --git a/vue3/src/locales/tr.json b/vue3/src/locales/tr.json index f325e02cd..65ad16db8 100644 --- a/vue3/src/locales/tr.json +++ b/vue3/src/locales/tr.json @@ -582,6 +582,7 @@ "g": "gram [g] (metrik, ağırlık)", "gallon": "galon [gal] (ABD, hacim)", "hide_step_ingredients": "Adımdaki Malzemeleri Gizle", + "hours": "", "ignore_shopping_help": "Alışveriş listesine asla eklenmeyecek yiyecek (örn. su)", "imperial_fluid_ounce": "imperial fluid ounce [imp fl oz] (Birleşik Krallık, hacim)", "imperial_gallon": "imperial gal [imp gal] (Birleşik Krallık, hacim)", @@ -660,6 +661,7 @@ "search_import_help_text": "Harici bir web sitesinden veya uygulamadan bir tarifi içe aktarın.", "search_no_recipes": "Herhangi bir tarif bulunamadı!", "search_rank": "Arama Sıralaması", + "seconds": "", "select_file": "Dosya Seç", "select_food": "Yiyecek Seç", "select_keyword": "Anahtar Kelimeyi Seç", diff --git a/vue3/src/locales/uk.json b/vue3/src/locales/uk.json index f20dbce33..9e895d674 100644 --- a/vue3/src/locales/uk.json +++ b/vue3/src/locales/uk.json @@ -486,6 +486,7 @@ "filter_to_supermarket": "", "filter_to_supermarket_desc": "", "food_recipe_help": "", + "hours": "", "ignore_shopping_help": "", "import_duplicates": "", "import_running": "Імпортується, будь ласка зачекайте!", @@ -543,6 +544,7 @@ "search_import_help_text": "", "search_no_recipes": "", "search_rank": "", + "seconds": "", "select_file": "", "select_food": "", "select_keyword": "", diff --git a/vue3/src/locales/zh_Hans.json b/vue3/src/locales/zh_Hans.json index 2af19d5dc..4888fd371 100644 --- a/vue3/src/locales/zh_Hans.json +++ b/vue3/src/locales/zh_Hans.json @@ -574,6 +574,7 @@ "g": "克【g】(公制,重量)", "gallon": "加仑【gal】美制,体积)", "hide_step_ingredients": "隐藏该步骤的成分", + "hours": "", "ignore_shopping_help": "请不要将食物添加到购物列表中(例如水)", "imperial_fluid_ounce": "英制液体盎司【imp fl oz】(英制,体积)", "imperial_gallon": "英制加仑【imp gal】(英制,体积)", @@ -652,6 +653,7 @@ "search_import_help_text": "从外部网站或应用程序导入食谱。", "search_no_recipes": "找不到任何食谱!", "search_rank": "搜索排行", + "seconds": "", "select_file": "选择文件", "select_food": "选择食物", "select_keyword": "选择关键字", diff --git a/vue3/src/locales/zh_Hant.json b/vue3/src/locales/zh_Hant.json index 5d7fe55a3..29a69b224 100644 --- a/vue3/src/locales/zh_Hant.json +++ b/vue3/src/locales/zh_Hant.json @@ -240,6 +240,7 @@ "exclude": "", "file_upload_disabled": "您的空間未啟用檔案上傳功能。", "food_inherit_info": "食物上應該預設繼承的欄位。", + "hours": "", "import_running": "正在進行匯入,請稍候!", "min": "", "on": "", @@ -252,6 +253,7 @@ "searchFilterObjectsAndHelp": "", "searchFilterObjectsAndNotHelp": "", "searchFilterObjectsOrNotHelp": "", + "seconds": "", "show_only_internal": "僅顯示內部食譜", "show_split_screen": "分割視圖", "step_time_minutes": "步驟時間(以分鐘為單位)", diff --git a/vue3/src/openapi/.openapi-generator/FILES b/vue3/src/openapi/.openapi-generator/FILES index b69d3424d..9dced695d 100644 --- a/vue3/src/openapi/.openapi-generator/FILES +++ b/vue3/src/openapi/.openapi-generator/FILES @@ -6,6 +6,8 @@ models/AccessToken.ts models/AuthToken.ts models/AutoMealPlan.ts models/Automation.ts +models/AutomationTypeEnum.ts +models/BaseUnitEnum.ts models/BookmarkletImport.ts models/BookmarkletImportList.ts models/ConnectorConfigConfig.ts @@ -14,6 +16,7 @@ models/CustomFilter.ts models/DefaultPageEnum.ts models/DeleteEnum.ts models/ExportLog.ts +models/ExportRequest.ts models/FdcQuery.ts models/FdcQueryFoods.ts models/Food.ts @@ -37,6 +40,16 @@ models/MealPlan.ts models/MealType.ts models/MethodEnum.ts models/NutritionInformation.ts +models/OpenDataCategory.ts +models/OpenDataConversion.ts +models/OpenDataFood.ts +models/OpenDataFoodProperty.ts +models/OpenDataProperty.ts +models/OpenDataStore.ts +models/OpenDataStoreCategory.ts +models/OpenDataUnit.ts +models/OpenDataUnitTypeEnum.ts +models/OpenDataVersion.ts models/PaginatedAutomationList.ts models/PaginatedBookmarkletImportListList.ts models/PaginatedCookLogList.ts @@ -83,6 +96,13 @@ models/PatchedInviteLink.ts models/PatchedKeyword.ts models/PatchedMealPlan.ts models/PatchedMealType.ts +models/PatchedOpenDataCategory.ts +models/PatchedOpenDataConversion.ts +models/PatchedOpenDataFood.ts +models/PatchedOpenDataProperty.ts +models/PatchedOpenDataStore.ts +models/PatchedOpenDataUnit.ts +models/PatchedOpenDataVersion.ts models/PatchedProperty.ts models/PatchedPropertyType.ts models/PatchedRecipe.ts @@ -142,7 +162,6 @@ models/SupermarketCategoryRelation.ts models/Sync.ts models/SyncLog.ts models/ThemeEnum.ts -models/TypeEnum.ts models/Unit.ts models/UnitConversion.ts models/User.ts diff --git a/vue3/src/openapi/apis/ApiApi.ts b/vue3/src/openapi/apis/ApiApi.ts index 3dbc5aeb2..6e9c470ba 100644 --- a/vue3/src/openapi/apis/ApiApi.ts +++ b/vue3/src/openapi/apis/ApiApi.ts @@ -23,6 +23,7 @@ import type { CookLog, CustomFilter, ExportLog, + ExportRequest, FdcQuery, Food, FoodInheritField, @@ -39,6 +40,13 @@ import type { Localization, MealPlan, MealType, + OpenDataCategory, + OpenDataConversion, + OpenDataFood, + OpenDataProperty, + OpenDataStore, + OpenDataUnit, + OpenDataVersion, PaginatedAutomationList, PaginatedBookmarkletImportListList, PaginatedCookLogList, @@ -85,6 +93,13 @@ import type { PatchedKeyword, PatchedMealPlan, PatchedMealType, + PatchedOpenDataCategory, + PatchedOpenDataConversion, + PatchedOpenDataFood, + PatchedOpenDataProperty, + PatchedOpenDataStore, + PatchedOpenDataUnit, + PatchedOpenDataVersion, PatchedProperty, PatchedPropertyType, PatchedRecipe, @@ -155,6 +170,8 @@ import { CustomFilterToJSON, ExportLogFromJSON, ExportLogToJSON, + ExportRequestFromJSON, + ExportRequestToJSON, FdcQueryFromJSON, FdcQueryToJSON, FoodFromJSON, @@ -187,6 +204,20 @@ import { MealPlanToJSON, MealTypeFromJSON, MealTypeToJSON, + OpenDataCategoryFromJSON, + OpenDataCategoryToJSON, + OpenDataConversionFromJSON, + OpenDataConversionToJSON, + OpenDataFoodFromJSON, + OpenDataFoodToJSON, + OpenDataPropertyFromJSON, + OpenDataPropertyToJSON, + OpenDataStoreFromJSON, + OpenDataStoreToJSON, + OpenDataUnitFromJSON, + OpenDataUnitToJSON, + OpenDataVersionFromJSON, + OpenDataVersionToJSON, PaginatedAutomationListFromJSON, PaginatedAutomationListToJSON, PaginatedBookmarkletImportListListFromJSON, @@ -279,6 +310,20 @@ import { PatchedMealPlanToJSON, PatchedMealTypeFromJSON, PatchedMealTypeToJSON, + PatchedOpenDataCategoryFromJSON, + PatchedOpenDataCategoryToJSON, + PatchedOpenDataConversionFromJSON, + PatchedOpenDataConversionToJSON, + PatchedOpenDataFoodFromJSON, + PatchedOpenDataFoodToJSON, + PatchedOpenDataPropertyFromJSON, + PatchedOpenDataPropertyToJSON, + PatchedOpenDataStoreFromJSON, + PatchedOpenDataStoreToJSON, + PatchedOpenDataUnitFromJSON, + PatchedOpenDataUnitToJSON, + PatchedOpenDataVersionFromJSON, + PatchedOpenDataVersionToJSON, PatchedPropertyFromJSON, PatchedPropertyToJSON, PatchedPropertyTypeFromJSON, @@ -557,6 +602,10 @@ export interface ApiDownloadFileRetrieveRequest { fileId: number; } +export interface ApiExportCreateRequest { + exportRequest: ExportRequest; +} + export interface ApiExportLogCreateRequest { exportLog: Omit; } @@ -869,6 +918,164 @@ export interface ApiMealTypeUpdateRequest { mealType: Omit; } +export interface ApiOpenDataCategoryCreateRequest { + openDataCategory: Omit; +} + +export interface ApiOpenDataCategoryDestroyRequest { + id: number; +} + +export interface ApiOpenDataCategoryPartialUpdateRequest { + id: number; + patchedOpenDataCategory?: Omit; +} + +export interface ApiOpenDataCategoryRetrieveRequest { + id: number; +} + +export interface ApiOpenDataCategoryUpdateRequest { + id: number; + openDataCategory: Omit; +} + +export interface ApiOpenDataConversionCreateRequest { + openDataConversion: Omit; +} + +export interface ApiOpenDataConversionDestroyRequest { + id: number; +} + +export interface ApiOpenDataConversionPartialUpdateRequest { + id: number; + patchedOpenDataConversion?: Omit; +} + +export interface ApiOpenDataConversionRetrieveRequest { + id: number; +} + +export interface ApiOpenDataConversionUpdateRequest { + id: number; + openDataConversion: Omit; +} + +export interface ApiOpenDataFDCRetrieveRequest { + id: string; +} + +export interface ApiOpenDataFoodCreateRequest { + openDataFood: Omit; +} + +export interface ApiOpenDataFoodDestroyRequest { + id: number; +} + +export interface ApiOpenDataFoodPartialUpdateRequest { + id: number; + patchedOpenDataFood?: Omit; +} + +export interface ApiOpenDataFoodRetrieveRequest { + id: number; +} + +export interface ApiOpenDataFoodUpdateRequest { + id: number; + openDataFood: Omit; +} + +export interface ApiOpenDataPropertyCreateRequest { + openDataProperty: Omit; +} + +export interface ApiOpenDataPropertyDestroyRequest { + id: number; +} + +export interface ApiOpenDataPropertyPartialUpdateRequest { + id: number; + patchedOpenDataProperty?: Omit; +} + +export interface ApiOpenDataPropertyRetrieveRequest { + id: number; +} + +export interface ApiOpenDataPropertyUpdateRequest { + id: number; + openDataProperty: Omit; +} + +export interface ApiOpenDataStoreCreateRequest { + openDataStore: Omit; +} + +export interface ApiOpenDataStoreDestroyRequest { + id: number; +} + +export interface ApiOpenDataStorePartialUpdateRequest { + id: number; + patchedOpenDataStore?: Omit; +} + +export interface ApiOpenDataStoreRetrieveRequest { + id: number; +} + +export interface ApiOpenDataStoreUpdateRequest { + id: number; + openDataStore: Omit; +} + +export interface ApiOpenDataUnitCreateRequest { + openDataUnit: Omit; +} + +export interface ApiOpenDataUnitDestroyRequest { + id: number; +} + +export interface ApiOpenDataUnitPartialUpdateRequest { + id: number; + patchedOpenDataUnit?: Omit; +} + +export interface ApiOpenDataUnitRetrieveRequest { + id: number; +} + +export interface ApiOpenDataUnitUpdateRequest { + id: number; + openDataUnit: Omit; +} + +export interface ApiOpenDataVersionCreateRequest { + openDataVersion: OpenDataVersion; +} + +export interface ApiOpenDataVersionDestroyRequest { + id: number; +} + +export interface ApiOpenDataVersionPartialUpdateRequest { + id: number; + patchedOpenDataVersion?: PatchedOpenDataVersion; +} + +export interface ApiOpenDataVersionRetrieveRequest { + id: number; +} + +export interface ApiOpenDataVersionUpdateRequest { + id: number; + openDataVersion: OpenDataVersion; +} + export interface ApiPropertyCreateRequest { property: Property; } @@ -3126,6 +3333,44 @@ export class ApiApi extends runtime.BaseAPI { await this.apiDownloadFileRetrieveRaw(requestParameters, initOverrides); } + /** + */ + async apiExportCreateRaw(requestParameters: ApiExportCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['exportRequest'] == null) { + throw new runtime.RequiredError( + 'exportRequest', + 'Required parameter "exportRequest" was null or undefined when calling apiExportCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/export/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: ExportRequestToJSON(requestParameters['exportRequest']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ExportLogFromJSON(jsonValue)); + } + + /** + */ + async apiExportCreate(requestParameters: ApiExportCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiExportCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + /** * logs request counts to redis cache total/per user/ */ @@ -5909,6 +6154,1593 @@ export class ApiApi extends runtime.BaseAPI { return await response.value(); } + /** + */ + async apiOpenDataCategoryCreateRaw(requestParameters: ApiOpenDataCategoryCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataCategory'] == null) { + throw new runtime.RequiredError( + 'openDataCategory', + 'Required parameter "openDataCategory" was null or undefined when calling apiOpenDataCategoryCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-category/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataCategoryToJSON(requestParameters['openDataCategory']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataCategoryFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataCategoryCreate(requestParameters: ApiOpenDataCategoryCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataCategoryCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataCategoryDestroyRaw(requestParameters: ApiOpenDataCategoryDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataCategoryDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-category/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataCategoryDestroy(requestParameters: ApiOpenDataCategoryDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataCategoryDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataCategoryListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-category/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataCategoryFromJSON)); + } + + /** + */ + async apiOpenDataCategoryList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataCategoryListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataCategoryPartialUpdateRaw(requestParameters: ApiOpenDataCategoryPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataCategoryPartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-category/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataCategoryToJSON(requestParameters['patchedOpenDataCategory']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataCategoryFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataCategoryPartialUpdate(requestParameters: ApiOpenDataCategoryPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataCategoryPartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataCategoryRetrieveRaw(requestParameters: ApiOpenDataCategoryRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataCategoryRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-category/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataCategoryFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataCategoryRetrieve(requestParameters: ApiOpenDataCategoryRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataCategoryRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataCategoryUpdateRaw(requestParameters: ApiOpenDataCategoryUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataCategoryUpdate().' + ); + } + + if (requestParameters['openDataCategory'] == null) { + throw new runtime.RequiredError( + 'openDataCategory', + 'Required parameter "openDataCategory" was null or undefined when calling apiOpenDataCategoryUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-category/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataCategoryToJSON(requestParameters['openDataCategory']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataCategoryFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataCategoryUpdate(requestParameters: ApiOpenDataCategoryUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataCategoryUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataConversionCreateRaw(requestParameters: ApiOpenDataConversionCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataConversion'] == null) { + throw new runtime.RequiredError( + 'openDataConversion', + 'Required parameter "openDataConversion" was null or undefined when calling apiOpenDataConversionCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-conversion/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataConversionToJSON(requestParameters['openDataConversion']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataConversionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataConversionCreate(requestParameters: ApiOpenDataConversionCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataConversionCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataConversionDestroyRaw(requestParameters: ApiOpenDataConversionDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataConversionDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-conversion/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataConversionDestroy(requestParameters: ApiOpenDataConversionDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataConversionDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataConversionListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-conversion/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataConversionFromJSON)); + } + + /** + */ + async apiOpenDataConversionList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataConversionListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataConversionPartialUpdateRaw(requestParameters: ApiOpenDataConversionPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataConversionPartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-conversion/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataConversionToJSON(requestParameters['patchedOpenDataConversion']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataConversionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataConversionPartialUpdate(requestParameters: ApiOpenDataConversionPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataConversionPartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataConversionRetrieveRaw(requestParameters: ApiOpenDataConversionRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataConversionRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-conversion/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataConversionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataConversionRetrieve(requestParameters: ApiOpenDataConversionRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataConversionRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataConversionUpdateRaw(requestParameters: ApiOpenDataConversionUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataConversionUpdate().' + ); + } + + if (requestParameters['openDataConversion'] == null) { + throw new runtime.RequiredError( + 'openDataConversion', + 'Required parameter "openDataConversion" was null or undefined when calling apiOpenDataConversionUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-conversion/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataConversionToJSON(requestParameters['openDataConversion']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataConversionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataConversionUpdate(requestParameters: ApiOpenDataConversionUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataConversionUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataFDCRetrieveRaw(requestParameters: ApiOpenDataFDCRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataFDCRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-FDC/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataFDCRetrieve(requestParameters: ApiOpenDataFDCRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataFDCRetrieveRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataFoodCreateRaw(requestParameters: ApiOpenDataFoodCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataFood'] == null) { + throw new runtime.RequiredError( + 'openDataFood', + 'Required parameter "openDataFood" was null or undefined when calling apiOpenDataFoodCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-food/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataFoodToJSON(requestParameters['openDataFood']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataFoodFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataFoodCreate(requestParameters: ApiOpenDataFoodCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataFoodCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataFoodDestroyRaw(requestParameters: ApiOpenDataFoodDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataFoodDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-food/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataFoodDestroy(requestParameters: ApiOpenDataFoodDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataFoodDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataFoodListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-food/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataFoodFromJSON)); + } + + /** + */ + async apiOpenDataFoodList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataFoodListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataFoodPartialUpdateRaw(requestParameters: ApiOpenDataFoodPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataFoodPartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-food/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataFoodToJSON(requestParameters['patchedOpenDataFood']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataFoodFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataFoodPartialUpdate(requestParameters: ApiOpenDataFoodPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataFoodPartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataFoodRetrieveRaw(requestParameters: ApiOpenDataFoodRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataFoodRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-food/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataFoodFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataFoodRetrieve(requestParameters: ApiOpenDataFoodRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataFoodRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataFoodUpdateRaw(requestParameters: ApiOpenDataFoodUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataFoodUpdate().' + ); + } + + if (requestParameters['openDataFood'] == null) { + throw new runtime.RequiredError( + 'openDataFood', + 'Required parameter "openDataFood" was null or undefined when calling apiOpenDataFoodUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-food/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataFoodToJSON(requestParameters['openDataFood']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataFoodFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataFoodUpdate(requestParameters: ApiOpenDataFoodUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataFoodUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataPropertyCreateRaw(requestParameters: ApiOpenDataPropertyCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataProperty'] == null) { + throw new runtime.RequiredError( + 'openDataProperty', + 'Required parameter "openDataProperty" was null or undefined when calling apiOpenDataPropertyCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-property/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataPropertyToJSON(requestParameters['openDataProperty']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataPropertyFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataPropertyCreate(requestParameters: ApiOpenDataPropertyCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataPropertyCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataPropertyDestroyRaw(requestParameters: ApiOpenDataPropertyDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataPropertyDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-property/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataPropertyDestroy(requestParameters: ApiOpenDataPropertyDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataPropertyDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataPropertyListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-property/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataPropertyFromJSON)); + } + + /** + */ + async apiOpenDataPropertyList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataPropertyListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataPropertyPartialUpdateRaw(requestParameters: ApiOpenDataPropertyPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataPropertyPartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-property/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataPropertyToJSON(requestParameters['patchedOpenDataProperty']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataPropertyFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataPropertyPartialUpdate(requestParameters: ApiOpenDataPropertyPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataPropertyPartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataPropertyRetrieveRaw(requestParameters: ApiOpenDataPropertyRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataPropertyRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-property/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataPropertyFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataPropertyRetrieve(requestParameters: ApiOpenDataPropertyRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataPropertyRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataPropertyUpdateRaw(requestParameters: ApiOpenDataPropertyUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataPropertyUpdate().' + ); + } + + if (requestParameters['openDataProperty'] == null) { + throw new runtime.RequiredError( + 'openDataProperty', + 'Required parameter "openDataProperty" was null or undefined when calling apiOpenDataPropertyUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-property/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataPropertyToJSON(requestParameters['openDataProperty']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataPropertyFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataPropertyUpdate(requestParameters: ApiOpenDataPropertyUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataPropertyUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataStatsRetrieveRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-stats/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataStatsRetrieve(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataStatsRetrieveRaw(initOverrides); + } + + /** + */ + async apiOpenDataStoreCreateRaw(requestParameters: ApiOpenDataStoreCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataStore'] == null) { + throw new runtime.RequiredError( + 'openDataStore', + 'Required parameter "openDataStore" was null or undefined when calling apiOpenDataStoreCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-store/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataStoreToJSON(requestParameters['openDataStore']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataStoreFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataStoreCreate(requestParameters: ApiOpenDataStoreCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataStoreCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataStoreDestroyRaw(requestParameters: ApiOpenDataStoreDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataStoreDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-store/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataStoreDestroy(requestParameters: ApiOpenDataStoreDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataStoreDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataStoreListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-store/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataStoreFromJSON)); + } + + /** + */ + async apiOpenDataStoreList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataStoreListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataStorePartialUpdateRaw(requestParameters: ApiOpenDataStorePartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataStorePartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-store/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataStoreToJSON(requestParameters['patchedOpenDataStore']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataStoreFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataStorePartialUpdate(requestParameters: ApiOpenDataStorePartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataStorePartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataStoreRetrieveRaw(requestParameters: ApiOpenDataStoreRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataStoreRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-store/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataStoreFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataStoreRetrieve(requestParameters: ApiOpenDataStoreRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataStoreRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataStoreUpdateRaw(requestParameters: ApiOpenDataStoreUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataStoreUpdate().' + ); + } + + if (requestParameters['openDataStore'] == null) { + throw new runtime.RequiredError( + 'openDataStore', + 'Required parameter "openDataStore" was null or undefined when calling apiOpenDataStoreUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-store/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataStoreToJSON(requestParameters['openDataStore']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataStoreFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataStoreUpdate(requestParameters: ApiOpenDataStoreUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataStoreUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataUnitCreateRaw(requestParameters: ApiOpenDataUnitCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataUnit'] == null) { + throw new runtime.RequiredError( + 'openDataUnit', + 'Required parameter "openDataUnit" was null or undefined when calling apiOpenDataUnitCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-unit/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataUnitToJSON(requestParameters['openDataUnit']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataUnitFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataUnitCreate(requestParameters: ApiOpenDataUnitCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataUnitCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataUnitDestroyRaw(requestParameters: ApiOpenDataUnitDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataUnitDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-unit/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataUnitDestroy(requestParameters: ApiOpenDataUnitDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataUnitDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataUnitListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-unit/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataUnitFromJSON)); + } + + /** + */ + async apiOpenDataUnitList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataUnitListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataUnitPartialUpdateRaw(requestParameters: ApiOpenDataUnitPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataUnitPartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-unit/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataUnitToJSON(requestParameters['patchedOpenDataUnit']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataUnitFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataUnitPartialUpdate(requestParameters: ApiOpenDataUnitPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataUnitPartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataUnitRetrieveRaw(requestParameters: ApiOpenDataUnitRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataUnitRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-unit/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataUnitFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataUnitRetrieve(requestParameters: ApiOpenDataUnitRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataUnitRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataUnitUpdateRaw(requestParameters: ApiOpenDataUnitUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataUnitUpdate().' + ); + } + + if (requestParameters['openDataUnit'] == null) { + throw new runtime.RequiredError( + 'openDataUnit', + 'Required parameter "openDataUnit" was null or undefined when calling apiOpenDataUnitUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-unit/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataUnitToJSON(requestParameters['openDataUnit']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataUnitFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataUnitUpdate(requestParameters: ApiOpenDataUnitUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataUnitUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataVersionCreateRaw(requestParameters: ApiOpenDataVersionCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['openDataVersion'] == null) { + throw new runtime.RequiredError( + 'openDataVersion', + 'Required parameter "openDataVersion" was null or undefined when calling apiOpenDataVersionCreate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-version/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: OpenDataVersionToJSON(requestParameters['openDataVersion']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataVersionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataVersionCreate(requestParameters: ApiOpenDataVersionCreateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataVersionCreateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataVersionDestroyRaw(requestParameters: ApiOpenDataVersionDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataVersionDestroy().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-version/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async apiOpenDataVersionDestroy(requestParameters: ApiOpenDataVersionDestroyRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.apiOpenDataVersionDestroyRaw(requestParameters, initOverrides); + } + + /** + */ + async apiOpenDataVersionListRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-version/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(OpenDataVersionFromJSON)); + } + + /** + */ + async apiOpenDataVersionList(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.apiOpenDataVersionListRaw(initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataVersionPartialUpdateRaw(requestParameters: ApiOpenDataVersionPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataVersionPartialUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-version/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PatchedOpenDataVersionToJSON(requestParameters['patchedOpenDataVersion']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataVersionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataVersionPartialUpdate(requestParameters: ApiOpenDataVersionPartialUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataVersionPartialUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataVersionRetrieveRaw(requestParameters: ApiOpenDataVersionRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataVersionRetrieve().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-version/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataVersionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataVersionRetrieve(requestParameters: ApiOpenDataVersionRetrieveRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataVersionRetrieveRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async apiOpenDataVersionUpdateRaw(requestParameters: ApiOpenDataVersionUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['id'] == null) { + throw new runtime.RequiredError( + 'id', + 'Required parameter "id" was null or undefined when calling apiOpenDataVersionUpdate().' + ); + } + + if (requestParameters['openDataVersion'] == null) { + throw new runtime.RequiredError( + 'openDataVersion', + 'Required parameter "openDataVersion" was null or undefined when calling apiOpenDataVersionUpdate().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication + } + + const response = await this.request({ + path: `/api/open-data-version/{id}/`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id']))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: OpenDataVersionToJSON(requestParameters['openDataVersion']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OpenDataVersionFromJSON(jsonValue)); + } + + /** + */ + async apiOpenDataVersionUpdate(requestParameters: ApiOpenDataVersionUpdateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.apiOpenDataVersionUpdateRaw(requestParameters, initOverrides); + return await response.value(); + } + /** * logs request counts to redis cache total/per user/ */ diff --git a/vue3/src/openapi/models/Automation.ts b/vue3/src/openapi/models/Automation.ts index 8b0e1bfeb..6e1bde52b 100644 --- a/vue3/src/openapi/models/Automation.ts +++ b/vue3/src/openapi/models/Automation.ts @@ -13,12 +13,12 @@ */ import { mapValues } from '../runtime'; -import type { TypeEnum } from './TypeEnum'; +import type { AutomationTypeEnum } from './AutomationTypeEnum'; import { - TypeEnumFromJSON, - TypeEnumFromJSONTyped, - TypeEnumToJSON, -} from './TypeEnum'; + AutomationTypeEnumFromJSON, + AutomationTypeEnumFromJSONTyped, + AutomationTypeEnumToJSON, +} from './AutomationTypeEnum'; /** * @@ -34,10 +34,10 @@ export interface Automation { id?: number; /** * - * @type {TypeEnum} + * @type {AutomationTypeEnum} * @memberof Automation */ - type: TypeEnum; + type: AutomationTypeEnum; /** * * @type {string} @@ -108,7 +108,7 @@ export function AutomationFromJSONTyped(json: any, ignoreDiscriminator: boolean) return { 'id': json['id'] == null ? undefined : json['id'], - 'type': TypeEnumFromJSON(json['type']), + 'type': AutomationTypeEnumFromJSON(json['type']), 'name': json['name'] == null ? undefined : json['name'], 'description': json['description'] == null ? undefined : json['description'], 'param1': json['param_1'] == null ? undefined : json['param_1'], @@ -127,7 +127,7 @@ export function AutomationToJSON(value?: Omit | null): return { 'id': value['id'], - 'type': TypeEnumToJSON(value['type']), + 'type': AutomationTypeEnumToJSON(value['type']), 'name': value['name'], 'description': value['description'], 'param_1': value['param1'], diff --git a/vue3/src/openapi/models/ExportRequest.ts b/vue3/src/openapi/models/ExportRequest.ts new file mode 100644 index 000000000..638f889ef --- /dev/null +++ b/vue3/src/openapi/models/ExportRequest.ts @@ -0,0 +1,98 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Tandoor + * Tandoor API Docs + * + * The version of the OpenAPI document: 0.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { CustomFilter } from './CustomFilter'; +import { + CustomFilterFromJSON, + CustomFilterFromJSONTyped, + CustomFilterToJSON, +} from './CustomFilter'; +import type { RecipeFlat } from './RecipeFlat'; +import { + RecipeFlatFromJSON, + RecipeFlatFromJSONTyped, + RecipeFlatToJSON, +} from './RecipeFlat'; + +/** + * + * @export + * @interface ExportRequest + */ +export interface ExportRequest { + /** + * + * @type {string} + * @memberof ExportRequest + */ + type: string; + /** + * + * @type {boolean} + * @memberof ExportRequest + */ + all?: boolean; + /** + * + * @type {Array} + * @memberof ExportRequest + */ + recipes?: Array; + /** + * + * @type {CustomFilter} + * @memberof ExportRequest + */ + customFilter?: CustomFilter; +} + +/** + * Check if a given object implements the ExportRequest interface. + */ +export function instanceOfExportRequest(value: object): value is ExportRequest { + if (!('type' in value) || value['type'] === undefined) return false; + return true; +} + +export function ExportRequestFromJSON(json: any): ExportRequest { + return ExportRequestFromJSONTyped(json, false); +} + +export function ExportRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ExportRequest { + if (json == null) { + return json; + } + return { + + 'type': json['type'], + 'all': json['all'] == null ? undefined : json['all'], + 'recipes': json['recipes'] == null ? undefined : ((json['recipes'] as Array).map(RecipeFlatFromJSON)), + 'customFilter': json['custom_filter'] == null ? undefined : CustomFilterFromJSON(json['custom_filter']), + }; +} + +export function ExportRequestToJSON(value?: ExportRequest | null): any { + if (value == null) { + return value; + } + return { + + 'type': value['type'], + 'all': value['all'], + 'recipes': value['recipes'] == null ? undefined : ((value['recipes'] as Array).map(RecipeFlatToJSON)), + 'custom_filter': CustomFilterToJSON(value['customFilter']), + }; +} + diff --git a/vue3/src/openapi/models/ImportOpenDataResponse.ts b/vue3/src/openapi/models/ImportOpenDataResponse.ts index d755785c5..08d47e773 100644 --- a/vue3/src/openapi/models/ImportOpenDataResponse.ts +++ b/vue3/src/openapi/models/ImportOpenDataResponse.ts @@ -31,49 +31,43 @@ export interface ImportOpenDataResponse { * @type {ImportOpenDataResponseDetail} * @memberof ImportOpenDataResponse */ - food: ImportOpenDataResponseDetail; + food?: ImportOpenDataResponseDetail; /** * * @type {ImportOpenDataResponseDetail} * @memberof ImportOpenDataResponse */ - unit: ImportOpenDataResponseDetail; + unit?: ImportOpenDataResponseDetail; /** * * @type {ImportOpenDataResponseDetail} * @memberof ImportOpenDataResponse */ - category: ImportOpenDataResponseDetail; + category?: ImportOpenDataResponseDetail; /** * * @type {ImportOpenDataResponseDetail} * @memberof ImportOpenDataResponse */ - property: ImportOpenDataResponseDetail; + property?: ImportOpenDataResponseDetail; /** * * @type {ImportOpenDataResponseDetail} * @memberof ImportOpenDataResponse */ - store: ImportOpenDataResponseDetail; + store?: ImportOpenDataResponseDetail; /** * * @type {ImportOpenDataResponseDetail} * @memberof ImportOpenDataResponse */ - conversion: ImportOpenDataResponseDetail; + conversion?: ImportOpenDataResponseDetail; } /** * Check if a given object implements the ImportOpenDataResponse interface. */ export function instanceOfImportOpenDataResponse(value: object): value is ImportOpenDataResponse { - if (!('food' in value) || value['food'] === undefined) return false; - if (!('unit' in value) || value['unit'] === undefined) return false; - if (!('category' in value) || value['category'] === undefined) return false; - if (!('property' in value) || value['property'] === undefined) return false; - if (!('store' in value) || value['store'] === undefined) return false; - if (!('conversion' in value) || value['conversion'] === undefined) return false; return true; } @@ -87,12 +81,12 @@ export function ImportOpenDataResponseFromJSONTyped(json: any, ignoreDiscriminat } return { - 'food': ImportOpenDataResponseDetailFromJSON(json['food']), - 'unit': ImportOpenDataResponseDetailFromJSON(json['unit']), - 'category': ImportOpenDataResponseDetailFromJSON(json['category']), - 'property': ImportOpenDataResponseDetailFromJSON(json['property']), - 'store': ImportOpenDataResponseDetailFromJSON(json['store']), - 'conversion': ImportOpenDataResponseDetailFromJSON(json['conversion']), + 'food': json['food'] == null ? undefined : ImportOpenDataResponseDetailFromJSON(json['food']), + 'unit': json['unit'] == null ? undefined : ImportOpenDataResponseDetailFromJSON(json['unit']), + 'category': json['category'] == null ? undefined : ImportOpenDataResponseDetailFromJSON(json['category']), + 'property': json['property'] == null ? undefined : ImportOpenDataResponseDetailFromJSON(json['property']), + 'store': json['store'] == null ? undefined : ImportOpenDataResponseDetailFromJSON(json['store']), + 'conversion': json['conversion'] == null ? undefined : ImportOpenDataResponseDetailFromJSON(json['conversion']), }; } diff --git a/vue3/src/openapi/models/ImportOpenDataResponseDetail.ts b/vue3/src/openapi/models/ImportOpenDataResponseDetail.ts index 4afbe83ed..5a5a8dd63 100644 --- a/vue3/src/openapi/models/ImportOpenDataResponseDetail.ts +++ b/vue3/src/openapi/models/ImportOpenDataResponseDetail.ts @@ -24,35 +24,31 @@ export interface ImportOpenDataResponseDetail { * @type {number} * @memberof ImportOpenDataResponseDetail */ - totalCreated: number; + totalCreated?: number; /** * * @type {number} * @memberof ImportOpenDataResponseDetail */ - totalUpdated: number; + totalUpdated?: number; /** * * @type {number} * @memberof ImportOpenDataResponseDetail */ - totalUntouched: number; + totalUntouched?: number; /** * * @type {number} * @memberof ImportOpenDataResponseDetail */ - totalErrored: number; + totalErrored?: number; } /** * Check if a given object implements the ImportOpenDataResponseDetail interface. */ export function instanceOfImportOpenDataResponseDetail(value: object): value is ImportOpenDataResponseDetail { - if (!('totalCreated' in value) || value['totalCreated'] === undefined) return false; - if (!('totalUpdated' in value) || value['totalUpdated'] === undefined) return false; - if (!('totalUntouched' in value) || value['totalUntouched'] === undefined) return false; - if (!('totalErrored' in value) || value['totalErrored'] === undefined) return false; return true; } @@ -66,10 +62,10 @@ export function ImportOpenDataResponseDetailFromJSONTyped(json: any, ignoreDiscr } return { - 'totalCreated': json['total_created'], - 'totalUpdated': json['total_updated'], - 'totalUntouched': json['total_untouched'], - 'totalErrored': json['total_errored'], + 'totalCreated': json['total_created'] == null ? undefined : json['total_created'], + 'totalUpdated': json['total_updated'] == null ? undefined : json['total_updated'], + 'totalUntouched': json['total_untouched'] == null ? undefined : json['total_untouched'], + 'totalErrored': json['total_errored'] == null ? undefined : json['total_errored'], }; } diff --git a/vue3/src/openapi/models/PatchedAutomation.ts b/vue3/src/openapi/models/PatchedAutomation.ts index 0d20773cf..e6d687125 100644 --- a/vue3/src/openapi/models/PatchedAutomation.ts +++ b/vue3/src/openapi/models/PatchedAutomation.ts @@ -13,12 +13,12 @@ */ import { mapValues } from '../runtime'; -import type { TypeEnum } from './TypeEnum'; +import type { AutomationTypeEnum } from './AutomationTypeEnum'; import { - TypeEnumFromJSON, - TypeEnumFromJSONTyped, - TypeEnumToJSON, -} from './TypeEnum'; + AutomationTypeEnumFromJSON, + AutomationTypeEnumFromJSONTyped, + AutomationTypeEnumToJSON, +} from './AutomationTypeEnum'; /** * @@ -34,10 +34,10 @@ export interface PatchedAutomation { id?: number; /** * - * @type {TypeEnum} + * @type {AutomationTypeEnum} * @memberof PatchedAutomation */ - type?: TypeEnum; + type?: AutomationTypeEnum; /** * * @type {string} @@ -106,7 +106,7 @@ export function PatchedAutomationFromJSONTyped(json: any, ignoreDiscriminator: b return { 'id': json['id'] == null ? undefined : json['id'], - 'type': json['type'] == null ? undefined : TypeEnumFromJSON(json['type']), + 'type': json['type'] == null ? undefined : AutomationTypeEnumFromJSON(json['type']), 'name': json['name'] == null ? undefined : json['name'], 'description': json['description'] == null ? undefined : json['description'], 'param1': json['param_1'] == null ? undefined : json['param_1'], @@ -125,7 +125,7 @@ export function PatchedAutomationToJSON(value?: Omit{{ $t('SpaceSettings') }} {{ $t('SpaceMembers') }} {{ $t('Open_Data_Import') }} + {{ $t('Export') }} Admin {{ $t('API') }} diff --git a/vue3/src/utils/integration_utils.ts b/vue3/src/utils/integration_utils.ts index d0a28e083..b53db7f9e 100644 --- a/vue3/src/utils/integration_utils.ts +++ b/vue3/src/utils/integration_utils.ts @@ -20,7 +20,7 @@ export const INTEGRATIONS: Array = [ {id: 'MEALIE', name: "Mealie", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#mealie'}, {id: 'MEALMASTER', name: "Mealmaster", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#mealmaster'}, {id: 'MELARECIPES', name: "Melarecipes", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#melarecipes'}, - {id: 'NEXTCLOUD', name: "Nextcloud Cookbook", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#nextcloud'}, + {id: 'NEXTCLOUD', name: "Nextcloud Cookbook", import: true, export: true, helpUrl: 'https://docs.tandoor.dev/features/import_export/#nextcloud'}, {id: 'OPENEATS', name: "Openeats", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#openeats'}, {id: 'PAPRIKA', name: "Paprika", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#paprika'}, {id: 'PEPPERPLATE', name: "Pepperplate", import: true, export: false, helpUrl: 'https://docs.tandoor.dev/features/import_export/#pepperplate'},