UserRepository.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. )
  14. {
  15. }
  16. public function me(): ?User
  17. {
  18. return Auth::user();
  19. }
  20. public function all(): ?Collection
  21. {
  22. return $this->model->all();
  23. }
  24. public function store(UserDto $userDto): User
  25. {
  26. return $this->model->create([
  27. 'name' => $userDto->name,
  28. 'email' => $userDto->email,
  29. 'password' => bcrypt($userDto->password),
  30. 'type' => $userDto->type,
  31. ]);
  32. }
  33. public function update(UserDto $userDto, int $id): ?User
  34. {
  35. $user = $this->model->findOrFail($id);
  36. $user->update([
  37. 'name' => $userDto->name,
  38. 'email' => $userDto->email,
  39. 'password' => bcrypt($userDto->password),
  40. 'type' => $userDto->type,
  41. ]);
  42. return $user;
  43. }
  44. public function delete(int $id): bool
  45. {
  46. return $this->model->destroy($id);
  47. }
  48. public function find(int $id): ?User
  49. {
  50. return $this->model->findOrFail($id);
  51. }
  52. public function findByEmail(string $email): ?User
  53. {
  54. return $this->model->where('email', $email)->first();
  55. }
  56. public function updateLanguage(UserLanguageDto $languageDto, int $id): ?User
  57. {
  58. $user = $this->model->findOrFail($id);
  59. $user->update([
  60. 'language' => $languageDto->language,
  61. ]);
  62. return $user;
  63. }
  64. }