This commit is contained in:
antv
2026-07-17 13:57:02 +07:00
parent 91a598a5f9
commit 7af5de6048
5 changed files with 66 additions and 49 deletions
@@ -22,4 +22,12 @@ interface UserServiceInterface
public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void; public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void;
public function getSentCardsToUserThisMonth(User $sender, string $receiverMsnv): int; public function getSentCardsToUserThisMonth(User $sender, string $receiverMsnv): int;
public function getReceivedPageData(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array;
public function getSentPageData(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array;
public function getReceivedFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array;
public function getSentFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array;
} }
+50 -36
View File
@@ -232,73 +232,87 @@ class UserService implements UserServiceInterface
} }
// Retrieve paginated list of received ThankCards for a user // Retrieve paginated list of received ThankCards for a user
public function getReceivedPageData(User $user, string $selectedMonth): array public function getReceivedPageData(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array
{ {
$start = Carbon::parse($selectedMonth)->startOfMonth(); $start = Carbon::parse($selectedMonth)->startOfMonth();
$end = Carbon::parse($selectedMonth)->endOfMonth(); $end = Carbon::parse($selectedMonth)->endOfMonth();
$statsQuery = Administration::where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('received', '>', 0);
$totalCards = (int) $statsQuery->sum('received');
$totalSenders = (int) $statsQuery->whereNotNull('sender')->distinct('sender')->count('sender');
$cards = Administration::with('senderUser') $cards = Administration::with('senderUser')
->where('msnv', $user->msnv) ->where('msnv', $user->msnv)
->whereBetween('date', [$start, $end]) ->whereBetween('date', [$start, $end])
->where('received', '>', 0) ->where('received', '>', 0)
->orderBy('date', 'desc') ->orderBy('date', 'desc')
->skip($offset)
->take($limit)
->get(); ->get();
return ['cards' => $cards];
$hasMore = Administration::where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('received', '>', 0)
->skip($offset + $limit)
->exists();
return [
'cards' => $cards,
'hasMore' => $hasMore,
'totalCards' => $totalCards,
'totalSenders' => $totalSenders
];
} }
// Retrieve paginated list of sent ThankCards for a user // Retrieve paginated list of sent ThankCards for a user
public function getSentPageData(User $user, string $selectedMonth): array public function getSentPageData(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array
{ {
$start = Carbon::parse($selectedMonth)->startOfMonth(); $start = Carbon::parse($selectedMonth)->startOfMonth();
$end = Carbon::parse($selectedMonth)->endOfMonth(); $end = Carbon::parse($selectedMonth)->endOfMonth();
$statsQuery = Administration::where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('sent', '>', 0);
$totalCards = (int) $statsQuery->sum('sent');
$totalReceivers = (int) $statsQuery->whereNotNull('receiver')->distinct('receiver')->count('receiver');
$cards = Administration::with('receiverUser') $cards = Administration::with('receiverUser')
->where('msnv', $user->msnv) ->where('msnv', $user->msnv)
->whereBetween('date', [$start, $end]) ->whereBetween('date', [$start, $end])
->where('sent', '>', 0) ->where('sent', '>', 0)
->orderBy('date', 'desc') ->orderBy('date', 'desc')
->skip($offset)
->take($limit)
->get(); ->get();
return ['cards' => $cards];
$hasMore = Administration::where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('sent', '>', 0)
->skip($offset + $limit)
->exists();
return [
'cards' => $cards,
'hasMore' => $hasMore,
'totalCards' => $totalCards,
'totalReceivers' => $totalReceivers
];
} }
// Retrieve limited feed of received ThankCards for activity feed // Retrieve limited feed of received ThankCards for activity feed
public function getReceivedFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array public function getReceivedFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array
{ {
$start = Carbon::parse($selectedMonth)->startOfMonth(); return $this->getReceivedPageData($user, $selectedMonth, $limit, $offset);
$end = Carbon::parse($selectedMonth)->endOfMonth();
$cards = Administration::with('senderUser')
->where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('received', '>', 0)
->orderBy('date', 'desc')
->skip($offset)
->take($limit)
->get();
$hasMore = Administration::where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('received', '>', 0)
->skip($offset + $limit)
->exists();
return ['cards' => $cards, 'hasMore' => $hasMore];
} }
// Retrieve limited feed of sent ThankCards for activity feed // Retrieve limited feed of sent ThankCards for activity feed
public function getSentFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array public function getSentFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array
{ {
$start = Carbon::parse($selectedMonth)->startOfMonth(); return $this->getSentPageData($user, $selectedMonth, $limit, $offset);
$end = Carbon::parse($selectedMonth)->endOfMonth();
$cards = Administration::with('receiverUser')
->where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('sent', '>', 0)
->orderBy('date', 'desc')
->skip($offset)
->take($limit)
->get();
$hasMore = Administration::where('msnv', $user->msnv)
->whereBetween('date', [$start, $end])
->where('sent', '>', 0)
->skip($offset + $limit)
->exists();
return ['cards' => $cards, 'hasMore' => $hasMore];
} }
public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void
+1 -6
View File
@@ -4,12 +4,7 @@
@section('content') @section('content')
<div class="max-w-2xl mx-auto w-full mt-6"> <div class="max-w-2xl mx-auto w-full mt-6">
@if(session('success'))
<div class="mb-4 p-4 bg-green-50 border border-green-200 text-green-800 rounded-2xl font-semibold flex items-center gap-2 shadow-sm">
<span></span>
<span>{{ session('success') }}</span>
</div>
@endif
<x-user-form mode="self" :user="Auth::user()" /> <x-user-form mode="self" :user="Auth::user()" />
</div> </div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB