first commit
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\OldPurchase;
|
||||
use App\Models\PackageName;
|
||||
use App\Models\Product;
|
||||
use App\Models\User;
|
||||
use App\Rules\MobileNumber;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AdminController extends Controller
|
||||
{
|
||||
public function users(Request $request)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'per_page' => 'integer',
|
||||
'mobile' => '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']))
|
||||
->paginate($data['per_page'] ?? 30);
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
public function getUserTransactions(Request $request, $mobile)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'per_page' => 'integer'
|
||||
]);
|
||||
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
$transactions = $user->transactions()->paginate($data['per_page'] ?? 30);
|
||||
|
||||
return $transactions;
|
||||
}
|
||||
|
||||
public function getUserStatus(Request $request, $mobile)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'package_name' => 'string'
|
||||
]);
|
||||
|
||||
if (isset($data['package_name']) && !$packageName = PackageName::with('products')->where('name', $data['package_name'])->first()) {
|
||||
return response()->json([
|
||||
'message' => 'package name not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
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()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function getUserStatusV1(Request $request, $mobile)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'package_name' => 'string'
|
||||
]);
|
||||
|
||||
$userMobile = $mobile;
|
||||
if (isset($data['package_name']) && !$packageName = PackageName::with('products')
|
||||
->where('name', $data['package_name'])->first()) {
|
||||
return response()->json([
|
||||
'message' => 'package name not found'
|
||||
], 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()) {
|
||||
return response()->json([
|
||||
'message' => 'user is not paid'
|
||||
], 400);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'user is paid'
|
||||
]);
|
||||
}
|
||||
|
||||
public function subscribeUser(Request $request, $mobile)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'product_id' => 'integer|required'
|
||||
]);
|
||||
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
if (!$product = Product::where('id', $data['product_id'])->first()) {
|
||||
return response()->json([
|
||||
'message' => 'product not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
$product->buy($user);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'subscribed successfuly'
|
||||
]);
|
||||
}
|
||||
|
||||
public function unsubscribeUser(Request $request, $mobile)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'product_id' => 'integer|required'
|
||||
]);
|
||||
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
if (!$product = Product::where('id', $data['product_id'])->first()) {
|
||||
return response()->json([
|
||||
'message' => 'product not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
$user->products()->updateExistingPivot($product, ['expire_at' => now()->format('Y-m-d H:i:s')]);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'unsubscribed successfuly'
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteUser(Request $request, $mobile)
|
||||
{
|
||||
if (!$user = User::where('mobile', $mobile)->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
$user->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'user deleted'
|
||||
]);
|
||||
}
|
||||
|
||||
public function updateUserProfile(Request $request, $mobile)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'first_name' => 'string',
|
||||
'last_name' => 'string',
|
||||
'email' => 'email',
|
||||
'mobile' => [new MobileNumber, 'string'],
|
||||
'avatar' => 'image'
|
||||
]);
|
||||
|
||||
if (!$subjectUser = User::where('mobile', $mobile)->first()) {
|
||||
return response()->json([
|
||||
'message' => 'user not found'
|
||||
], 404);
|
||||
}
|
||||
|
||||
if (isset($data['email'])) {
|
||||
$user = User::where('email', $data['email'])->first();
|
||||
if ($user && $data['email'] != $subjectUser->email) {
|
||||
return response()->json([
|
||||
'message' => 'user with given email exists'
|
||||
], 400);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($data['mobile'])) {
|
||||
$user = User::where('mobile', $data['mobile'])->first();
|
||||
if ($user && $data['mobile'] != $subjectUser->mobile) {
|
||||
return response()->json([
|
||||
'message' => 'user with given email 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";
|
||||
}
|
||||
|
||||
$subjectUser->update($data);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'user updated'
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user