UserRepository.php 1.8 KB

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