first commit

This commit is contained in:
2025-09-10 15:28:46 +03:30
commit 00edec179a
204 changed files with 21024 additions and 0 deletions
+208
View File
@@ -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'
]);
}
}