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

<?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));
}
}