diff --git a/app/Services/User/Contracts/UserServiceInterface.php b/app/Services/User/Contracts/UserServiceInterface.php index 6982e10..25680f7 100644 --- a/app/Services/User/Contracts/UserServiceInterface.php +++ b/app/Services/User/Contracts/UserServiceInterface.php @@ -22,4 +22,12 @@ interface UserServiceInterface public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void; 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; } \ No newline at end of file diff --git a/app/Services/User/UserService.php b/app/Services/User/UserService.php index 03148d7..d7dd5cf 100644 --- a/app/Services/User/UserService.php +++ b/app/Services/User/UserService.php @@ -232,38 +232,18 @@ class UserService implements UserServiceInterface } // 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(); $end = Carbon::parse($selectedMonth)->endOfMonth(); - $cards = Administration::with('senderUser') - ->where('msnv', $user->msnv) - ->whereBetween('date', [$start, $end]) - ->where('received', '>', 0) - ->orderBy('date', 'desc') - ->get(); - return ['cards' => $cards]; - } - // Retrieve paginated list of sent ThankCards for a user - public function getSentPageData(User $user, string $selectedMonth): array - { - $start = Carbon::parse($selectedMonth)->startOfMonth(); - $end = Carbon::parse($selectedMonth)->endOfMonth(); - $cards = Administration::with('receiverUser') - ->where('msnv', $user->msnv) + $statsQuery = Administration::where('msnv', $user->msnv) ->whereBetween('date', [$start, $end]) - ->where('sent', '>', 0) - ->orderBy('date', 'desc') - ->get(); - return ['cards' => $cards]; - } + ->where('received', '>', 0); + + $totalCards = (int) $statsQuery->sum('received'); + $totalSenders = (int) $statsQuery->whereNotNull('sender')->distinct('sender')->count('sender'); - // Retrieve limited feed of received ThankCards for activity feed - public function getReceivedFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array - { - $start = Carbon::parse($selectedMonth)->startOfMonth(); - $end = Carbon::parse($selectedMonth)->endOfMonth(); $cards = Administration::with('senderUser') ->where('msnv', $user->msnv) ->whereBetween('date', [$start, $end]) @@ -272,33 +252,67 @@ class UserService implements UserServiceInterface ->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]; + + return [ + 'cards' => $cards, + 'hasMore' => $hasMore, + 'totalCards' => $totalCards, + 'totalSenders' => $totalSenders + ]; + } + + // Retrieve paginated list of sent ThankCards for a user + public function getSentPageData(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array + { + $start = Carbon::parse($selectedMonth)->startOfMonth(); + $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') + ->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, + 'totalCards' => $totalCards, + 'totalReceivers' => $totalReceivers + ]; + } + + // Retrieve limited feed of received ThankCards for activity feed + public function getReceivedFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array + { + return $this->getReceivedPageData($user, $selectedMonth, $limit, $offset); } // Retrieve limited feed of sent ThankCards for activity feed public function getSentFeed(User $user, string $selectedMonth, int $limit = 12, int $offset = 0): array { - $start = Carbon::parse($selectedMonth)->startOfMonth(); - $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]; + return $this->getSentPageData($user, $selectedMonth, $limit, $offset); } public function updateProfile(User $user, array $data, ?\Illuminate\Http\UploadedFile $avatarFile = null): void diff --git a/resources/views/user/edit.blade.php b/resources/views/user/edit.blade.php index b2918ca..98db785 100644 --- a/resources/views/user/edit.blade.php +++ b/resources/views/user/edit.blade.php @@ -4,12 +4,7 @@ @section('content')
- @if(session('success')) -
- - {{ session('success') }} -
- @endif +
diff --git a/storage/app/public/avatars/HbZJQujExh2mmX3mSOmpA6seKN0OZ8RcKtn05zLO.png b/storage/app/public/avatars/HbZJQujExh2mmX3mSOmpA6seKN0OZ8RcKtn05zLO.png new file mode 100644 index 0000000..c936348 Binary files /dev/null and b/storage/app/public/avatars/HbZJQujExh2mmX3mSOmpA6seKN0OZ8RcKtn05zLO.png differ diff --git a/storage/app/public/avatars/LifMTKguE8JZr7TsIYN0CX6YO5rERwydaDT3TSRE.png b/storage/app/public/avatars/LifMTKguE8JZr7TsIYN0CX6YO5rERwydaDT3TSRE.png new file mode 100644 index 0000000..c936348 Binary files /dev/null and b/storage/app/public/avatars/LifMTKguE8JZr7TsIYN0CX6YO5rERwydaDT3TSRE.png differ