fix(membership): kasih kondisi ketika user tidak punya data member tapi tetap bisa login

This commit is contained in:
Yoga Pangestu 2025-11-13 08:51:14 +07:00
parent bf7c7e12f6
commit 90a64ba46c
2 changed files with 107 additions and 87 deletions

View File

@ -15,6 +15,8 @@
#[Layout('components.layouts.member')] #[Layout('components.layouts.member')]
class Membership extends Component class Membership extends Component
{ {
public ?MembershipModel $membership = null;
public array $stats = []; public array $stats = [];
public string $nextTierName = ''; public string $nextTierName = '';
@ -31,7 +33,11 @@ class Membership extends Component
public function mount() public function mount()
{ {
$membership = MembershipModel::with(['tier', 'tier.rewards'])->where('user_id', auth()->id())->first(); $this->membership = MembershipModel::with(['tier', 'tier.rewards'])->where('user_id', auth()->id())->first();
if (! $this->membership) {
return;
}
$monthlyTierAddition = PointRecord::where('user_id', auth()->id()) $monthlyTierAddition = PointRecord::where('user_id', auth()->id())
->where('type', PointRecordType::TIER) ->where('type', PointRecordType::TIER)
@ -40,42 +46,42 @@ public function mount()
->whereMonth('created_at', now()->month) ->whereMonth('created_at', now()->month)
->sum('change'); ->sum('change');
$nextTier = Tier::where('min_points', '>', $membership->tier_points) $nextTier = Tier::where('min_points', '>', $this->membership->tier_points)
->orderBy('min_points', 'asc') ->orderBy('min_points', 'asc')
->first(); ->first();
$this->nextTierName = $nextTier ? $nextTier->name : 'Maksimal'; $this->nextTierName = $nextTier ? $nextTier->name : 'Maksimal';
$this->currentPoints = $membership->tier_points; $this->currentPoints = $this->membership->tier_points;
$this->nextTierPoints = $nextTier ? $nextTier->min_points : 'Maksimal'; $this->nextTierPoints = $nextTier ? $nextTier->min_points : 'Maksimal';
$this->progress = ($membership->tier_points / $nextTier->min_points) * 100; $this->progress = ($this->membership->tier_points / $nextTier->min_points) * 100;
$this->stats = [ $this->stats = [
[ [
'title' => 'Poin Tier', 'title' => 'Poin Tier',
'value' => currency($membership->tier_points), 'value' => currency($this->membership->tier_points),
'description' => '+'.currency($monthlyTierAddition).' bulan ini', 'description' => '+'.currency($monthlyTierAddition).' bulan ini',
], ],
[ [
'title' => 'Tier Sekarang', 'title' => 'Tier Sekarang',
'value' => $membership->tier->name, 'value' => $this->membership->tier->name,
'description' => 'Terdaftar sejak '.formatDate($membership->created_at), 'description' => 'Terdaftar sejak '.formatDate($this->membership->created_at),
], ],
[ [
'title' => 'Tier Selanjutnya', 'title' => 'Tier Selanjutnya',
'value' => $nextTier ? $nextTier->name : 'Maksimal', 'value' => $nextTier ? $nextTier->name : 'Maksimal',
'description' => $nextTier ? ($nextTier->min_points - $membership->tier_points).' poin lagi' : 'Anda sudah berada di tier tertinggi', 'description' => $nextTier ? ($nextTier->min_points - $this->membership->tier_points).' poin lagi' : 'Anda sudah berada di tier tertinggi',
], ],
[ [
'title' => 'Poin Hadiah', 'title' => 'Poin Hadiah',
'value' => currency($membership->reward_points), 'value' => currency($this->membership->reward_points),
'description' => 'Nikmati hadiah sekarang', 'description' => 'Nikmati hadiah sekarang',
], ],
]; ];
$this->rewards = TierReward::where('tier_id', $membership->tier_id) $this->rewards = TierReward::where('tier_id', $this->membership->tier_id)
->latest() ->latest()
->get() ->get()
->map(fn ($reward) => [ ->map(fn ($reward) => [

View File

@ -2,6 +2,7 @@
<flux:heading size="xl" level="1">{{ $pageTitle }}</flux:heading> <flux:heading size="xl" level="1">{{ $pageTitle }}</flux:heading>
<div class="mt-6"> <div class="mt-6">
@if ($membership)
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8"> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
@foreach ($stats as $stat) @foreach ($stats as $stat)
<div class="rounded-lg px-6 py-4 bg-zinc-200 dark:bg-zinc-700"> <div class="rounded-lg px-6 py-4 bg-zinc-200 dark:bg-zinc-700">
@ -87,5 +88,18 @@ class="{{ $pointRecords['is_addition'] ? 'text-emerald-500' : 'text-red-500' }}"
</flux:card> </flux:card>
</div> </div>
</div> </div>
@else
<div class="flex justify-center flex-col">
<dotlottie-wc src="https://lottie.host/4282c234-6d0f-4a8d-ad04-3d82f2783814/FuhTCVgPGi.lottie" autoplay
loop style="width: 200px; height: 200px; margin: 0 auto;">
</dotlottie-wc>
<flux:text class="block text-center italic mt-5">
Apa? Anda belum menjadi member, ayo sini <flux:link href="#">daftar.</flux:link>
</flux:text>
</div>
@endif
</div> </div>
</flux:main> </flux:main>
@assets
<script src="https://unpkg.com/@lottiefiles/dotlottie-wc@0.8.5/dist/dotlottie-wc.js" type="module"></script>
@endassets