This commit is contained in:
greggy
2025-10-07 09:14:37 +02:00
parent fd1d053d65
commit db1df97734
3 changed files with 87 additions and 33 deletions

View File

@@ -27,6 +27,7 @@ final class Version20251006214042 extends AbstractMigration
interfacepasswort VARCHAR(255) NOT NULL,
interface_anfragen_pro_tag SMALLINT UNSIGNED NOT NULL,
user_id VARCHAR(50) NOT NULL,
referal_url VARCHAR(255) DEFAULT NULL,
date_updated DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) DEFAULT CHARACTER SET utf8mb4');
@@ -89,7 +90,7 @@ final class Version20251006214042 extends AbstractMigration
$this->addSql('ALTER TABLE users ADD CONSTRAINT FK_1483A5E948B23AFC FOREIGN KEY (werbenetzwerk_id) REFERENCES werbenetzwerk (id) ON DELETE SET NULL');
// Default data - Werbenetzwerk
$this->addSql('INSERT INTO werbenetzwerk (id, umrechnungskurs, eigenanteil_prozent, interfacepasswort, interface_anfragen_pro_tag, user_id, date_updated) VALUES (1, 0.0000000022, 25, "pAKc34EajovTvsnD6Y6WfhS", 500, "1244", NOW())');
$this->addSql('INSERT INTO werbenetzwerk (id, umrechnungskurs, eigenanteil_prozent, interfacepasswort, interface_anfragen_pro_tag, user_id, referal_url, date_updated) VALUES (1, 0.0000000022, 25, "pAKc34EajovTvsnD6Y6WfhS", 500, "1244", "https://www.adcity.eu?ref=1244", NOW())');
// Default data - Users
$this->addSql('INSERT INTO users (username, email, password, rolle, createdAt) VALUES ("admin", "admin@example.com", "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi", "admin", NOW())');

View File

@@ -45,9 +45,40 @@ class AdCityForcedTextlinkCron extends AbstractCron
// Umrechnungskurs aktualisieren
$this->updateUmrechnungskurs();
// ForcedTextlink Kampagnen abrufen
$this->log("=== Fetching ForcedTextlink campaigns ===");
$statsForcedTextlink = $this->fetchAndProcessKampagnen('forcedtextlink', 'is_ft');
// Paidmail Kampagnen abrufen
$this->log("\n=== Fetching Paidmail campaigns ===");
$statsPaidmail = $this->fetchAndProcessKampagnen('paidmail', 'is_mail');
// Traffic Kampagnen abrufen
$this->log("\n=== Fetching Traffic campaigns ===");
$statsTraffic = $this->fetchAndProcessKampagnen('traffic', 'is_tr');
// Änderungen speichern
$this->flush();
// Zusammenfassung ausgeben
$this->log("\n=== Overall Summary ===");
$totalStats = [
'total' => $statsForcedTextlink['total'] + $statsPaidmail['total'] + $statsTraffic['total'],
'created' => $statsForcedTextlink['created'] + $statsPaidmail['created'] + $statsTraffic['created'],
'updated' => $statsForcedTextlink['updated'] + $statsPaidmail['updated'] + $statsTraffic['updated']
];
$this->printSummary($totalStats['total'], $totalStats['created'], $totalStats['updated']);
$this->log("Cron job completed successfully.");
}
/**
* Ruft Kampagnen von der API ab und verarbeitet sie
*/
private function fetchAndProcessKampagnen(string $type, string $kampagneType): array
{
// API-Anfrage durchführen
$response = $this->fetchFromApi(self::API_URL, [
'typ' => self::KAMPAGNE_TYPE,
'typ' => $type,
'id' => $this->werbenetzwerk->getUserId(),
'pw' => $this->werbenetzwerk->getInterfacepasswort(),
'uebrig' => 20,
@@ -60,20 +91,13 @@ class AdCityForcedTextlinkCron extends AbstractCron
$this->log($response);
// Response parsen und verarbeiten
$stats = $this->processResponse($response);
// Änderungen speichern
$this->flush();
// Zusammenfassung ausgeben
$this->printSummary($stats['total'], $stats['created'], $stats['updated']);
$this->log("Cron job completed successfully.");
return $this->processResponse($response, $kampagneType);
}
/**
* Verarbeitet die API-Response
*/
private function processResponse(string $response): array
private function processResponse(string $response, string $kampagneType): array
{
$parts = explode('|', trim($response));
@@ -120,7 +144,7 @@ class AdCityForcedTextlinkCron extends AbstractCron
$verguetungEuro = $verdienst * $this->werbenetzwerk->getUmrechnungskurs();
// Kampagne verarbeiten
if ($this->processKampagne($kid, $linktext, $ma, $reload, $uebrig, $verdienst, $verguetungEuro, $mailtext)) {
if ($this->processKampagne($kid, $linktext, $ma, $reload, $uebrig, $verdienst, $verguetungEuro, $mailtext, $kampagneType)) {
$updatedCount++;
} else {
$createdCount++;
@@ -147,20 +171,15 @@ class AdCityForcedTextlinkCron extends AbstractCron
int $uebrig,
float $verdienst,
float $verguetungEuro,
?string $mailtext
?string $mailtext,
string $kampagneType
): bool {
// Vergütung höher als 0.1 Euro filtern
if ($verguetungEuro > 0.1) {
$this->log("Skipping: $linktext (KID: $kid, Vergütung zu hoch: $verguetungEuro €)");
// Wenn Kampagne existiert, löschen
$existingKampagne = $this->entityManager
->getRepository(Kampagne::class)
->findOneBy([
'user' => $this->werbenetzwerkUser,
'kid' => $kid,
'is_ft' => true
]);
$existingKampagne = $this->findExistingKampagneByType($kid, $kampagneType);
if ($existingKampagne) {
$this->entityManager->remove($existingKampagne);
$this->log(" → Deleted existing campaign with high vergütung");
@@ -170,18 +189,17 @@ class AdCityForcedTextlinkCron extends AbstractCron
}
// Link-URL generieren
$destUrl = "https://www.adcity.eu/codes/forcedtextlinkklick.php?id={USERID}&bid=$kid&aid={SEITENID}";
$destUrl = match($kampagneType) {
'is_ft' => "https://www.adcity.eu/codes/forcedtextlinkklick.php?id={USERID}&bid=$kid&aid={SEITENID}",
'is_mail' => "https://www.adcity.eu/codes/paidmailklick.php?id={USERID}&bid=$kid&aid={SEITENID}",
'is_tr' => "https://www.adcity.eu/codes/trafficklick.php?id={USERID}&bid=$kid&aid={SEITENID}",
default => "https://www.adcity.eu/codes/kampagne.php?id={USERID}&bid=$kid&aid={SEITENID}"
};
$this->log("Processing: $linktext (KID: $kid, MA: $ma, Reload: $reload, Uebrig: $uebrig)");
// Prüfen ob Kampagne bereits existiert (is_ft = true)
$existingKampagne = $this->entityManager
->getRepository(Kampagne::class)
->findOneBy([
'user' => $this->werbenetzwerkUser,
'kid' => $kid,
'is_ft' => true
]);
// Prüfen ob Kampagne bereits existiert
$existingKampagne = $this->findExistingKampagneByType($kid, $kampagneType);
if ($existingKampagne) {
// Kampagne aktualisieren
@@ -209,13 +227,18 @@ class AdCityForcedTextlinkCron extends AbstractCron
$kampagne->setVerguetung($verguetungEuro);
$kampagne->setUebrig($uebrig);
$kampagne->setIsFb(false);
$kampagne->setIsTr(false);
$kampagne->setIsFt(true);
$kampagne->setIsMail(false);
if ($mailtext) {
$kampagne->setIsTr($kampagneType === 'is_tr');
$kampagne->setIsFt($kampagneType === 'is_ft');
$kampagne->setIsMail($kampagneType === 'is_mail');
if ($mailtext && $kampagneType === 'is_mail') {
$kampagne->setMailtext($mailtext);
} elseif ($mailtext && $kampagneType === 'is_ft') {
// ForcedTextlink kann auch Mailtext haben
$kampagne->setMailtext($mailtext);
$kampagne->setIsMail(true);
}
$kampagne->setUser($this->werbenetzwerkUser);
$this->entityManager->persist($kampagne);
@@ -224,6 +247,22 @@ class AdCityForcedTextlinkCron extends AbstractCron
}
}
/**
* Findet eine existierende Kampagne basierend auf Typ
*/
private function findExistingKampagneByType(string $kid, string $kampagneType): ?Kampagne
{
$criteria = [
'user' => $this->werbenetzwerkUser,
'kid' => $kid,
$kampagneType => true
];
return $this->entityManager
->getRepository(Kampagne::class)
->findOneBy($criteria);
}
/**
* Aktualisiert den Umrechnungskurs in der Datenbank
*/

View File

@@ -29,6 +29,9 @@ class Werbenetzwerk
#[ORM\Column(type: 'string', length: 50)]
private string $user_id;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $referal_url = null;
#[ORM\Column(type: 'datetime', nullable: true)]
private ?\DateTimeInterface $date_updated = null;
@@ -104,4 +107,15 @@ class Werbenetzwerk
$this->user_id = $user_id;
return $this;
}
public function getReferalUrl(): ?string
{
return $this->referal_url;
}
public function setReferalUrl(?string $referal_url): self
{
$this->referal_url = $referal_url;
return $this;
}
}