feat: Add deposit success email notification system with new mailer, job, view, and client update request.

This commit is contained in:
pbao9
2026-02-19 20:33:24 +07:00
parent c720e62bda
commit 7769326ac9
9 changed files with 612 additions and 0 deletions
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api\Client;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\Client\ClientAuthRequest;
use App\Http\Requests\Api\Client\ClientRegisterRequest;
use App\Http\Requests\Api\Client\ClientUpdateRequest;
use App\Http\Resources\Api\Client\ClientResource;
use App\Services\Api\Client\ClientAuthService;
use Illuminate\Support\Facades\Auth;
@@ -213,4 +214,20 @@ class ClientController extends Controller
'message' => 'Đã đăng xuất thành công.',
]);
}
public function update(ClientUpdateRequest $request)
{
$user = auth('client')->user();
$user->fill($request->validated());
$user->save();
return response()->json([
'error' => false,
'message' => 'Cập nhật thông tin thành công',
'data' => [
'client' => new ClientResource($user),
],
]);
}
}
@@ -6,6 +6,7 @@ use App\Enums\TransactionStatus;
use App\Http\Controllers\Controller;
use App\Http\Requests\DepositRequest;
use App\Http\Services\VNPayService;
use App\Jobs\Mail\Customer\DepositSuccessJob;
use App\Models\Customer;
use App\Models\Log;
use App\Models\Transaction;
@@ -148,6 +149,17 @@ class TransactionController extends Controller
'customer_id' => $transaction->customer_id,
]);
DepositSuccessJob::dispatch([
'customer_email' => $customer->email,
'customer_name' => $customer->fullname,
'transaction_code' => $transaction->public_code,
'amount' => $transaction->amount,
'credit' => $transaction->amount / 100,
'current_total' => $customer->total,
'current_credit' => $customer->credit,
'deposit_date' => now()->format('d/m/Y H:i:s'),
]);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
@@ -0,0 +1,34 @@
<?php
namespace App\Http\Requests\Api\Client;
use Illuminate\Foundation\Http\FormRequest;
class ClientUpdateRequest extends FormRequest
{
public function authorize(): bool
{
return auth('client')->check();
}
public function rules(): array
{
return [
'fullname' => 'required|string|max:255',
'phone' => 'required|string|max:20',
'company' => 'nullable|string|max:255',
'address' => 'nullable|string|max:500',
'province_code' => 'nullable|string|max:10',
'ward_code' => 'nullable|string|max:10',
'gender' => 'nullable|in:1,2,3',
];
}
public function messages(): array
{
return [
'fullname.required' => 'Họ tên là bắt buộc',
'phone.required' => 'Số điện thoại là bắt buộc',
];
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Jobs\Mail\Customer;
use App\Mail\Customer\DepositSuccess;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class DepositSuccessJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public array $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function handle(): void
{
try {
Mail::to($this->data['customer_email'])
->send(new DepositSuccess($this->data));
} catch (\Throwable $e) {
\Log::error('Không thể gửi email thông báo nạp tiền thành công: ' . $e->getMessage(), [
'customer_email' => $this->data['customer_email'] ?? null,
'transaction_code' => $this->data['transaction_code'] ?? null,
]);
}
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Mail\Customer;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class DepositSuccess extends Mailable
{
use Queueable, SerializesModels;
public array $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function envelope(): Envelope
{
return new Envelope(
subject: '✅ Nạp tiền thành công - ' . number_format($this->data['amount']) . ' VNĐ',
);
}
public function content(): Content
{
return new Content(
view: 'emails.customer.deposit-success',
with: [
'customerName' => $this->data['customer_name'] ?? 'Khách hàng',
'transactionCode' => $this->data['transaction_code'] ?? 'N/A',
'amount' => $this->data['amount'] ?? 0,
'amountFormatted' => number_format($this->data['amount']) ?? '0',
'credit' => $this->data['credit'] ?? 0,
'creditFormatted' => number_format($this->data['credit']) ?? '0',
'currentTotal' => $this->data['current_total'] ?? 0,
'currentTotalFormatted' => number_format($this->data['current_total']) ?? '0',
'currentCredit' => $this->data['current_credit'] ?? 0,
'currentCreditFormatted' => number_format($this->data['current_credit']) ?? '0',
'depositDate' => $this->data['deposit_date'] ?? now()->format('d/m/Y H:i:s'),
'supportEmail' => config('mail.support_email', 'support@thegioiso.com'),
'supportPhone' => config('mail.support_phone', '1900.xxxx'),
],
);
}
}
+19
View File
@@ -52,6 +52,25 @@ class Customer extends Authenticatable implements JWTSubject
'ward_code',
];
protected $updatable = [
'fullname',
'phone',
'company',
'address',
'province_code',
'ward_code',
'gender',
];
public function updatableFill(array $data): self
{
$data = array_intersect_key($data, array_flip($this->updatable));
foreach ($data as $key => $value) {
$this->{$key} = $value;
}
return $this;
}
/**
* Appends for API
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

@@ -0,0 +1,443 @@
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nạp tiền thành công</title>
<style>
body {
font-family: 'Helvetica', 'Arial', sans-serif;
line-height: 150%;
color: #505050;
margin: 0;
padding: 0;
background-color: #4c4e4e;
}
.container {
width: 715px;
margin: 0 auto;
background-color: #ececec;
border-radius: 8px;
border: 1px solid #aaa;
}
.header-top {
background-color: #f16723;
padding: 9px 18px;
border-radius: 8px 8px 0 0;
color: #ffffff;
}
.header-top table {
width: 100%;
}
.logo-section {
padding: 20px;
background: #fff;
}
.logo-section table {
width: 100%;
}
.content {
background: #fff;
width: 95%;
margin: 0 auto;
padding: 20px 18px;
}
.success-box {
background-color: #d4edda;
border: 1px solid #c3e6cb;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
text-align: center;
}
.success-title {
color: #28a745;
font-size: 18px;
font-weight: bold;
margin: 0 0 10px 0;
}
.info-table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
.info-table th {
background-color: #36414b;
color: #ffffff;
padding: 10px 15px;
text-align: left;
font-weight: normal;
}
.info-table td {
padding: 20px 15px;
border-top: 1px solid #d9d9d9;
color: #505050;
}
.balance-box {
background-color: #e8f5e8;
border: 1px solid #c3e6cb;
border-radius: 8px;
padding: 15px;
margin: 20px 0;
}
.balance-row {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px solid #d4edda;
}
.balance-row:last-child {
border-bottom: none;
}
.balance-label {
font-weight: bold;
color: #495057;
}
.balance-value {
color: #28a745;
font-weight: bold;
}
.footer-section {
padding: 20px;
}
.footer-section table {
width: 100%;
}
.bank-info {
background: #fff;
width: 95%;
margin: 0 auto;
padding: 18px;
}
.bank-info-title {
color: #0099cc;
font-weight: bold;
margin-bottom: 10px;
}
.bank-account {
padding: 5px 0;
}
.footer-bottom {
background-color: #f16723;
padding: 10px 18px;
border-radius: 0 0 8px 8px;
text-align: center;
color: #ffffff;
}
.footer-note {
font-size: 11px;
font-style: italic;
text-align: center;
padding-top: 10px;
color: #fff;
}
.auto-email-notice {
font-size: 11px;
font-style: italic;
text-align: center;
padding-top: 10px;
color: #fff;
}
</style>
</head>
<body>
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="center" style="border-collapse:collapse;padding:0;background-color:#4c4e4e;height:100%;margin:0;width:100%">
<tbody>
<tr>
<td style="font-size:11px;font-style:italic;text-align:center;padding-top:10px;color:#fff">Đây là email tự động. Quý khách vui lòng không trả lời email này.</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse;border-top:0;height:100%;margin:0;width:100%;line-height:200%;padding:10px">
<table width="715" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;border:1px none #aaa;background-color:#ececec;border-radius:8px">
<tbody>
<tr>
<td style="border-collapse:collapse;padding:0">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;padding-top:9px;padding-bottom:9px;background-color:#f16723;padding-left:18px;padding-right:18px;border-radius:8px 8px 0 0">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;text-align:left"><span style="color:#ffffff">{{ $depositDate }}</span></td>
<td style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;text-align:right"><span style="color:#ffffff">Hotline: {{ $supportPhone }}</span></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse"></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;padding-top:20px;padding-bottom:20px;padding-left:20px;padding-right:18px">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse">
<table width="220" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;line-height:150%;text-align:left;padding-top:5px">
<img style="border:0;height:51px;line-height:100%;outline:none;text-decoration:none;width:200px" src="{{ asset('images/logo.png') }}" alt="Logo">
</td>
</tr>
</tbody>
</table>
<table width="409" cellspacing="0" cellpadding="0" border="0" align="right" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;line-height:150%;text-align:left;padding-top:12px">
<p style="margin:0;padding-bottom:0;text-align:right"><span style="font-size:14px"><strong>CÔNG TY CỔ PHẦN GIẢI PHÁP CÔNG NGHỆ THẾ GIỚI SỐ</strong></span><br> DỊCH VỤ SERVER - CLOUD - VPS CHUYÊN NGHIỆP</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;background:#fff;width:95%;margin:0 auto">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;text-align:left;padding-top:10px;padding-bottom:10px;padding-left:19px;padding-right:18px">
<div style="margin-bottom:10px">Chào khách hàng <strong>{{ $customerName }}</strong>,</div>
<div style="margin-bottom:10px">Thế Giới Số trân trọng cảm ơn quý khách hàng đã quan tâm và sử dụng dịch vụ trong thời gian qua.</div>
<div><strong>Chúng tôi xin thông báo về việc nạp tiền vào tài khoản thành công.</strong></div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;background:#fff;width:95%;margin:0 auto">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;padding-top:0px;padding-bottom:20px;padding-left:18px;padding-right:18px">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse;border-style:solid;border-color:#e5e5e5;border-width:1px">
<thead>
<tr>
<th valign="top" style="color:#505050;font-family:Arial;font-size:12px;line-height:150%;text-align:left;font-weight:normal;color:#ffffff;padding-bottom:10px;padding-right:15px;padding-left:15px;padding-top:10px;background-color:#36414b">Thông tin giao dịch</th>
<th valign="top" style="color:#505050;font-family:Arial;font-size:12px;line-height:150%;text-align:left;font-weight:normal;color:#ffffff;padding-bottom:10px;padding-right:15px;padding-left:15px;padding-top:10px;background-color:#36414b">Chi tiết</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">Mã giao dịch</td>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px"><strong>{{ $transactionCode }}</strong></td>
</tr>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">Số tiền nạp</td>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px"><strong style="color:#28a745">{{ $amountFormatted }} VNĐ</strong></td>
</tr>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">Credit nhận được</td>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px"><strong style="color:#28a745">{{ $creditFormatted }} Credit</strong></td>
</tr>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">Thời gian</td>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">{{ $depositDate }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;background:#fff;width:95%;margin:0 auto">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse;font-family:Arial">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;line-height:150%;text-align:left;padding-left:19px;padding-right:18px">
<div style="margin-bottom:10px"><span style="font-size:12px"><strong>Số dư tài khoản sau khi nạp:</strong></span></div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;background:#fff;width:95%;margin:0 auto">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;padding-top:0px;padding-bottom:20px;padding-left:18px;padding-right:18px">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse;border-style:solid;border-color:#e5e5e5;border-width:1px">
<thead>
<tr>
<th valign="top" style="color:#505050;font-family:Arial;font-size:12px;line-height:150%;text-align:left;font-weight:normal;color:#ffffff;padding-bottom:10px;padding-right:15px;padding-left:15px;padding-top:10px;background-color:#36414b">Loại</th>
<th valign="top" style="color:#505050;font-family:Arial;font-size:12px;line-height:150%;text-align:left;font-weight:normal;color:#ffffff;padding-bottom:10px;padding-right:15px;padding-left:15px;padding-top:10px;background-color:#36414b">Số dư hiện tại</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">Số dư VNĐ</td>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px"><strong>{{ $currentTotalFormatted }} VNĐ</strong></td>
</tr>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px">Số dư Credit</td>
<td valign="top" style="border-collapse:collapse;color:#505050;font-size:12px;line-height:150%;text-align:left;border-top-style:solid;padding-bottom:20px;padding-right:15px;padding-left:15px;padding-top:20px;border-top-color:#d9d9d9;border-top-width:1px"><strong>{{ $currentCreditFormatted }} Credit</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;background:#fff;width:95%;margin:0 auto">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#36414b;font-family:Helvetica,Arial;font-size:12px;line-height:200%;text-align:left;padding-top:30px;padding-bottom:9px;padding-left:18px;padding-right:18px">
<p style="margin:0;padding-bottom:1em"><b>Lưu ý:</b></p>
<p style="margin:0;padding-bottom:1em">- Credit có thể được sử dụng để đăng ký các dịch vụ của Thế Giới Số như: Hosting, VPS, Server, Tên miền, SSL...</p>
<p style="margin:0;padding-bottom:1em">- Số dư VNĐ trong tài khoản sẽ được sử dụng để thanh toán các đơn hàng.</p>
<p style="margin:0;padding-bottom:0">Nếu quý khách cần hỗ trợ, vui lòng liên hệ với chúng tôi.</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;background:#fff;width:95%;margin:0 auto">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;padding-top:9px;padding-bottom:9px;padding-left:18px;padding-right:18px">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#505050;font-family:Helvetica,Arial;font-size:12px;line-height:200%;text-align:left">
<p style="margin:0;padding-bottom:1em"><span style="color:#0099cc"><strong>THANH TOÁN CHUYỂN KHOẢN</strong></span></p>
<p style="margin:0;padding-bottom:0">Tên tài khoản: <b>Công ty Cổ Phần Giải Pháp Công nghệ Thế Giới Số</b><br> Số TK VNĐ: <strong>0999999999</strong><br> Ngân hàng: <strong>VNPAY</strong></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;background-color:#f16723;border-radius:0 0 8px 8px">
<table width="100%" cellspacing="0" cellpadding="0" border="0" align="left" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse;color:#ffffff;font-family:Helvetica,Arial;font-size:12px;text-align:center;padding-top:10px;padding-bottom:10px;padding-left:18px;padding-right:18px">
<span>Copyright (c) 2024 The Gioi So. All Rights Reserved</span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td valign="top" align="center" style="border-collapse:collapse">
<table width="100%" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse">
<tbody>
<tr>
<td valign="top" style="border-collapse:collapse"></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>
+1
View File
@@ -19,6 +19,7 @@ Route::prefix('v1')->as('api.')->group(function () {
Route::group(['middleware' => ['api.auth']], function () {
Route::get('me', 'me')->name('me');
Route::post('logout', 'logout')->name('logout');
Route::put('update', 'update')->name('update');
});
});
});