ClientPaymentMethodService.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. ->select(
  11. 'id',
  12. 'brand',
  13. 'last_four_digits',
  14. 'card_name'
  15. )
  16. ->orderBy('is_active', 'desc')
  17. ->orderBy('created_at', 'desc')
  18. ->get();
  19. }
  20. public function findById(int $id): ?ClientPaymentMethod
  21. {
  22. return ClientPaymentMethod::find($id);
  23. }
  24. public function create(array $data): ClientPaymentMethod
  25. {
  26. if ($data['is_active'] ?? true) {
  27. $this->deactivateOtherCards($data['client_id']);
  28. }
  29. return ClientPaymentMethod::create($data);
  30. }
  31. public function update(ClientPaymentMethod $paymentMethod, array $data): ClientPaymentMethod
  32. {
  33. if (isset($data['is_active']) && $data['is_active']) {
  34. $this->deactivateOtherCards($paymentMethod->client_id, $paymentMethod->id);
  35. }
  36. $paymentMethod->update($data);
  37. return $paymentMethod->fresh();
  38. }
  39. public function delete(ClientPaymentMethod $paymentMethod): bool
  40. {
  41. return $paymentMethod->delete();
  42. }
  43. private function deactivateOtherCards(int $clientId, ?int $exceptId = null): void
  44. {
  45. $query = ClientPaymentMethod::where('client_id', $clientId);
  46. if ($exceptId) {
  47. $query->where('id', '!=', $exceptId);
  48. }
  49. $query->update(['is_active' => false]);
  50. }
  51. }