This commit is contained in:
ct
2025-07-16 15:49:30 +08:00
parent d4c5fb5589
commit 6c8a69173e
24 changed files with 594 additions and 64 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\ExportToken;
use App\Services\TrackingAnalyticsService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
@@ -11,6 +12,17 @@ class UserExportController extends Controller
{
public function premiumExportRequest(Request $request)
{
$request->validate([
'meme_media_ids' => 'nullable|string', // Accept hashid string
'background_media_ids' => 'nullable|string', // Accept hashid string
'caption_texts' => 'required|array',
'caption_texts.*' => 'string',
]);
// Convert hashids to actual database IDs
$memeMediaId = $request->meme_media_ids ? hashids_decode($request->meme_media_ids) : null;
$backgroundMediaId = $request->background_media_ids ? hashids_decode($request->background_media_ids) : null;
$user = Auth::user();
$user->load('user_usage');
@@ -33,9 +45,22 @@ public function premiumExportRequest(Request $request)
'token' => Str::uuid()->toString(),
'is_premium' => true,
'credits_reserved' => 1,
'metadata' => [
'meme_media_id' => $memeMediaId,
'background_media_id' => $backgroundMediaId,
'caption_texts' => $request->caption_texts,
],
'expires_at' => now()->addMinutes(30),
]);
// Track the export
try {
$trackingService = app(TrackingAnalyticsService::class);
$trackingService->trackExport(null, $memeMediaId, $backgroundMediaId, $request->caption_texts);
} catch (\Exception $e) {
// Silently ignore tracking errors
}
$user->user_usage->refresh();
return response()->json([
@@ -92,6 +117,17 @@ public function premiumExportComplete(Request $request)
public function basicExportRequest(Request $request)
{
$request->validate([
'meme_media_ids' => 'nullable|string', // Accept hashid string
'background_media_ids' => 'nullable|string', // Accept hashid string
'caption_texts' => 'required|array',
'caption_texts.*' => 'string',
]);
// Convert hashids to actual database IDs
$memeMediaId = $request->meme_media_ids ? hashids_decode($request->meme_media_ids) : null;
$backgroundMediaId = $request->background_media_ids ? hashids_decode($request->background_media_ids) : null;
// No authentication required for basic exports
// Create export token (expires in 30 minutes)
$token = ExportToken::create([
@@ -100,8 +136,21 @@ public function basicExportRequest(Request $request)
'is_premium' => false,
'credits_reserved' => 0, // No credits for basic exports
'expires_at' => now()->addMinutes(30),
'metadata' => [
'meme_media_id' => $memeMediaId,
'background_media_id' => $backgroundMediaId,
'caption_texts' => $request->caption_texts,
],
]);
// Track the export
try {
$trackingService = app(TrackingAnalyticsService::class);
$trackingService->trackExport(null, $memeMediaId, $backgroundMediaId, $request->caption_texts);
} catch (\Exception $e) {
// Silently ignore tracking errors
}
return response()->json([
'success' => [
'data' => [