This commit is contained in:
ct
2025-07-04 03:10:37 +08:00
parent 239b74fd5a
commit 21b56b6cf0
6 changed files with 411 additions and 141 deletions

View File

@@ -2,12 +2,74 @@
namespace App\Http\Controllers;
use App\Helpers\FirstParty\Credits\CreditsService;
use App\Helpers\FirstParty\Meme\MemeGenerator;
use Illuminate\Http\Request;
use App\Models\Category;
use Auth;
class UserAIController extends Controller
{
public function generateMeme(Request $request)
{
$user = Auth::user();
if (!CreditsService::canSpend($user->id, 2)) {
return response()->json([
'error' => [
'message' => 'You do not have enough credits to generate a meme. Please purchase credits from the Store.',
],
]);
}
CreditsService::spend($user->id, 2);
$meme = MemeGenerator::generateMemeByKeyword($request->prompt);
$meme_media = MemeGenerator::getSuitableMemeMedia($meme, 2);
return response()->json([
'success' => [
'data' => [
'generate' => [
'info' => $meme,
'caption' => $meme->caption,
'meme' => $meme_media,
'background' => $meme->background_media,
],
],
],
]);
}
public function aiHints()
{
// TODO: Take 5 Category where meme_angles is not null, and return a random one from the array
$categories = Category::whereNotNull('keywords')
->inRandomOrder()
->take(8)
->get();
if ($categories->isEmpty()) {
return response()->json([
'success' => [
'data' => [
'keywords' => []
]
]
]);
}
$keywords = $categories->map(function ($category) {
return collect($category->keywords)->random();
})->toArray();
return response()->json([
'success' => [
'data' => [
'keywords' => $keywords
]
]
]);
}
}