Services Übersicht
Postbox nutzt eine Service-basierte Architektur. Business-Logik wird konsequent aus Livewire-Components, Jobs und Commands in dedizierte Services ausgelagert. Die Services liegen unter app/Services/ und sind nach Domänen in Unterverzeichnisse aufgeteilt.
AI Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ChannelLanguageDetector | App\Services\AI | Sprach-/Land-/Kategorie-Erkennung via Google Gemini | detect(), detectWithLogging(), detectAndSave() |
TagConsolidator | App\Services\AI | AI-gesteuerte Tag-Zusammenführung via Gemini | consolidateChunk() |
TagMerger | App\Services\AI | Tag-Merge- und Suppress-Aktionen ausführen | executeMerge(), executeSuppress(), executeBatch() |
Collector Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
CollectorJobDispatcher | App\Services\Collector | Collector-Jobs erstellen und dispatchen | dispatch() |
InstagramDailyScrapeProcessor | App\Services\Collector | Ergebnisse von Instagram Daily Scrapes verarbeiten | handleCompletion(), handleFailure() |
InstagramWatcherImportProcessor | App\Services\Collector | Ergebnisse von Instagram Watcher-Imports verarbeiten | handleCompletion(), handleFailure() |
Dashboard Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
LeaderboardPriorityService | App\Services\Dashboard | Priority-Profile für tägliches Scraping bestimmen | getLeaderProfileIds(), getCandidateProfileIds(), getPriorityProfileIds() |
Explore Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ExploreMetricsCalculator | App\Services\Explore | Tägliche Growth-Metriken und Trending-Scores | calculateDailyMetrics(), calculateTrendingScores(), updateTrendingFlags() |
ExploreTrendingVideosCalculator | App\Services\Explore | Trending-Videos basierend auf View-Growth/Velocity | calculateTrendingVideos(), getTopTrending() |
ExploreCategoryDetector | App\Services\Explore | Kategorie-Erkennung per Keywords und YouTube-Category-IDs | detectCategories(), detectCategoryForProfile(), extractTags() |
Favorites Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
FavoriteManager | App\Services\Favorites | Favoriten-Workspace verwalten, Toggle-Logik | getOrCreateFavoritesWorkspace(), isFavorite(), favorite(), unfavorite() |
GoogleApiUsage Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
GoogleApiUsageService | App\Services\GoogleApiUsage | Google Cloud Monitoring API abfragen | fetchQuotaUsage(), fetchQuotaLimits() |
GoogleApiUsageRepository | App\Services\GoogleApiUsage | Quota-Limits und Usage in DB persistieren | upsertLimits(), upsertUsages() |
GoogleApiUsageException | App\Services\GoogleApiUsage | Custom Exception für API-Fehler | -- |
Images Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ProfileImageProcessor | App\Services\Images | Profilbild-Varianten erzeugen (Resize, WebP/AVIF, LQIP) | generateVariants(), generateVideoThumbnailVariants(), regenerateFromDisk(), deleteVariants() |
Health Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
SystemHealthService | App\Services\Health | System-Health-Checks (DB, Cache, Reverb, Queue, API) | runAllChecks(), checkDatabase(), checkCache(), checkReverb(), checkQueueWorkers() |
Instagram Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ProfileKeywordExtractor | App\Services\Instagram | Keywords aus Bio, Handle und Username extrahieren | extractAndStore(), extract(), extractFromText(), extractFromHandle() |
Mail Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
MailFloodGuard | App\Services\Mail | Circuit Breaker für E-Mail-Versand | isPaused(), recordAndCheck(), pause(), resume(), getStatus(), log() |
Notifications Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
NotificationService | App\Services\Notifications | Notifications/Announcements erstellen und verwalten | announceToUser(), announceToWorkspace(), announceToAll(), getForUser(), markAsRead() |
NotificationPreferenceService | App\Services\Notifications | Benachrichtigungs-Präferenzen auflösen (App/Email/Quiet Hours) | resolve(), shouldSendApp(), shouldSendEmail(), isInQuietHours() |
Related Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
CrossPlatformRelatedCalculator | App\Services\Related | Cross-Platform Matching (YouTube ↔ Instagram) | findInstagramForYouTube(), findYouTubeForInstagram() |
Search Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ProfileSearchService | App\Services\Search | Profil-Suche mit Multi-Strategie-Ranking (Meilisearch / PostgreSQL FTS / SQLite Fallback) | search() |
Scoring Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ProfileScoreCalculator | App\Services\Scoring | Profil-Score 0-100, tier-normalisiert | calculate(), determineTier(), getDataPointsInfo() |
VideoScoreCalculator | App\Services\Scoring | Video-Performance-Score 0-100 | calculate(), hasShortDuration() |
Social Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
YouTubeProfileScraper | App\Services\Social\Scrapers | YouTube-Kanal via Data API scrapen | scrape() |
InstagramProfileScraper | App\Services\Social\Scrapers | Instagram-Profil via Collector scrapen | scrape() |
ScrapedProfile | App\Services\Social\Scrapers | Readonly DTO für gescrapte Profil-Daten | -- |
ScraperFactory | App\Services\Social | Scraper-Instanz für Plattform erstellen | scrape() |
ProfileDescriptionParser | App\Services\Social | Profil-Bio parsen (Links, Handles, Emails) | parseAndStore(), parse() |
SocialProfileLinkSyncer | App\Services\Social | parsed_links JSONB in social_profile_links Tabelle synchronisieren | sync() |
ProfileImageUpdater | App\Services\Social | Profil-Bilder herunterladen und speichern | storeProfileImage() |
VideoThumbnailUpdater | App\Services\Social | YouTube-Thumbnails herunterladen | storeVideoThumbnail() |
YouTubeUrlParser | App\Services\Social | YouTube-URL-Parsing (Channel/Video/Handle) | statische Methoden |
InstagramUrlParser | App\Services\Social | Instagram-URL-Parsing (Handle extrahieren) | statische Methoden |
YouTubeChannelPageParser | App\Services\Social\Parsers | YouTube-Kanal-HTML parsen | final class |
InstagramProfilePageParser | App\Services\Social\Parsers | Instagram-Profil-HTML parsen | final class |
CompactNumber | App\Services\Social\Support | Zahlen kompakt formatieren (1.2K, 3.4M) | final class |
EnsureSocialProfileFromUrl | App\Services\Social\Actions | Profil aus URL erstellen/finden (dedupliziert) | execute() |
YouTubeDataApiClient | App\Services\Social\YouTube | YouTube Data API v3 Client mit Key-Pool und Failover | get(), getChannelByHandle(), getVideosByIds() |
YouTubeChannelResolver | App\Services\Social\YouTube | YouTube-URL zu Channel-ID auflösen | resolve() |
Watchers Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
WatcherMover | App\Services\Watchers | Watcher zwischen Workspaces verschieben, Duplikate mergen | moveWatchers() |
Workspaces Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
AdminWorkspaceManager | App\Services\Workspaces | Admin-Workspace (ID 999999999999) verwalten und Profile spiegeln | ensureAdminWorkspace(), ensureProfileWatcher(), removeProfileFromAdminWorkspace() |
DefaultWorkspaceProvisioner | App\Services\Workspaces | Default-Workspace für neue User erstellen | ensureGeneralWorkspace() |
YouTube Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
ResearchQuotaService | App\Services\YouTube | YouTube Research Quota prüfen (Auto-Fill erlaubt?) | getStatus(), allowsAutoFill(), hasQuota() |
Root-Level Services
| Service | Namespace | Beschreibung | Wichtigste Methoden |
|---|---|---|---|
YouTubeUpdateStatusService | App\Services | YouTube Update-Status aggregieren | getStatus(), refresh(), getQueueableProfileIds() |
InstagramUpdateStatusService | App\Services | Instagram Scrape-Status aggregieren | getStatus(), refresh(), getStaleProfileIds() |
ServerAlertService | App\Services | Server-Metriken gegen Schwellwerte prüfen, Alerts dispatchen | check() |
MatomoTrackingService | App\Services | Server-seitiges Matomo Tracking (Page Views + Events) | trackPageView(), trackEvent(), isEnabled() |