diff --git a/app/Http/Controllers/FcmController.php b/app/Http/Controllers/FcmController.php index 851a7e32..9ec9d15c 100644 --- a/app/Http/Controllers/FcmController.php +++ b/app/Http/Controllers/FcmController.php @@ -76,6 +76,26 @@ public function deleteToken(int $id): Response ->header('HX-Trigger', 'tokenDeleted'); } + /** + * 에러 토큰 전체 삭제 + */ + public function deleteErrorTokens(Request $request): Response + { + $query = PushDeviceToken::withoutGlobalScopes()->whereNotNull('last_error'); + + if ($tenantId = $request->get('tenant_id')) { + $query->where('tenant_id', $tenantId); + } + + $count = $query->count(); + $query->toBase()->delete(); + + \Log::info("에러 토큰 전체삭제: {$count}건 영구 삭제"); + + return response('', 200) + ->header('HX-Refresh', 'true'); + } + /** * FCM 테스트 발송 페이지 */ diff --git a/resources/views/barobill/eaccount/index.blade.php b/resources/views/barobill/eaccount/index.blade.php index 083c291e..30edf791 100644 --- a/resources/views/barobill/eaccount/index.blade.php +++ b/resources/views/barobill/eaccount/index.blade.php @@ -1024,6 +1024,7 @@ className="flex-1 py-2 bg-emerald-600 text-white rounded-lg hover:bg-emerald-700 const [form, setForm] = useState({}); const [saving, setSaving] = useState(false); const [baseBalance, setBaseBalance] = useState(0); + const [focusedField, setFocusedField] = useState(null); const isEditMode = !!editData; @@ -1300,9 +1301,11 @@ className="text-red-600" handleAmountChange('amount', e.target.value)} - placeholder="0" + onFocus={() => setFocusedField('amount')} + onBlur={() => setFocusedField(null)} + placeholder="금액 입력" className="w-full px-3 py-2 border border-stone-200 rounded-lg text-sm focus:ring-2 focus:ring-emerald-500 outline-none text-right" /> @@ -1312,9 +1315,11 @@ className="w-full px-3 py-2 border border-stone-200 rounded-lg text-sm focus:rin handleAmountChange('balance', e.target.value)} - placeholder="0" + onFocus={() => setFocusedField('balance')} + onBlur={() => setFocusedField(null)} + placeholder="잔액" className="w-full px-3 py-2 border border-stone-200 rounded-lg text-sm focus:ring-2 focus:ring-emerald-500 outline-none text-right bg-stone-50" /> {baseBalance !== 0 && ( diff --git a/resources/views/fcm/tokens.blade.php b/resources/views/fcm/tokens.blade.php index 755642c6..93ab806d 100644 --- a/resources/views/fcm/tokens.blade.php +++ b/resources/views/fcm/tokens.blade.php @@ -87,6 +87,22 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc + + @if($stats['has_error'] > 0) +