diff --git a/api-rework/client/src/activities/detail.tsx b/api-rework/client/src/activities/detail.tsx index 0a0885e31..0ce170409 100644 --- a/api-rework/client/src/activities/detail.tsx +++ b/api-rework/client/src/activities/detail.tsx @@ -84,6 +84,17 @@ const ActivitiesDetail: React.FC = () => { }); }, [id, serial]); + const rerunImport = () => { + fetch(`${API_URL}/activities/${id}/migrate`, { + method: 'POST', + headers: { + Authorization: `Bearer ${auth.token}` + } + }).then(() => { + setSerial(serial + 1); + }); + }; + if (loading) { return ; } @@ -169,6 +180,12 @@ const ActivitiesDetail: React.FC = () => { />
+ { draft.user_details = { identity_provider: keycloakInstance.idTokenParsed.identity_provider, family_name: keycloakInstance.idTokenParsed.family_name, - given_name: keycloakInstance.idTokenParsed.given_name + given_name: keycloakInstance.idTokenParsed.given_name, + sub: keycloakInstance.idTokenParsed.sub || 'unknown' }; } }); diff --git a/api-rework/invasives/api/legacy_db/db.py b/api-rework/invasives/api/legacy_db/db.py index 93fc69153..6f79fe886 100644 --- a/api-rework/invasives/api/legacy_db/db.py +++ b/api-rework/invasives/api/legacy_db/db.py @@ -295,7 +295,7 @@ def migrate_codes(dry_run=False): def migrate_activities( dry_run=False, clobber=False, - source: Literal["all", "previously-failed", "random-sample", "list"] = "all", + source: Literal["all", "previously-failed", "random-sample", "single"] = "all", restrict_to_subtype: str | None = None, pk=None, ): diff --git a/api-rework/invasives/api/viewsets/activity.py b/api-rework/invasives/api/viewsets/activity.py index a3b249c9c..1d7d7d3dd 100644 --- a/api-rework/invasives/api/viewsets/activity.py +++ b/api-rework/invasives/api/viewsets/activity.py @@ -1,4 +1,5 @@ import json +import logging from django.http.response import HttpResponse import psycopg @@ -9,6 +10,7 @@ from rest_framework.status import HTTP_200_OK from rest_framework.viewsets import ReadOnlyModelViewSet +from api.legacy_db.db import LegacyDB from api.legacy_db.model_serializer import LegacyActivity from api.models.activity.activity import Activity from api.models.migrator.activity_migration_status import ActivityMigrationStatus @@ -35,6 +37,17 @@ def migration_status(self, request, *args, **kwargs): except: return Response(status=404) + @action(detail=True, methods=["post"]) + def migrate(self, request, *args, **kwargs): + try: + LegacyDB.migrate_activities( + source="single", dry_run=False, clobber=True, pk=self.kwargs["pk"] + ) + return Response(status=HTTP_200_OK) + except Exception as e: + logging.error("error migrating activity", exc_info=True) + return Response(status=500) + @action(detail=True, methods=["get"]) def legacy(self, request, *args, **kwargs): with psycopg.connect(LEGACY_DB_CONNECTION_STRING, row_factory=dict_row) as conn: