authorize('viewAny', InvestmentLimitProfile::class); $query = UserLimitProfile::query() ->with(['user:id,name,email', 'profile']) ->orderByDesc('effective_date'); if ($userId = $request->query('user_id')) { $query->where('user_id', $userId); } if ($request->boolean('active_only')) { $query->active(); } $assignments = $query->paginate(min((int) $request->get('per_page', 10), 1000)); return response()->json([ 'success' => true, 'data' => UserLimitProfileResource::collection($assignments->items()), 'pagination' => [ 'current_page' => $assignments->currentPage(), 'per_page' => $assignments->perPage(), 'total' => $assignments->total(), 'last_page' => $assignments->lastPage(), 'from' => $assignments->firstItem(), 'to' => $assignments->lastItem(), 'has_more_pages' => $assignments->hasMorePages(), ], 'message' => 'Tugasan profil had berjaya dimuatkan', ]); } public function store(AssignUserLimitProfileRequest $request): JsonResponse { $this->authorize('create', InvestmentLimitProfile::class); $validated = $request->validated(); $assignment = $this->limitService->assignProfileToUser( $validated['user_id'], $validated['profile_id'], $validated['effective_date'], ); return response()->json([ 'success' => true, 'data' => new UserLimitProfileResource($assignment), 'message' => 'Profil had berjaya ditugaskan kepada ahli', ], 201); } }