UserRepository.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\User;
  4. use Illuminate\Database\Eloquent\Collection;
  5. use App\DTO\UserDTO;
  6. use App\DTO\UserLanguageDTO;
  7. use Illuminate\Support\Facades\Auth;
  8. class UserRepository implements UserRepositoryInterface
  9. {
  10. public function __construct(
  11. protected User $model,
  12. )
  13. {
  14. }
  15. public function me(): ?User
  16. {
  17. return Auth::user();
  18. }
  19. public function all(): ?Collection
  20. {
  21. return $this->model->all();
  22. }
  23. public function store(UserDTO $userDTO): User
  24. {
  25. return $this->model->create(attributes: [
  26. 'name' => $userDTO->name,
  27. 'email' => $userDTO->email,
  28. 'password' => bcrypt(value: $userDTO->password),
  29. 'type' => $userDTO->type,
  30. ]);
  31. }
  32. public function update(UserDTO $userDTO, int $id): ?User
  33. {
  34. $user = $this->model->findOrFail(id: $id);
  35. $user->update(attributes: [
  36. 'name' => $userDTO->name,
  37. 'email' => $userDTO->email,
  38. 'password' => bcrypt(value: $userDTO->password),
  39. 'type' => $userDTO->type,
  40. ]);
  41. return $user;
  42. }
  43. public function delete(int $id): bool
  44. {
  45. return $this->model->destroy(ids: $id);
  46. }
  47. public function find(int $id): ?User
  48. {
  49. return $this->model->findOrFail(id: $id);
  50. }
  51. public function findByEmail(string $email): ?User
  52. {
  53. return $this->model->where(column: 'email', operator: $email)->first();
  54. }
  55. public function updateLanguage(UserLanguageDTO $languageDTO, int $id): ?User
  56. {
  57. $user = $this->model->findOrFail(id: $id);
  58. $user->update(attributes: [
  59. 'language' => $languageDTO->language,
  60. ]);
  61. return $user;
  62. }
  63. }