feat: implement system-wide activity logging with database persistence, repository patterns, and admin controller access.

This commit is contained in:
pbao9
2026-05-16 20:01:52 +07:00
parent 8a115c5175
commit 551c90d60b
44 changed files with 845 additions and 33 deletions
@@ -8,6 +8,7 @@ use App\Http\Requests\DepositRequest;
use App\Http\Services\Telegram;
use App\Models\Log;
use App\Models\Transaction;
use App\Services\ActivityLogger;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@@ -16,6 +17,7 @@ use Illuminate\Support\Str;
class ManualDepositController extends Controller
{
public function __construct(protected ActivityLogger $activityLogger) {}
/**
* GET /v1/transaction/manual-deposit/pending
* Kiểm tra xem user có GD manual đang chờ duyệt (đã submit proof) không.
@@ -111,6 +113,13 @@ class ManualDepositController extends Controller
return response()->json(['error' => true, 'message' => 'Có lỗi xảy ra, vui lòng thử lại'], 500);
}
$this->activityLogger->log(
event: 'deposit_prepare',
logName: 'Transaction',
description: "Customer {$user->email} tạo yêu cầu nạp tiền thủ công: " . number_format($request->amount) . ' VNĐ - Mã: ' . $publicCode,
newValues: ['public_code' => $publicCode, 'amount' => $request->amount, 'type' => 'manual'],
);
return response()->json([
'error' => false,
'data' => [
@@ -136,12 +145,22 @@ class ManualDepositController extends Controller
->whereNull('proof_image')
->firstOrFail();
$amount = $transaction->amount;
$publicCode = $transaction->public_code;
DB::transaction(function () use ($transaction, $user) {
$user->total_pending = max(0, $user->total_pending - $transaction->amount);
$user->save();
$transaction->forceDelete();
});
$this->activityLogger->log(
event: 'deposit_cancel',
logName: 'Transaction',
description: "Customer {$user->email} huỷ yêu cầu nạp tiền thủ công: " . number_format($amount) . ' VNĐ - Mã: ' . $publicCode,
newValues: ['public_code' => $publicCode, 'amount' => $amount],
);
return response()->json(['error' => false, 'message' => 'Đã huỷ yêu cầu']);
}
@@ -188,6 +207,13 @@ class ManualDepositController extends Controller
'customer_id' => $user->id,
]);
$this->activityLogger->log(
event: 'deposit_confirm',
logName: 'Transaction',
description: "Customer {$user->email} nộp chứng từ nạp tiền thủ công: " . number_format($transaction->amount) . ' VNĐ - Mã: ' . $transaction->public_code,
newValues: ['public_code' => $transaction->public_code, 'amount' => $transaction->amount, 'has_proof' => true],
);
return response()->json([
'error' => false,
'message' => 'Yêu cầu nạp tiền đã được ghi nhận, vui lòng chờ admin xác nhận',
@@ -11,6 +11,7 @@ use App\Models\Customer;
use App\Models\Invoice;
use App\Models\Log;
use App\Models\Transaction;
use App\Services\ActivityLogger;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@@ -20,10 +21,12 @@ use Illuminate\Support\Str;
class TransactionController extends Controller
{
protected VNPayService $vnpayService;
protected ActivityLogger $activityLogger;
public function __construct(VNPayService $vnpayService)
public function __construct(VNPayService $vnpayService, ActivityLogger $activityLogger)
{
$this->vnpayService = $vnpayService;
$this->activityLogger = $activityLogger;
}
public function handle(DepositRequest $request)
@@ -48,6 +51,14 @@ class TransactionController extends Controller
'transaction_uuid' => $uuid,
]);
$this->activityLogger->log(
event: 'deposit_vnpay',
logName: 'Transaction',
description: "Customer {$user->email} tạo yêu cầu nạp tiền VNPay: " . number_format($request->amount) . ' VNĐ - Mã: ' . $publicCode,
subject: $transaction,
newValues: ['public_code' => $publicCode, 'amount' => $request->amount, 'type' => 'vnpay'],
);
return response()->json([
'error' => false,
'message' => 'Tạo yêu cầu nạp tiền thành công',
@@ -151,6 +162,14 @@ class TransactionController extends Controller
'customer_id' => $transaction->customer_id,
]);
$this->activityLogger->log(
event: 'deposit_success',
logName: 'Transaction',
description: "Customer {$customer->email} nạp tiền VNPay thành công: " . number_format($transaction->amount) . ' VNĐ - Mã: ' . $transaction->public_code,
subject: $transaction,
newValues: ['amount' => $transaction->amount, 'new_total' => $customer->total, 'public_code' => $transaction->public_code],
);
DepositSuccessJob::dispatch([
'customer_email' => $customer->email,
'customer_name' => $customer->fullname,