$request->validated('extension_type'), 'extension_identifier' => $request->validated('extension_identifier'), 'template_type' => $request->validated('template_type'), 'status' => $request->validated('status'), 'search' => $request->validated('search'), 'search_type' => $request->validated('search_type'), 'date_from' => $request->validated('date_from'), 'date_to' => $request->validated('date_to'), 'sort_by' => $request->validated('sort_by'), 'sort_order' => $request->validated('sort_order'), ], fn ($value) => $value !== null); $perPage = (int) ($request->validated('per_page') ?? 20); $logs = $this->mailSendLogService->getLogs($filters, $perPage); $collection = new MailSendLogCollection($logs); $responseData = $collection->toArray($request); // 컬렉션 레벨 abilities (페이지 레벨 버튼 제어용) $responseData['abilities'] = [ 'can_delete' => PermissionHelper::check('core.mail-send-logs.delete', $request->user()), ]; return $this->success('mail_send_log.fetch_success', $responseData); } catch (\Exception $e) { Log::error('메일 발송 이력 조회 실패', ['error' => $e->getMessage()]); return $this->error('mail_send_log.fetch_failed', 500); } } /** * 메일 발송 이력을 삭제합니다. * * @param MailSendLogDeleteRequest $request 검증된 삭제 요청 * @param MailSendLog $mailSendLog 삭제할 발송 이력 모델 * @return JsonResponse 삭제 결과 */ public function destroy(MailSendLogDeleteRequest $request, MailSendLog $mailSendLog): JsonResponse { try { $this->mailSendLogService->delete($mailSendLog->id); return $this->success('mail_send_log.delete_success'); } catch (\Exception $e) { Log::error('메일 발송 이력 삭제 실패', ['id' => $mailSendLog->id, 'error' => $e->getMessage()]); return $this->error('mail_send_log.delete_failed', 500); } } /** * 메일 발송 이력을 일괄 삭제합니다. * * @param MailSendLogBulkDeleteRequest $request 검증된 일괄 삭제 요청 * @return JsonResponse 삭제 결과 */ public function bulkDestroy(MailSendLogBulkDeleteRequest $request): JsonResponse { try { $count = $this->mailSendLogService->deleteMany($request->validated('ids')); return $this->success('mail_send_log.bulk_delete_success', ['deleted_count' => $count]); } catch (\Exception $e) { Log::error('메일 발송 이력 일괄 삭제 실패', ['error' => $e->getMessage()]); return $this->error('mail_send_log.delete_failed', 500); } } }