dpl/app/Http/Controllers/V2/Admin/MailFlowController.php

35 lines
1.5 KiB
PHP

<?php
namespace App\Http\Controllers\V2\Admin;
use App\Http\Controllers\Controller;
use App\Models\MailDailyReport;
use App\Models\MailMessage;
use App\Models\MailQuotaBucket;
use App\Services\MailFlow\Settings;
use Illuminate\Support\Facades\Schema;
class MailFlowController extends Controller
{
public function incoming(\Illuminate\Http\Request $request)
{
$data = $request->validate(['id' => 'required|integer|min:1']);
$message = MailMessage::where('direction', 'in')->findOrFail($data['id']);
return $this->success(['email' => $message->email, 'subject' => $message->subject, 'text' => $message->payload['text'] ?? '']);
}
public function status()
{
$ready = Schema::hasTable('v2_mail_messages') && Schema::hasTable('v2_mail_quota_buckets') && Schema::hasTable('v2_mail_daily_reports');
return $this->success([
'automatic_mail_level' => \App\Services\MailFlow\AutomaticMailPolicy::state()['level'] ?? null,
'settings' => Settings::publicSettings(), 'database_ready' => $ready,
'imap_available' => function_exists('imap_open'),
'quota' => $ready ? MailQuotaBucket::where('resets_at', '>', now())->get() : [],
'messages' => $ready ? MailMessage::whereIn('direction', ['in', 'out'])->latest('id')->limit(50)
->get(['id', 'direction', 'purpose', 'channel', 'email', 'status', 'error_code', 'fallback_reason', 'created_at']) : [],
'reports' => $ready ? MailDailyReport::latest('id')->limit(7)->get() : [],
]);
}
}