You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.1KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Auth;
  3. use App\Http\Controllers\Web\WebController;
  4. use App\Kintone\Models\Customer;
  5. use App\Logic\PasswordSettingManager;
  6. use App\Models\User;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Collection;
  10. class PasswordSettingStartController extends WebController
  11. {
  12. public function name(): string
  13. {
  14. return "パスワード設定開始";
  15. }
  16. public function description(): string
  17. {
  18. return "パスワード設定手続きを開始する";
  19. }
  20. public function __construct(protected PasswordSettingStartParam $param, private PasswordSettingManager $manager)
  21. {
  22. parent::__construct();
  23. }
  24. protected function run(Request $request): JsonResponse
  25. {
  26. $param = $this->param;
  27. $access = Customer::getAccess();
  28. $query = Customer::getQuery()->where(Customer::FIELD_EMAIL, $param->email);
  29. $customers = $access->all($query);
  30. if ($customers->isEmpty()) {
  31. // 無効なユーザだが、セキュリティ対策として成功と見せかける
  32. return $this->successResponse();
  33. }
  34. // トークン生成
  35. $this->tokenGenerate($customers);
  36. return $this->successResponse();
  37. }
  38. /**
  39. * Undocumented function
  40. *
  41. * @param Collection<int,Customer> $customers
  42. * @return void
  43. */
  44. private function tokenGenerate(Collection $customers)
  45. {
  46. foreach ($customers as $customer) {
  47. $kintoneId = $customer->getRecordId();
  48. $user = User::whereKintoneId($kintoneId)
  49. ->first();
  50. if ($user instanceof User) {
  51. } else {
  52. // 新規の場合はユーザーを追加する
  53. $user = new User();
  54. $user->email = $customer->email;
  55. $user->kintone_id = $customer->getRecordId();
  56. $user->kintone_customer_code = $customer->getNumber(Customer::FIELD_CUSTOMER_CODE);
  57. $user->save();
  58. }
  59. // トークン生成
  60. $this->manager->generate($user);
  61. }
  62. }
  63. }