toDateString(); DB::table('mem_auth')->updateOrInsert( ['mem_no' => $memNo, 'auth_type' => $authType], ['auth_state' => $authState, 'auth_date' => $authDate] ); } public function markRequested(int $memNo, string $authType, array $logInfo = []): void { $this->setStateWithLog($memNo, $authType, MemAuth::STATE_R, MemAuthLog::STATE_P, $logInfo); } public function markProcessing(int $memNo, string $authType, array $logInfo = []): void { $this->setStateWithLog($memNo, $authType, MemAuth::STATE_P, MemAuthLog::STATE_P, $logInfo); } public function markSuccess(int $memNo, string $authType, array $logInfo = []): void { $this->setStateWithLog($memNo, $authType, MemAuth::STATE_Y, MemAuthLog::STATE_S, $logInfo); } public function markFail(int $memNo, string $authType, array $logInfo = []): void { $this->setStateWithLog($memNo, $authType, MemAuth::STATE_N, MemAuthLog::STATE_F, $logInfo); } /** * mem_auth_info.auth_info JSON에 타입별로 병합 저장 * - 예: ["email" => [...], "cell" => [...]] */ public function mergeAuthInfo(int $memNo, string $authType, array $payload): void { DB::transaction(function () use ($memNo, $authType, $payload) { /** @var MemAuthInfo $row */ $row = MemAuthInfo::query()->find($memNo); if (!$row) { $row = new MemAuthInfo(); $row->mem_no = $memNo; $row->auth_info = []; } $data = $row->auth_info ?: []; $data[$authType] = array_merge($data[$authType] ?? [], $payload); $row->auth_info = $data; $row->save(); }); } /** * mem_auth 상태 변경 + mem_auth_log 기록을 한 트랜잭션으로 */ private function setStateWithLog( int $memNo, string $authType, string $authState, string $logState, array $logInfo ): void { DB::transaction(function () use ($memNo, $authType, $authState, $logState, $logInfo) { $this->upsertState($memNo, $authType, $authState); MemAuthLog::query()->create([ 'mem_no' => $memNo, 'type' => $authType, 'state' => $logState, 'info' => $logInfo, 'rgdate' => Carbon::now()->toDateTimeString(), ]); }); } public function getState(int $memNo, string $authType): ?string { return DB::table('mem_auth') ->where('mem_no', $memNo) ->where('auth_type', $authType) ->value('auth_state'); } public function isVerified(int $memNo, string $authType): bool { return $this->getState($memNo, $authType) === MemAuth::STATE_Y; } }