UserRepository.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\User;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use App\DTO\UserDTO;
  6. use Illuminate\Support\Facades\Auth;
  7. class UserRepository implements UserRepositoryInterface
  8. {
  9. public function __construct(
  10. protected User $model,
  11. ) {}
  12. public function me(): ?User
  13. {
  14. return Auth::user();
  15. }
  16. public function all(): ?Collection
  17. {
  18. return $this->model->all();
  19. }
  20. public function store(UserDTO $userDTO): User
  21. {
  22. return $this->model->create($userDTO->toArray());
  23. }
  24. public function update(int $id, UserDTO $dto, array $fieldsToUpdate): User
  25. {
  26. $user = User::findOrFail($id);
  27. $updateFields = array_intersect_key(
  28. $dto->toArray(),
  29. array_flip($fieldsToUpdate)
  30. );
  31. $user->update($updateFields);
  32. return $user->fresh();
  33. }
  34. public function delete(int $id): bool
  35. {
  36. return $this->model->destroy(ids: $id);
  37. }
  38. public function find(int $id): ?User
  39. {
  40. return $this->model->findOrFail(id: $id);
  41. }
  42. public function findByEmail(string $email): ?User
  43. {
  44. return $this->model->where(column: 'email', operator: $email)->first();
  45. }
  46. }