Initial commit: Animexe Laravel platform

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 00:01:48 +03:00
co-authored by Claude Opus 4.8
commit a63515cfc6
366 changed files with 74773 additions and 0 deletions
@@ -0,0 +1,80 @@
<?php
namespace App\Http\Controllers\Frontend;
use App\Http\Controllers\Controller;
use App\Models\ActivationCode;
use App\Models\Subscription;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class ActivationController extends Controller
{
public function show()
{
return view('frontend.premium.activate');
}
public function redeem(Request $request)
{
$request->validate([
'code' => 'required|string|max:32',
], [
'code.required' => 'Aktivasyon kodu boş bırakılamaz.',
]);
$rawCode = strtoupper(preg_replace('/[^A-Z0-9\-]/', '', trim($request->code)));
$code = ActivationCode::with('plan')
->where('code', $rawCode)
->first();
if (! $code) {
return back()->withInput()->withErrors(['code' => 'Geçersiz aktivasyon kodu. Kodu kontrol edip tekrar deneyin.']);
}
if ($code->isUsed()) {
return back()->withInput()->withErrors(['code' => 'Bu aktivasyon kodu daha önce kullanılmış.']);
}
if ($code->isExpired()) {
return back()->withInput()->withErrors(['code' => 'Bu aktivasyon kodunun süresi dolmuş.']);
}
$user = auth()->user();
$plan = $code->plan;
// Mevcut premium bitiş tarihine ekle (stack), yoksa şimdiden başla
$baseDate = ($user->premium_expires_at && $user->premium_expires_at->isFuture())
? $user->premium_expires_at
: now();
$newExpiry = $baseDate->addDays($plan->duration_days);
DB::transaction(function () use ($code, $user, $plan, $newExpiry) {
$code->update([
'used_by' => $user->id,
'used_at' => now(),
]);
Subscription::create([
'user_id' => $user->id,
'plan_id' => $plan->id,
'status' => 'active',
'starts_at' => now(),
'expires_at' => $newExpiry,
'payment_method' => 'activation_code',
'payment_ref' => $code->code,
]);
$user->update([
'membership' => 'premium',
'premium_expires_at' => $newExpiry,
]);
});
return redirect()->route('premium.plans')->with('activation_success', [
'plan' => $plan->name,
'expires_at' => $newExpiry->format('d.m.Y'),
]);
}
}