|
- <?php
-
- namespace App\Logic;
-
- use App\Email\Guests\PasswordSettingStart;
- use App\Models\PasswordSettingToken;
- use App\Models\User;
- use App\Util\DateUtil;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Str;
-
- class PasswordSettingManager
- {
-
- public function __construct()
- {
- }
-
- public function generate(User $user)
- {
- // トークン生成
- $model = PasswordSettingToken::whereUserId($user->id)->firstOrNew();
- $model->user_id = $user->id;
- $model->token = Str::uuid();
- $model->expires_at = DateUtil::now()->addHours(24);
- $model->save();
-
- // メール送信
- $email = (new PasswordSettingStart($model))
- ->setEmail($user->email);
- $emailManager = new EmailManager($email);
- $emailManager->confirm();
- }
-
- /**
- * @param string $token
- * @return Collection<int, User>|null
- */
- public function verify(string $token): Collection|null
- {
- $passwords =
- PasswordSettingToken::whereToken($token)
- ->expiresIn()
- ->get();
-
-
- $users = User::whereIn(
- User::COL_NAME_ID,
- $passwords->pluck(PasswordSettingToken::COL_NAME_USER_ID)
- )
- ->get();
-
-
- foreach ($passwords as $password) {
- $password->delete();
- }
-
- return $users;
- }
- }
|