feat: identifier for admin cotroller
This commit is contained in:
@@ -18,23 +18,25 @@ public function users(Request $request)
|
||||
$data = $request->validate([
|
||||
'per_page' => 'integer',
|
||||
'mobile' => 'string',
|
||||
'email' => 'string',
|
||||
'package_name' => 'string',
|
||||
]);
|
||||
|
||||
$users = User::when(isset($data['package_name']), fn ($q) => $q->whereHas('packageNames', fn ($q2) => $q2->where('name', $data['package_name'])))
|
||||
->when(isset($data['mobile']), fn ($q) => $q->where('mobile', $data['mobile']))
|
||||
->when(isset($data['email']), fn ($q) => $q->where('email', $data['email']))
|
||||
->paginate($data['per_page'] ?? 30);
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
public function getUserTransactions(Request $request, $mobile)
|
||||
public function getUserTransactions(Request $request, $identifier)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'per_page' => 'integer'
|
||||
]);
|
||||
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
@@ -45,7 +47,7 @@ public function getUserTransactions(Request $request, $mobile)
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
public function getUserStatus(Request $request, $mobile)
|
||||
public function getUserStatus(Request $request, $identifier)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'package_name' => 'string'
|
||||
@@ -60,7 +62,9 @@ public function getUserStatus(Request $request, $mobile)
|
||||
if (!$user = User::with([
|
||||
'products' => fn ($q) => $q->when(isset($data['package_name']), fn ($q1) => $q1->where('package_name_id', $packageName->id)),
|
||||
'products.packageName'
|
||||
])->where('mobile', $mobile)->first()) {
|
||||
])->where(function($query) use ($identifier) {
|
||||
$this->applyIdentifierCondition($query, $identifier);
|
||||
})->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
@@ -69,13 +73,14 @@ public function getUserStatus(Request $request, $mobile)
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function getUserStatusV1(Request $request, $mobile)
|
||||
public function getUserStatusV1(Request $request, $identifier)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'package_name' => 'string'
|
||||
]);
|
||||
|
||||
$userMobile = $mobile;
|
||||
$userIdentifier = $identifier;
|
||||
|
||||
if (isset($data['package_name']) && !$packageName = PackageName::with('products')
|
||||
->where('name', $data['package_name'])->first()) {
|
||||
return response()->json([
|
||||
@@ -83,8 +88,23 @@ public function getUserStatusV1(Request $request, $mobile)
|
||||
], 404);
|
||||
}
|
||||
|
||||
if (!OldPurchase::when(isset($data['package_name']), fn ($q) => $q->where('package_name', $data['package_name']))
|
||||
->where('mobile', preg_replace('/09/', '989', $userMobile, 1))->first()) {
|
||||
// For OldPurchase, we need to determine if identifier is mobile or email
|
||||
if ($this->isMobileNumber($identifier)) {
|
||||
$mobile = preg_replace('/09/', '989', $identifier, 1);
|
||||
$query = OldPurchase::when(isset($data['package_name']), fn ($q) => $q->where('package_name', $data['package_name']))
|
||||
->where('mobile', $mobile);
|
||||
} else {
|
||||
// Assuming OldPurchase might have email field or we need to find user first
|
||||
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
$query = OldPurchase::when(isset($data['package_name']), fn ($q) => $q->where('package_name', $data['package_name']))
|
||||
->where('mobile', preg_replace('/09/', '989', $user->mobile, 1));
|
||||
}
|
||||
|
||||
if (!$query->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user is not paid'
|
||||
], 400);
|
||||
@@ -95,13 +115,13 @@ public function getUserStatusV1(Request $request, $mobile)
|
||||
]);
|
||||
}
|
||||
|
||||
public function subscribeUser(Request $request, $mobile)
|
||||
public function subscribeUser(Request $request, $identifier)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'product_id' => 'integer|required'
|
||||
]);
|
||||
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
@@ -120,13 +140,13 @@ public function subscribeUser(Request $request, $mobile)
|
||||
]);
|
||||
}
|
||||
|
||||
public function unsubscribeUser(Request $request, $mobile)
|
||||
public function unsubscribeUser(Request $request, $identifier)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'product_id' => 'integer|required'
|
||||
]);
|
||||
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
@@ -145,9 +165,9 @@ public function unsubscribeUser(Request $request, $mobile)
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteUser(Request $request, $mobile)
|
||||
public function deleteUser(Request $request, $identifier)
|
||||
{
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
@@ -160,7 +180,7 @@ public function deleteUser(Request $request, $mobile)
|
||||
]);
|
||||
}
|
||||
|
||||
public function updateUserProfile(Request $request, $mobile)
|
||||
public function updateUserProfile(Request $request, $identifier)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'first_name' => 'string',
|
||||
@@ -170,7 +190,7 @@ public function updateUserProfile(Request $request, $mobile)
|
||||
'avatar' => 'image'
|
||||
]);
|
||||
|
||||
if (!$subjectUser = User::where('mobile', $mobile)->first()) {
|
||||
if (!$subjectUser = $this->findUserByIdentifier($identifier)) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
@@ -189,14 +209,14 @@ public function updateUserProfile(Request $request, $mobile)
|
||||
$user = User::where('mobile', $data['mobile'])->first();
|
||||
if ($user && $data['mobile'] != $subjectUser->mobile) {
|
||||
return response()->json([
|
||||
'message' => 'user with given email exists'
|
||||
'message' => 'user with given mobile exists'
|
||||
], 400);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($data['avatar'])) {
|
||||
Storage::disk('public')->put("avatars/$user->uuid.png", file_get_contents($data['avatar']->path()));
|
||||
$data['avatar'] = "storage/avatars/$user->uuid.png";
|
||||
Storage::disk('public')->put("avatars/$subjectUser->uuid.png", file_get_contents($data['avatar']->path()));
|
||||
$data['avatar'] = "storage/avatars/$subjectUser->uuid.png";
|
||||
}
|
||||
|
||||
$subjectUser->update($data);
|
||||
@@ -205,4 +225,35 @@ public function updateUserProfile(Request $request, $mobile)
|
||||
'message' => 'user updated'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to find user by mobile or email
|
||||
*/
|
||||
private function findUserByIdentifier($identifier)
|
||||
{
|
||||
return User::where(function($query) use ($identifier) {
|
||||
$this->applyIdentifierCondition($query, $identifier);
|
||||
})->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to apply condition for mobile or email
|
||||
*/
|
||||
private function applyIdentifierCondition($query, $identifier)
|
||||
{
|
||||
if ($this->isMobileNumber($identifier)) {
|
||||
$query->where('mobile', $identifier);
|
||||
} else {
|
||||
$query->where('email', $identifier);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to check if identifier is a mobile number
|
||||
*/
|
||||
private function isMobileNumber($identifier)
|
||||
{
|
||||
// Simple check for mobile number pattern (starts with 09 or +98 or 989)
|
||||
return preg_match('/^(09|\+98|989)\d{9}$/', $identifier);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user