From e8e3def103e72b6ba60f9d264160078d2f0d1cc8 Mon Sep 17 00:00:00 2001 From: ct Date: Fri, 20 Jun 2025 23:40:27 +0800 Subject: [PATCH] Update --- .../Maintenance/MemeMediaMaintenance.php | 23 ++++++++++++++- app/Helpers/FirstParty/Meme/MemeGenerator.php | 10 +++---- app/Http/Controllers/FrontMediaController.php | 4 +-- app/Models/Category.php | 2 ++ app/Models/Meme.php | 16 +++++------ .../2025_06_19_051802_create_memes_table.php | 4 +-- ...es_generated_count_to_categories_table.php | 28 +++++++++++++++++++ 7 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 database/migrations/2025_06_20_125739_add_system_memes_generated_count_to_categories_table.php diff --git a/app/Helpers/FirstParty/Maintenance/MemeMediaMaintenance.php b/app/Helpers/FirstParty/Maintenance/MemeMediaMaintenance.php index 2a610f1..23f0d80 100644 --- a/app/Helpers/FirstParty/Maintenance/MemeMediaMaintenance.php +++ b/app/Helpers/FirstParty/Maintenance/MemeMediaMaintenance.php @@ -3,18 +3,39 @@ namespace App\Helpers\FirstParty\Maintenance; use App\Helpers\FirstParty\AI\OpenAI; +use App\Helpers\FirstParty\Meme\MemeGenerator; +use App\Models\Category; use App\Models\MemeMedia; use ProtoneMedia\LaravelFFMpeg\Support\FFMpeg; class MemeMediaMaintenance { + public static function generateMemesByCategories() + { + Category::where('system_memes_generated_count', '<', 1) + ->chunk(10, function ($categories) { + foreach ($categories as $category) { + dump('Processing ' . $category->name); + + $meme = MemeGenerator::generateMemeByCategory($category); + + if (!is_null($meme)) { + $category->system_memes_generated_count++; + $category->save(); + } + } + }); + } + + + public static function patchMemeKeywords() { $meme_medias = MemeMedia::whereNull('action_keywords')->get(); foreach ($meme_medias as $key => $meme_media) { - dump('Processing '.$key + 1 .'/'.$meme_medias->count().': '.$meme_media->name); + dump('Processing ' . $key + 1 . '/' . $meme_medias->count() . ': ' . $meme_media->name); $meme_keywords_response = OpenAI::getMemeKeywords($meme_media->name, $meme_media->description); diff --git a/app/Helpers/FirstParty/Meme/MemeGenerator.php b/app/Helpers/FirstParty/Meme/MemeGenerator.php index 63fd1f0..18e330b 100644 --- a/app/Helpers/FirstParty/Meme/MemeGenerator.php +++ b/app/Helpers/FirstParty/Meme/MemeGenerator.php @@ -92,13 +92,13 @@ public static function generateMemeByCategory(Category $category) } if (! is_null($meme) && $meme->status == self::STATUS_PENDING) { - // populate meme_id - $meme->meme_id = self::getSuitableMemeMedia($meme)->id; - $meme->background_id = self::generateBackgroundMediaWithRunware($meme_output->background)->id; + // populate meme_media_id + $meme->meme_media_id = self::getSuitableMemeMedia($meme)->id; + $meme->background_media_id = self::generateBackgroundMediaWithRunware($meme_output->background)->id; if ( - //!is_null($meme->meme_id) && - ! is_null($meme->background_id) + //!is_null($meme->meme_media_id) && + ! is_null($meme->background_media_id) ) { $meme->status = self::STATUS_COMPLETED; } diff --git a/app/Http/Controllers/FrontMediaController.php b/app/Http/Controllers/FrontMediaController.php index 115f563..5f07797 100644 --- a/app/Http/Controllers/FrontMediaController.php +++ b/app/Http/Controllers/FrontMediaController.php @@ -12,9 +12,9 @@ class FrontMediaController extends Controller { public function init(Request $request) { - $meme = Meme::with('meme_media', 'background_media')->where('status', MemeGenerator::STATUS_COMPLETED)->take(1)->latest()->first(); + $meme = Meme::with('meme_media', 'background_media')->where('status', MemeGenerator::STATUS_COMPLETED)->inRandomOrder()->first(); - $meme_media = MemeGenerator::getSuitableMemeMedia($meme); + $meme_media = MemeGenerator::getSuitableMemeMedia($meme, 2); return response()->json([ 'success' => [ diff --git a/app/Models/Category.php b/app/Models/Category.php index 1ea318b..bbc079b 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -47,6 +47,7 @@ class Category extends Model 'sample_captions' => 'array', 'keywords' => 'array', 'payload' => 'object', + 'system_memes_generated_count' => 'int', ]; protected $fillable = [ @@ -61,6 +62,7 @@ class Category extends Model 'sample_captions', 'keywords', 'payload', + 'system_memes_generated_count', ]; /** diff --git a/app/Models/Meme.php b/app/Models/Meme.php index 5569508..c2cb094 100644 --- a/app/Models/Meme.php +++ b/app/Models/Meme.php @@ -18,8 +18,8 @@ * @property string $type * @property int|null $category_id * @property int|null $user_id - * @property int|null $meme_id - * @property int|null $background_id + * @property int|null $meme_media_id + * @property int|null $background_media_id * @property string $status * @property string $prompt * @property string|null $caption @@ -42,8 +42,8 @@ class Meme extends Model 'category_id' => 'int', 'user_id' => 'int', - 'meme_id' => 'int', - 'background_id' => 'int', + 'meme_media_id' => 'int', + 'background_media_id' => 'int', 'meme_keywords' => 'array', 'keywords' => 'array', @@ -58,8 +58,8 @@ class Meme extends Model 'is_system', 'category_id', 'user_id', - 'meme_id', - 'background_id', + 'meme_media_id', + 'background_media_id', 'status', 'prompt', 'caption', @@ -74,11 +74,11 @@ class Meme extends Model public function meme_media() { - return $this->hasOne(MemeMedia::class, 'id', 'meme_id'); + return $this->hasOne(MemeMedia::class, 'id', 'meme_media_id'); } public function background_media() { - return $this->hasOne(BackgroundMedia::class, 'id', 'background_id'); + return $this->hasOne(BackgroundMedia::class, 'id', 'background_media_id'); } } diff --git a/database/migrations/2025_06_19_051802_create_memes_table.php b/database/migrations/2025_06_19_051802_create_memes_table.php index 59b55fb..c6585ab 100644 --- a/database/migrations/2025_06_19_051802_create_memes_table.php +++ b/database/migrations/2025_06_19_051802_create_memes_table.php @@ -34,8 +34,8 @@ public function up(): void $table->foreignId('category_id')->nullable(); $table->foreignId('user_id')->nullable(); - $table->foreignId('meme_id')->nullable(); - $table->foreignId('background_id')->nullable(); + $table->foreignId('meme_media_id')->nullable(); + $table->foreignId('background_media_id')->nullable(); $table->enum('status', ['pending', 'completed'])->default('pending'); $table->text('prompt'); diff --git a/database/migrations/2025_06_20_125739_add_system_memes_generated_count_to_categories_table.php b/database/migrations/2025_06_20_125739_add_system_memes_generated_count_to_categories_table.php new file mode 100644 index 0000000..80641a1 --- /dev/null +++ b/database/migrations/2025_06_20_125739_add_system_memes_generated_count_to_categories_table.php @@ -0,0 +1,28 @@ +integer('system_memes_generated_count')->default(0); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('categories', function (Blueprint $table) { + $table->dropColumn('system_memes_generated_count'); + }); + } +};