WIP: billplz api integration testing; DONE: backend for module investment, investment UI for admin
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
<?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', '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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user