You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\WechatUser;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class WechatUserController extends Controller
|
|
{
|
|
public function index(Request $request): JsonResponse
|
|
{
|
|
$pageSize = max(1, min(100, (int) $request->input('page_size', 20)));
|
|
|
|
$query = WechatUser::query()->orderByDesc('id');
|
|
|
|
if ($request->filled('keyword')) {
|
|
$keyword = trim((string) $request->input('keyword'));
|
|
$query->where(function ($q) use ($keyword) {
|
|
$q->where('phone', 'like', "%{$keyword}%")
|
|
->orWhere('nickname', 'like', "%{$keyword}%")
|
|
->orWhere('real_name', 'like', "%{$keyword}%");
|
|
});
|
|
}
|
|
|
|
$user = $request->user();
|
|
if (! $user->isSuperAdmin()) {
|
|
$venueIds = $user->venues()->pluck('venues.id');
|
|
$query->whereExists(function ($sub) use ($venueIds) {
|
|
$sub->selectRaw('1')
|
|
->from('reservations')
|
|
->whereNull('reservations.deleted_at')
|
|
->whereColumn('reservations.wechat_user_id', 'wechat_users.id')
|
|
->whereIn('reservations.venue_id', $venueIds);
|
|
});
|
|
}
|
|
|
|
return response()->json($query->paginate($pageSize));
|
|
}
|
|
}
|