This commit is contained in:
baodev0
2026-09-23 15:17:18 +07:00
parent cd38c5d6d0
commit 82a71244ca
107 changed files with 3332 additions and 3306 deletions
@@ -9,6 +9,7 @@ use App\Http\Requests\Api\Client\ClientRegisterRequest;
use App\Http\Requests\Api\Client\ClientUpdateCccdRequest;
use App\Http\Requests\Api\Client\ClientUpdateRequest;
use App\Http\Resources\Api\Client\ClientResource;
use App\Models\Customer;
use App\Services\ActivityLogger;
use App\Services\Api\Client\ClientAuthService;
use Illuminate\Http\Request;
@@ -387,13 +388,13 @@ class ClientController extends Controller
'email' => ['required', 'email', 'max:255'],
]);
$customer = $this->authService->resetForgottenPassword($request->input('email'));
$customer = $this->authService->sendPasswordResetLink($request->input('email'));
if ($customer) {
$this->activityLogger->log(
event: 'password_forgot',
logName: 'Customer',
description: "Customer {$customer->email} yêu cầu cấp lại mật khẩu",
description: "Customer {$customer->email} yêu cầu link đặt lại mật khẩu",
subject: $customer,
);
}
@@ -401,10 +402,46 @@ class ClientController extends Controller
// Do not disclose whether the email exists.
return response()->json([
'error' => false,
'message' => 'Nếu email tồn tại, mật khẩu mới đã được gửi đến hộp thư của bạn.',
'message' => 'Nếu email tồn tại, link đặt lại mật khẩu đã được gửi đến hộp thư của bạn.',
]);
}
public function resetPassword(Request $request)
{
$data = $request->validate([
'email' => ['required', 'email', 'max:255'],
'token' => ['required', 'string', 'max:255'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
$customer = $this->authService->resetPassword($data);
$this->activityLogger->log(
event: 'password_reset',
logName: 'Customer',
description: "Customer {$customer->email} đặt lại mật khẩu qua email",
subject: $customer,
);
return response()->json([
'error' => false,
'message' => 'Đặt lại mật khẩu thành công, vui lòng đăng nhập lại.',
]);
}
/**
* Trả ảnh CCCD từ disk private. Route yêu cầu chữ ký (signed:relative) nên không cần
* Bearer — chữ ký do ClientResource cấp cho đúng chủ tài khoản, hết hạn sau 60 phút.
*/
public function cccdImage(int $customer, string $side)
{
$path = Customer::findOrFail($customer)->{$side === 'front' ? 'front_identity_number' : 'back_identity_number'};
abort_unless($path && str_starts_with($path, 'cccd/') && Storage::disk('local')->exists($path), 404);
return Storage::disk('local')->response($path, null, ['Cache-Control' => 'private, no-store']);
}
public function update(ClientUpdateRequest $request)
{
$result = $this->authService->updateProfile(auth('client')->user(), $request->validated());
@@ -432,8 +469,9 @@ class ClientController extends Controller
public function updateCccd(ClientUpdateCccdRequest $request)
{
$frontUrl = Storage::disk('public')->url($request->file('cmnd_before')->store('cccd', 'public'));
$backUrl = Storage::disk('public')->url($request->file('cmnd_after')->store('cccd', 'public'));
// Disk private: ảnh chỉ đọc được qua route signed `api.client.cccd`.
$frontUrl = $request->file('cmnd_before')->store('cccd', 'local');
$backUrl = $request->file('cmnd_after')->store('cccd', 'local');
$result = $this->authService->updateCccd(
auth('client')->user(),