MIF_E31231430/app/Http/Controllers/ProfileController.php

113 lines
3.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\View\View;
class ProfileController extends Controller
{
public function index(Request $request): View
{
$user = $request->user();
$penyewaans = $user->penyewaans()
->with(['kamera', 'lensa'])
->latest()
->get();
$adminNotifications = $user->penyewaans()
->with(['kamera', 'lensa'])
->whereNotNull('admin_catatan')
->latest('updated_at')
->get();
$unreadAdminNotificationIds = $adminNotifications
->whereNull('admin_catatan_read_at')
->pluck('id')
->all();
$loginHistories = $user->loginHistories()
->latest('login_at')
->take(20)
->get();
$paidTransactions = $penyewaans
->filter(fn ($penyewaan) => filled($penyewaan->bukti_pembayaran_path))
->count();
$nextMemberLevels = [
'tanpa_member' => 'bronze',
'bronze' => 'silver',
'silver' => 'gold',
'gold' => null,
];
$upgradeTargets = [
'tanpa_member' => 10,
'bronze' => 20,
'silver' => 30,
'gold' => null,
];
$progressStarts = [
'tanpa_member' => 0,
'bronze' => 10,
'silver' => 20,
'gold' => 30,
];
$nextMemberLevel = $nextMemberLevels[$user->member_level] ?? null;
$nextUpgradeTarget = $upgradeTargets[$user->member_level] ?? null;
$progressStart = $progressStarts[$user->member_level] ?? 0;
$remainingTransactions = $nextUpgradeTarget === null
? 0
: max($nextUpgradeTarget - $paidTransactions, 0);
$upgradeProgressPercent = $nextUpgradeTarget === null
? 100
: (int) round(
min(
max($paidTransactions - $progressStart, 0) / max($nextUpgradeTarget - $progressStart, 1),
1
) * 100
);
if ($unreadAdminNotificationIds !== []) {
$user->penyewaans()
->whereIn('id', $unreadAdminNotificationIds)
->update(['admin_catatan_read_at' => now()]);
}
return view('profile', [
'user' => $user,
'penyewaans' => $penyewaans,
'adminNotifications' => $adminNotifications,
'unreadAdminNotificationCount' => count($unreadAdminNotificationIds),
'loginHistories' => $loginHistories,
'totalPenyewaan' => $penyewaans->count(),
'totalLogin' => $user->loginHistories()->count(),
'penyewaanAktif' => $penyewaans->whereIn('status', ['menunggu', 'disetujui'])->count(),
'paidTransactions' => $paidTransactions,
'nextMemberLevel' => $nextMemberLevel,
'nextUpgradeTarget' => $nextUpgradeTarget,
'remainingTransactions' => $remainingTransactions,
'progressStart' => $progressStart,
'upgradeProgressPercent' => $upgradeProgressPercent,
]);
}
public function update(Request $request): RedirectResponse
{
$user = $request->user();
$validated = $request->validate([
'name' => ['required', 'string', 'max:100'],
'username' => [
'required',
'string',
'max:50',
Rule::unique('users', 'username')->ignore($user->id),
],
]);
$user->update($validated);
return redirect()
->route('profile')
->with('status', 'Profil berhasil diperbarui.');
}
}