76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Investment\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Modules\Investment\Entities\InvestmentLimitProfile;
|
|
use Modules\Investment\Entities\UserLimitProfile;
|
|
use Modules\Investment\Http\Requests\AssignUserLimitProfileRequest;
|
|
use Modules\Investment\Services\InvestmentLimitService;
|
|
use Modules\Investment\Transformers\UserLimitProfileResource;
|
|
|
|
class UserLimitProfileController extends Controller
|
|
{
|
|
use AuthorizesRequests;
|
|
|
|
public function __construct(
|
|
protected InvestmentLimitService $limitService,
|
|
) {}
|
|
|
|
public function index(Request $request): JsonResponse
|
|
{
|
|
$this->authorize('viewAny', InvestmentLimitProfile::class);
|
|
|
|
$query = UserLimitProfile::query()
|
|
->with(['user:id,name,email,ic_number', '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);
|
|
}
|
|
}
|