loans api done

This commit is contained in:
2025-06-11 16:06:01 +05:00
parent 8acc40d53f
commit 10361e9422
5 changed files with 105 additions and 16 deletions

View File

@@ -63,7 +63,7 @@ class LoanPaidOffLetterOrderStoreRequest extends FormRequest
/** /**
* Date of birth * Date of birth
* *
* @example 2000 * @example 10.10.2000
*/ */
'born_at' => ['required', 'before_or_equal:today'], 'born_at' => ['required', 'before_or_equal:today'],

View File

@@ -7,11 +7,14 @@ use App\Http\Controllers\Api\LoanPaidOffLetterOrder\Resources\LoanPaidOffLetterO
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Order\Loan\LoanPaidOffLetterOrder; use App\Models\Order\Loan\LoanPaidOffLetterOrder;
use App\Repos\Order\OrderRepo; use App\Repos\Order\OrderRepo;
use App\Repos\System\Settings\Legal\PassportRepo;
use App\Repos\System\Settings\Location\RegionRepo;
use Dedoc\Scramble\Attributes\Group; use Dedoc\Scramble\Attributes\Group;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
#[Group('Sargytlar - Karz - Karzyň ýapylandygy barada güwanama')] #[Group('Sargytlar - Karz - Karzyň ýapylandygy barada güwanama')]
class LoanPaidOffLetterOrderController extends Controller class LoanPaidOffLetterOrderController extends Controller
@@ -41,8 +44,6 @@ class LoanPaidOffLetterOrderController extends Controller
...$data, ...$data,
...[ ...[
'user_id' => auth()->id(), 'user_id' => auth()->id(),
'status' => OrderRepo::PENDING,
'source' => OrderRepo::MOBILE_DEVICE,
], ],
]); ]);
@@ -56,13 +57,13 @@ class LoanPaidOffLetterOrderController extends Controller
* *
* ID ugradyp alyan route -da. * ID ugradyp alyan route -da.
*/ */
public function show(LoanPaidOffLetterOrder $loanPaidOffLetter): JsonResponse public function show(LoanPaidOffLetterOrder $order)
{ {
if ($loanPaidOffLetter->user_id != auth()->id()) { if ($order->user_id != auth()->id()) {
return response()->json(status: 403); return response()->json(status: 403);
} }
return response()->json(new LoanPaidOffLetterOrderIndexResource($loanPaidOffLetter)); return response()->json(new LoanPaidOffLetterOrderIndexResource($order));
} }
/** /**
@@ -70,12 +71,98 @@ class LoanPaidOffLetterOrderController extends Controller
* *
* ID ugradyp `route`-da update edip bilyan. Base App Enum-lardan peydalan. Panelkadan gor. * ID ugradyp `route`-da update edip bilyan. Base App Enum-lardan peydalan. Panelkadan gor.
*/ */
public function update(Request $request, LoanPaidOffLetterOrder $loanPaidOffLetter): JsonResponse public function update(Request $request, LoanPaidOffLetterOrder $order): JsonResponse
{ {
$data = $request->all(); $data = $request->validate([
/**
* Region (https://online.tbbank.gov.tm/api/base-app-enums)
*/
'region' => ['sometimes', 'string', Rule::in(array_keys(RegionRepo::values()))],
Model::unguarded(function () use ($loanPaidOffLetter, $data) { /**
$loanPaidOffLetter->update($data); * Branch id (https://online.tbbank.gov.tm/api/branches)
*/
'branch_id' => ['sometimes', 'integer', Rule::exists('branches', 'id')],
/**
* Customer name
*
* @example Mahmyt
*/
'customer_name' => ['sometimes', 'string', 'max:255'],
/**
* Customer surname
*
* @example Allaberdiyev
*/
'customer_surname' => ['sometimes', 'string', 'max:255'],
/**
* Customer patronic name
*
* @example Öwezowiç
*/
'customer_patronic_name' => ['nullable', 'string', 'max:255'],
/**
* Passport serie
*/
'passport_serie' => ['sometimes', 'string', Rule::in(array_keys(PassportRepo::values()))],
/**
* Passport number
*
* @example 100999
*/
'passport_id' => ['sometimes', 'numeric', 'digits:6'],
/**
* Date of birth
*
* @example 10.10.2000
*/
'born_at' => ['sometimes', 'before_or_equal:today'],
/**
* Phone number
*
* @example 65999990
*/
'phone' => ['sometimes', 'integer', 'between:61000000, 71999999'],
/**
* Contract number
*
* @example 3242358989234
*/
'loan_contract_number' => ['sometimes', 'string', 'max:255'],
/**
* Contract date
*
* @example 20.34.23
*/
'loan_contract_date' => ['sometimes', 'string', 'max:255'],
/**
* Loan amount
*
* @example 20000
*/
'loan_amount' => ['sometimes', 'string', 'max:255'],
/**
* Loan reason
*
* @example Puldan pul yasamak ucin
*/
'loan_reason' => ['sometimes', 'string', 'max:255'],
]);
Model::unguarded(function () use ($order, $data) {
info([$data]);
$order->update($data);
}); });
return response()->json([ return response()->json([
@@ -86,13 +173,13 @@ class LoanPaidOffLetterOrderController extends Controller
/** /**
* DELETE* * DELETE*
*/ */
public function destroy(LoanPaidOffLetterOrder $loanPaidOffLetter): JsonResponse public function destroy(LoanPaidOffLetterOrder $order): JsonResponse
{ {
if ($loanPaidOffLetter->user_id === auth()->id()) { if ($order->user_id !== auth()->id()) {
return response()->json(status: 403); return response()->json(status: 403);
} }
$loanPaidOffLetter->delete(); $order->delete();
return response()->json(); return response()->json();
} }

View File

@@ -39,6 +39,8 @@ class LoanPaidOffLetterOrder extends Model
use HasFactory; use HasFactory;
use SoftDeletes; use SoftDeletes;
protected $table = 'loan_paid_off_letter_orders';
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
* *

View File

@@ -159,7 +159,7 @@ class LoanOrderController extends Controller
*/ */
public function destroy(LoanOrder $loanOrder): JsonResponse public function destroy(LoanOrder $loanOrder): JsonResponse
{ {
if ($loanOrder->user_id === auth()->id()) { if ($loanOrder->user_id != auth()->id()) {
return response()->json(status: 403); return response()->json(status: 403);
} }

View File

@@ -81,12 +81,12 @@ Route::middleware(['auth:sanctum', 'not_banned'])->group(function () {
Route::post('loan-remaining-order/{order}', [LoanOrderRemainingOrderController::class, 'update']); Route::post('loan-remaining-order/{order}', [LoanOrderRemainingOrderController::class, 'update']);
Route::delete('loan-remaining-order/{order}', [LoanOrderRemainingOrderController::class, 'destroy']); Route::delete('loan-remaining-order/{order}', [LoanOrderRemainingOrderController::class, 'destroy']);
// Loan paid off letters... // Loan paid off letters... [tested fully]
Route::get('loan-paid-off-letter-orders', [LoanPaidOffLetterOrderController::class, 'index']); Route::get('loan-paid-off-letter-orders', [LoanPaidOffLetterOrderController::class, 'index']);
Route::get('loan-paid-off-letter-orders/{order}', [LoanPaidOffLetterOrderController::class, 'show']); Route::get('loan-paid-off-letter-orders/{order}', [LoanPaidOffLetterOrderController::class, 'show']);
Route::post('loan-paid-off-letter-orders', [LoanPaidOffLetterOrderController::class, 'store']); Route::post('loan-paid-off-letter-orders', [LoanPaidOffLetterOrderController::class, 'store']);
Route::post('loan-paid-off-letter-orders/{order}', [LoanPaidOffLetterOrderController::class, 'update']); Route::post('loan-paid-off-letter-orders/{order}', [LoanPaidOffLetterOrderController::class, 'update']);
Route::delete('loan-paid-off-letter-orders/{order}', [LoanPaidOffLetterOrderController::class, 'destory']); Route::delete('loan-paid-off-letter-orders/{order}', [LoanPaidOffLetterOrderController::class, 'destroy']);
// Alerts... // Alerts...
Route::get('alerts', [AlertController::class, 'index']); Route::get('alerts', [AlertController::class, 'index']);