ClientPaymentMethodService.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Services;
  3. use App\Models\ClientPaymentMethod;
  4. use Illuminate\Support\Collection;
  5. class ClientPaymentMethodService
  6. {
  7. public function getByClientId(int $clientId): Collection
  8. {
  9. return ClientPaymentMethod::where('client_id', $clientId)
  10. ->orderBy('is_active', 'desc')
  11. ->orderBy('created_at', 'desc')
  12. ->get();
  13. }
  14. public function findById(int $id): ?ClientPaymentMethod
  15. {
  16. return ClientPaymentMethod::find($id);
  17. }
  18. public function create(array $data): ClientPaymentMethod
  19. {
  20. if ($data['is_active'] ?? true) {
  21. $this->deactivateOtherCards($data['client_id']);
  22. }
  23. return ClientPaymentMethod::create($data);
  24. }
  25. public function update(ClientPaymentMethod $paymentMethod, array $data): ClientPaymentMethod
  26. {
  27. if (isset($data['is_active']) && $data['is_active']) {
  28. $this->deactivateOtherCards($paymentMethod->client_id, $paymentMethod->id);
  29. }
  30. $paymentMethod->update($data);
  31. return $paymentMethod->fresh();
  32. }
  33. public function delete(ClientPaymentMethod $paymentMethod): bool
  34. {
  35. return $paymentMethod->delete();
  36. }
  37. private function deactivateOtherCards(int $clientId, ?int $exceptId = null): void
  38. {
  39. $query = ClientPaymentMethod::where('client_id', $clientId);
  40. if ($exceptId) {
  41. $query->where('id', '!=', $exceptId);
  42. }
  43. $query->update(['is_active' => false]);
  44. }
  45. }