pixelfed/pixelfed

View on GitHub
app/Jobs/AutospamPipeline/AutospamUpdateCachedDataPipeline.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php

namespace App\Jobs\AutospamPipeline;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Models\AutospamCustomTokens;
use Illuminate\Support\Facades\Storage;
use App\Services\AutospamService;
use Cache;

class AutospamUpdateCachedDataPipeline implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     */
    public function __construct()
    {
    }

    /**
     * Execute the job.
     */
    public function handle(): void
    {
        $spamExists = Storage::exists(AutospamService::MODEL_SPAM_PATH);
        if($spamExists) {
            $spam = json_decode(Storage::get(AutospamService::MODEL_SPAM_PATH), true);
        } else {
            $spam = [
                'documents' => [
                    'spam' => 0
                ],
                'words' => [
                    'spam' => []
                ]
            ];
        }
        $newSpam = AutospamCustomTokens::whereCategory('spam')->get();
        foreach($newSpam as $ns) {
            $key = strtolower($ns->token);
            if(isset($spam['words']['spam'][$key])) {
                $spam['words']['spam'][$key] = $spam['words']['spam'][$key] + $ns->weight;
            } else {
                $spam['words']['spam'][$key] = $ns->weight;
            }
        }
        $newSpamCount = count($spam['words']['spam']);
        if($newSpamCount) {
            $spam['documents']['spam'] = $newSpamCount;
            arsort($spam['words']['spam']);
            Storage::put(AutospamService::MODEL_SPAM_PATH, json_encode($spam, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
        }

        $hamExists = Storage::exists(AutospamService::MODEL_HAM_PATH);
        if($hamExists) {
            $ham = json_decode(Storage::get(AutospamService::MODEL_HAM_PATH), true);
        } else {
            $ham = [
                'documents' => [
                    'ham' => 0
                ],
                'words' => [
                    'ham' => []
                ]
            ];
        }
        $newHam = AutospamCustomTokens::whereCategory('ham')->get();
        foreach($newHam as $ns) {
            $key = strtolower($ns->token);
            if(isset($spam['words']['ham'][$key])) {
                $ham['words']['ham'][$key] = $ham['words']['ham'][$key] + $ns->weight;
            } else {
                $ham['words']['ham'][$key] = $ns->weight;
            }
        }

        $newHamCount = count($ham['words']['ham']);
        if($newHamCount) {
            $ham['documents']['ham'] = $newHamCount;
            arsort($ham['words']['ham']);
            Storage::put(AutospamService::MODEL_HAM_PATH, json_encode($ham, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
        }

        if($newSpamCount && $newHamCount) {
            $combined = [
                'documents' => [
                    'spam' => $newSpamCount,
                    'ham' => $newHamCount,
                ],
                'words' => [
                    'spam' => $spam['words']['spam'],
                    'ham' => $ham['words']['ham']
                ]
            ];

            Storage::put(AutospamService::MODEL_FILE_PATH, json_encode($combined, JSON_PRETTY_PRINT,JSON_UNESCAPED_SLASHES));
        }

        Cache::forget(AutospamService::MODEL_CACHE_KEY);
        Cache::forget(AutospamService::CHCKD_CACHE_KEY);
    }
}