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: