ActivityEligibilityService.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ActivityReward;
  4. use App\Models\BalanceLog;
  5. use App\Models\User;
  6. use App\Models\UserLogin;
  7. use App\Support\ActivityEligibility;
  8. class ActivityEligibilityService
  9. {
  10. public static function memberContext($memberId): ?array
  11. {
  12. if ($memberId === null || $memberId === '') {
  13. return null;
  14. }
  15. $user = User::where('member_id', $memberId)->first();
  16. if (!$user) {
  17. return null;
  18. }
  19. $platform = UserLogin::where('user_id', $memberId)
  20. ->where('status', UserLogin::STATUS_SUCCESS)->orderBy('id')->value('platform');
  21. return [
  22. 'registered_at' => $user->getRawOriginal('created_at'),
  23. 'register_platform' => ActivityEligibility::normalizePlatform($platform),
  24. // Same categories as getTotalRecharge(), retaining the database decimal precision.
  25. 'deposit_total' => (string)BalanceLog::where('member_id', $memberId)->where('type', 1)
  26. ->whereIn('change_type', ['充值', '人工充值', '三方充值'])
  27. ->selectRaw('COALESCE(SUM(amount), 0) AS total')->value('total'),
  28. ];
  29. }
  30. public static function evaluate(ActivityReward $activity, ?array $member): array
  31. {
  32. return ActivityEligibility::evaluate($activity->toArray(), $member);
  33. }
  34. public static function isPublishedOn(ActivityReward $activity, ?string $platform): bool
  35. {
  36. return ActivityEligibility::isPublishedOn($activity->toArray(), $platform);
  37. }
  38. }