legacy: API-Key-Import löst E-Mail-gemergte User über legacy_import_map auf
Kunden, die in beiden Altportalen existierten, tragen nach dem Merge nur das zuletzt importierte Portal in users.legacy_portal/legacy_id — der Schlüssel des anderen Portals fand dadurch keinen Besitzer und wurde als 'Kein User-Mapping' übersprungen (Presseecho-Key → 410). Die Import-Map kennt beide Zuordnungen und wird jetzt zuerst befragt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
c8a292eb8c
commit
622cd4e289
2 changed files with 56 additions and 4 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Services\Api;
|
||||
|
||||
use App\Models\LegacyImportMap;
|
||||
use App\Models\User;
|
||||
use Laravel\Sanctum\PersonalAccessToken;
|
||||
|
||||
|
|
@ -48,10 +49,7 @@ class LegacyApiKeyImporter
|
|||
continue;
|
||||
}
|
||||
|
||||
$user = User::query()
|
||||
->where('legacy_portal', $portal)
|
||||
->where('legacy_id', (int) $row['legacy_id'])
|
||||
->first();
|
||||
$user = $this->resolveUser($portal, (int) $row['legacy_id']);
|
||||
|
||||
if (! $user) {
|
||||
$result['unknown_user']++;
|
||||
|
|
@ -87,4 +85,29 @@ class LegacyApiKeyImporter
|
|||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Löst den Token-Besitzer über die legacy_import_map auf. Die Spalten
|
||||
* users.legacy_portal/legacy_id reichen nicht: Bei E-Mail-Merges (gleicher
|
||||
* Kunde in beiden Altportalen) trägt der User nur das zuletzt importierte
|
||||
* Portal — die Import-Map kennt dagegen beide Zuordnungen, sodass auch der
|
||||
* Schlüssel des "anderen" Portals seinen Besitzer findet.
|
||||
*/
|
||||
private function resolveUser(string $portal, int $legacyId): ?User
|
||||
{
|
||||
$mappedUserId = LegacyImportMap::query()
|
||||
->where('legacy_portal', $portal)
|
||||
->where('legacy_table', 'sf_guard_user')
|
||||
->where('legacy_id', $legacyId)
|
||||
->value('target_id');
|
||||
|
||||
if ($mappedUserId !== null) {
|
||||
return User::query()->find($mappedUserId);
|
||||
}
|
||||
|
||||
return User::query()
|
||||
->where('legacy_portal', $portal)
|
||||
->where('legacy_id', $legacyId)
|
||||
->first();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue