feat: identifier for admin cotroller
This commit is contained in:
@@ -18,23 +18,25 @@ public function users(Request $request)
|
|||||||
$data = $request->validate([
|
$data = $request->validate([
|
||||||
'per_page' => 'integer',
|
'per_page' => 'integer',
|
||||||
'mobile' => 'string',
|
'mobile' => 'string',
|
||||||
|
'email' => 'string',
|
||||||
'package_name' => 'string',
|
'package_name' => 'string',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$users = User::when(isset($data['package_name']), fn ($q) => $q->whereHas('packageNames', fn ($q2) => $q2->where('name', $data['package_name'])))
|
$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['mobile']), fn ($q) => $q->where('mobile', $data['mobile']))
|
||||||
|
->when(isset($data['email']), fn ($q) => $q->where('email', $data['email']))
|
||||||
->paginate($data['per_page'] ?? 30);
|
->paginate($data['per_page'] ?? 30);
|
||||||
|
|
||||||
return $users;
|
return $users;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserTransactions(Request $request, $mobile)
|
public function getUserTransactions(Request $request, $identifier)
|
||||||
{
|
{
|
||||||
$data = $request->validate([
|
$data = $request->validate([
|
||||||
'per_page' => 'integer'
|
'per_page' => 'integer'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'user not found'
|
'message' => 'user not found'
|
||||||
], 404);
|
], 404);
|
||||||
@@ -45,7 +47,7 @@ public function getUserTransactions(Request $request, $mobile)
|
|||||||
return $transactions;
|
return $transactions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserStatus(Request $request, $mobile)
|
public function getUserStatus(Request $request, $identifier)
|
||||||
{
|
{
|
||||||
$data = $request->validate([
|
$data = $request->validate([
|
||||||
'package_name' => 'string'
|
'package_name' => 'string'
|
||||||
@@ -60,7 +62,9 @@ public function getUserStatus(Request $request, $mobile)
|
|||||||
if (!$user = User::with([
|
if (!$user = User::with([
|
||||||
'products' => fn ($q) => $q->when(isset($data['package_name']), fn ($q1) => $q1->where('package_name_id', $packageName->id)),
|
'products' => fn ($q) => $q->when(isset($data['package_name']), fn ($q1) => $q1->where('package_name_id', $packageName->id)),
|
||||||
'products.packageName'
|
'products.packageName'
|
||||||
])->where('mobile', $mobile)->first()) {
|
])->where(function($query) use ($identifier) {
|
||||||
|
$this->applyIdentifierCondition($query, $identifier);
|
||||||
|
})->first()) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'user not found'
|
'message' => 'user not found'
|
||||||
], 404);
|
], 404);
|
||||||
@@ -69,13 +73,14 @@ public function getUserStatus(Request $request, $mobile)
|
|||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserStatusV1(Request $request, $mobile)
|
public function getUserStatusV1(Request $request, $identifier)
|
||||||
{
|
{
|
||||||
$data = $request->validate([
|
$data = $request->validate([
|
||||||
'package_name' => 'string'
|
'package_name' => 'string'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$userMobile = $mobile;
|
$userIdentifier = $identifier;
|
||||||
|
|
||||||
if (isset($data['package_name']) && !$packageName = PackageName::with('products')
|
if (isset($data['package_name']) && !$packageName = PackageName::with('products')
|
||||||
->where('name', $data['package_name'])->first()) {
|
->where('name', $data['package_name'])->first()) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@@ -83,8 +88,23 @@ public function getUserStatusV1(Request $request, $mobile)
|
|||||||
], 404);
|
], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!OldPurchase::when(isset($data['package_name']), fn ($q) => $q->where('package_name', $data['package_name']))
|
// For OldPurchase, we need to determine if identifier is mobile or email
|
||||||
->where('mobile', preg_replace('/09/', '989', $userMobile, 1))->first()) {
|
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([
|
return response()->json([
|
||||||
'message' => 'user is not paid'
|
'message' => 'user is not paid'
|
||||||
], 400);
|
], 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([
|
$data = $request->validate([
|
||||||
'product_id' => 'integer|required'
|
'product_id' => 'integer|required'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'user not found'
|
'message' => 'user not found'
|
||||||
], 404);
|
], 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([
|
$data = $request->validate([
|
||||||
'product_id' => 'integer|required'
|
'product_id' => 'integer|required'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
if (!$user = $this->findUserByIdentifier($identifier)) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'user not found'
|
'message' => 'user not found'
|
||||||
], 404);
|
], 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([
|
return response()->json([
|
||||||
'message' => 'user not found'
|
'message' => 'user not found'
|
||||||
], 404);
|
], 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([
|
$data = $request->validate([
|
||||||
'first_name' => 'string',
|
'first_name' => 'string',
|
||||||
@@ -170,7 +190,7 @@ public function updateUserProfile(Request $request, $mobile)
|
|||||||
'avatar' => 'image'
|
'avatar' => 'image'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$subjectUser = User::where('mobile', $mobile)->first()) {
|
if (!$subjectUser = $this->findUserByIdentifier($identifier)) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'user not found'
|
'message' => 'user not found'
|
||||||
], 404);
|
], 404);
|
||||||
@@ -189,14 +209,14 @@ public function updateUserProfile(Request $request, $mobile)
|
|||||||
$user = User::where('mobile', $data['mobile'])->first();
|
$user = User::where('mobile', $data['mobile'])->first();
|
||||||
if ($user && $data['mobile'] != $subjectUser->mobile) {
|
if ($user && $data['mobile'] != $subjectUser->mobile) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'user with given email exists'
|
'message' => 'user with given mobile exists'
|
||||||
], 400);
|
], 400);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($data['avatar'])) {
|
if (isset($data['avatar'])) {
|
||||||
Storage::disk('public')->put("avatars/$user->uuid.png", file_get_contents($data['avatar']->path()));
|
Storage::disk('public')->put("avatars/$subjectUser->uuid.png", file_get_contents($data['avatar']->path()));
|
||||||
$data['avatar'] = "storage/avatars/$user->uuid.png";
|
$data['avatar'] = "storage/avatars/$subjectUser->uuid.png";
|
||||||
}
|
}
|
||||||
|
|
||||||
$subjectUser->update($data);
|
$subjectUser->update($data);
|
||||||
@@ -205,4 +225,35 @@ public function updateUserProfile(Request $request, $mobile)
|
|||||||
'message' => 'user updated'
|
'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