newsroom: Beschreibung pflegen, durch die Rot-Ebene geprüft (Roadmap 1b.3)

Die Firmenseite im Kundenbereich bekommt den Beschreibungstext (max.
2 000 Zeichen, reiner Text). Er läuft durch dieselbe Klassifikation wie
eine Meldung (CompanyProfileCheck, KI mit deterministischem Fallback);
Rot wird abgewiesen. Links im Profiltext gibt es nicht — die Website ist
das eine Link-Feld. Bilder zurückgestellt (BALD-Platzhalter), bis die
Bild-Kennzeichnung angepasst ist.

Stufe 3 der Konversionsleiter (newsroom_edited) wird hier geschrieben,
einmal je Firma, mit der Herkunft des zuletzt eingelösten Magic Links.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-15 13:04:12 +00:00
parent a69b02193c
commit 85b039e739
6 changed files with 253 additions and 2 deletions

View file

@ -128,6 +128,31 @@ class ConversionRecorder
$this->recordOnce(ConversionEventType::FirstBooking, ConversionSource::Organic, $company);
}
/**
* Stufe 3 der Konversionsleiter: Newsroom gepflegt (Roadmap 1b.3).
*
* Einmal je Firma. Die Herkunft ist die des letzten eingelösten Magic
* Links dieses Kontos — wer über „Diesen Newsroom verwalten" aus der Mail
* kam und dann die Beschreibung schreibt, zählt für diese Mail. Ohne
* eingelösten Link (Passwort-Login) bleibt es `organic`.
*/
public function recordNewsroomEdited(Company $company, ?User $user): void
{
try {
$source = $user === null ? null : MagicLink::query()
->where('user_id', $user->getKey())
->where('purpose', 'login')
->whereNotNull('consumed_at')
->latest('consumed_at')
->value('source');
} catch (\Throwable $e) {
report($e);
$source = null;
}
$this->recordOnce(ConversionEventType::NewsroomEdited, ConversionSource::parse($source), $company);
}
private function alreadyRecorded(ConversionEventType $type, Company $company): bool
{
return ConversionEvent::query()