added function for trigger 2

This commit is contained in:
2026-07-06 19:21:20 +03:30
parent dcc8559945
commit fc3792902a
6 changed files with 60 additions and 13 deletions
@@ -46,6 +46,7 @@ class CustomerController extends SuperController
{ {
$data = $request->all(); $data = $request->all();
if (isset($data['mobile']) && !is_null($data['mobile'])){ if (isset($data['mobile']) && !is_null($data['mobile'])){
$data['mobile'] = Customer::normalizeMobile($data['mobile']);
Customer::assertMobileUnique($data['mobile'], (int) $id); Customer::assertMobileUnique($data['mobile'], (int) $id);
} }
+8 -2
View File
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\DB\Te\TableEngine; use App\DB\Te\TableEngine;
use App\Models\Cnt; use App\Models\Cnt;
use App\Models\Customer; use App\Models\Customer;
use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
@@ -101,8 +102,13 @@ class SuperController extends Controller
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
$data= $request->all(); $data= $request->all();
if (isset($data['mobile']) && !is_null($data['mobile'])){ if (isset($data['mobile']) && !is_null($data['mobile'])) {
Customer::assertMobileUnique($data['mobile'], (int) $id); $data['mobile'] = Customer::normalizeMobile($data['mobile']);
if ($this->name_model === 'customer') {
Customer::assertMobileUnique($data['mobile'], (int) $id);
} elseif ($this->name_model === 'user') {
User::assertMobileUnique($data['mobile'], (int) $id);
}
} }
if (isset($data['fname']) && isset($data['lname'])){ if (isset($data['fname']) && isset($data['lname'])){
$data['name'] = $data['fname'] . ' ' . $data['lname']; $data['name'] = $data['fname'] . ' ' . $data['lname'];
+6 -2
View File
@@ -40,9 +40,13 @@ class ValidationMiddleware
: $rule; : $rule;
}, $rules); }, $rules);
} }
$validator = Validator::make($request->all(), $rules); $validator = Validator::make($request->all(), $rules, [
'mobile.unique' => 'این شماره موبایل قبلاً ثبت شده است',
]);
if ($validator->fails()) { if ($validator->fails()) {
return response()->json($validator->errors(),422); return response()->json([
'message' => $validator->errors()->first(),
], 422);
} }
} }
return $next($request); return $next($request);
+28 -5
View File
@@ -208,14 +208,26 @@ class Customer extends Authenticatable implements JWTSubject
public static function isMobileTaken(?string $mobile, ?int $exceptId = null): bool public static function isMobileTaken(?string $mobile, ?int $exceptId = null): bool
{ {
$mobile = self::normalizeMobile($mobile); return self::isMobileTakenOnTable(self::class, $mobile, $exceptId);
if ($mobile === null) { }
public static function isMobileTakenOnTable(string $modelClass, ?string $mobile, ?int $exceptId = null): bool
{
$normalized = self::normalizeMobile($mobile);
if ($normalized === null) {
return false; return false;
} }
$query = static::query() if ($exceptId !== null) {
->where('mobile', $mobile) $current = $modelClass::query()->whereNull('deleted_at')->find($exceptId);
->whereNull('deleted_at'); if ($current !== null && self::normalizeMobile($current->mobile ?? '') === $normalized) {
return false;
}
}
$query = $modelClass::query()
->whereNull('deleted_at')
->whereIn('mobile', self::mobileLookupVariants($normalized));
if ($exceptId !== null) { if ($exceptId !== null) {
$query->where('id', '<>', $exceptId); $query->where('id', '<>', $exceptId);
@@ -224,6 +236,17 @@ class Customer extends Authenticatable implements JWTSubject
return $query->exists(); return $query->exists();
} }
private static function mobileLookupVariants(string $normalized): array
{
$digits = ltrim($normalized, '0');
return array_values(array_unique(array_filter([
$normalized,
$digits,
'0' . $digits,
])));
}
public static function assertMobileUnique(?string $mobile, ?int $exceptId = null): void public static function assertMobileUnique(?string $mobile, ?int $exceptId = null): void
{ {
if (self::isMobileTaken($mobile, $exceptId)) { if (self::isMobileTaken($mobile, $exceptId)) {
+13
View File
@@ -9,6 +9,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; use Laravel\Sanctum\HasApiTokens;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
use Tymon\JWTAuth\Contracts\JWTSubject; use Tymon\JWTAuth\Contracts\JWTSubject;
@@ -80,4 +81,16 @@ class User extends Authenticatable implements JWTSubject
public function setPasswordAttribute($value){ public function setPasswordAttribute($value){
$this->attributes['password'] = Hash::make($value); $this->attributes['password'] = Hash::make($value);
} }
public static function isMobileTaken(?string $mobile, ?int $exceptId = null): bool
{
return Customer::isMobileTakenOnTable(self::class, $mobile, $exceptId);
}
public static function assertMobileUnique(?string $mobile, ?int $exceptId = null): void
{
if (self::isMobileTaken($mobile, $exceptId)) {
throw new UnprocessableEntityHttpException('این شماره موبایل قبلاً ثبت شده است');
}
}
} }
+4 -4
View File
@@ -21,7 +21,7 @@ return[
'lname' => 'required', 'lname' => 'required',
], ],
'admin/customer/{id}@put'=>[ 'admin/customer/{id}@put'=>[
'mobile' => 'sometimes|digits:11|unique:customers,mobile,update_id,id,deleted_at,NULL', 'mobile' => 'sometimes|digits:11',
'fname' => 'sometimes|required', 'fname' => 'sometimes|required',
'lname' => 'sometimes|required', 'lname' => 'sometimes|required',
], ],
@@ -32,9 +32,9 @@ return[
'lname'=>'required' 'lname'=>'required'
], ],
'admin/user/{id}@put'=>[ 'admin/user/{id}@put'=>[
'mobile'=>'required|digits:11|unique:users,mobile,update_id,id,deleted_at,NULL', 'mobile'=>'sometimes|digits:11',
'fname'=>'required', 'fname'=>'sometimes|required',
'lname'=>'required' 'lname'=>'sometimes|required'
], ],
//--------------------Customer Fund--------------------- //--------------------Customer Fund---------------------
'customer/wallet/withdraw@post'=>[ 'customer/wallet/withdraw@post'=>[