From 060d16851ca7fe138e445ea4ff1279fb780888b3 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Tue, 10 Sep 2024 01:19:58 +0500 Subject: [PATCH] add apis --- .../Controllers/BaseAppEnumController.php | 28 +++ .../Branch/Controllers/BranchController.php | 35 +++ .../Controllers/LoanOrderController.php | 4 +- .../Requests/LoanOrderStoreRequest.php | 228 +++++++++++++++--- .../Controllers/LoanTypeController.php | 20 ++ .../Controllers/ProvinceController.php | 35 +++ routes/api.php | 15 +- 7 files changed, 326 insertions(+), 39 deletions(-) create mode 100644 app/Modules/BaseAppEnum/Controllers/BaseAppEnumController.php create mode 100644 app/Modules/Branch/Controllers/BranchController.php create mode 100644 app/Modules/LoanType/Controllers/LoanTypeController.php create mode 100644 app/Modules/Province/Controllers/ProvinceController.php diff --git a/app/Modules/BaseAppEnum/Controllers/BaseAppEnumController.php b/app/Modules/BaseAppEnum/Controllers/BaseAppEnumController.php new file mode 100644 index 0000000..8e0dd29 --- /dev/null +++ b/app/Modules/BaseAppEnum/Controllers/BaseAppEnumController.php @@ -0,0 +1,28 @@ + LoanTypeRepo::values(), + 'regions' => RegionRepo::values(), + 'educations' => EducationRepo::values(), + 'marriage_statuses' => MarriageRepo::values(), + 'passport_series' => PassportRepo::values(), + ]; + } +} diff --git a/app/Modules/Branch/Controllers/BranchController.php b/app/Modules/Branch/Controllers/BranchController.php new file mode 100644 index 0000000..29c3627 --- /dev/null +++ b/app/Modules/Branch/Controllers/BranchController.php @@ -0,0 +1,35 @@ +validate([ + 'groupBy' => ['nullable', 'string', 'in:region'], + ]); + + $branches = Branch::query() + ->where('active', true) + ->get() + ->map(fn ($branch) => [ + 'id' => $branch->id, + 'name' => $branch->name, + 'region' => $branch->region, + ]); + + if ($request->filled('groupBy')) { + $branches = $branches->groupBy('region'); + } + + return response()->json($branches); + } +} diff --git a/app/Modules/LoanOrder/Controllers/LoanOrderController.php b/app/Modules/LoanOrder/Controllers/LoanOrderController.php index 0cfbcb1..d57e225 100644 --- a/app/Modules/LoanOrder/Controllers/LoanOrderController.php +++ b/app/Modules/LoanOrder/Controllers/LoanOrderController.php @@ -11,7 +11,7 @@ use Illuminate\Http\Request; class LoanOrderController extends Controller { /** - * Display a listing of the resource. + * LIST* Loan orders. */ public function index(Request $request) { @@ -21,7 +21,7 @@ class LoanOrderController extends Controller } /** - * Store a newly created resource in storage. + * SAVE* Loan order. */ public function store(LoanOrderStoreRequest $request): void { diff --git a/app/Modules/LoanOrder/Controllers/Requests/LoanOrderStoreRequest.php b/app/Modules/LoanOrder/Controllers/Requests/LoanOrderStoreRequest.php index e99bad0..e2640ee 100644 --- a/app/Modules/LoanOrder/Controllers/Requests/LoanOrderStoreRequest.php +++ b/app/Modules/LoanOrder/Controllers/Requests/LoanOrderStoreRequest.php @@ -2,7 +2,10 @@ namespace App\Modules\LoanOrder\Controllers\Requests; -use App\Repos\Order\Loan\LoanTypeRepo; +use App\Repos\System\Settings\Legal\EducationRepo; +use App\Repos\System\Settings\Legal\MarriageRepo; +use App\Repos\System\Settings\Legal\PassportRepo; +use App\Repos\System\Settings\Location\RegionRepo; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -17,43 +20,198 @@ class LoanOrderStoreRequest extends FormRequest { return [ /** - * Loan type - * - * @var int + * Loan type id (https://online.tbbank.gov.tm/api/loan-types) */ - 'loan_type' => ['required', 'int', Rule::in(LoanTypeRepo::values())], + 'loan_type' => ['required', 'integer', Rule::exists('loan_types', 'id')], - // "region", + /** + * Region (https://online.tbbank.gov.tm/api/base-app-enums) + */ + 'region' => ['required', 'string', Rule::in(array_keys(RegionRepo::values()))], + + /** + * Branch id (https://online.tbbank.gov.tm/api/branches) + */ + 'branch_id' => ['required', 'integer', Rule::exists('branches', 'id')], + + /** + * Customer name + * + * @example Mahmyt + */ + 'customer_name' => ['required', 'string', 'max:255'], + + /** + * Customer surname + * + * @example Allaberdiyev + */ + 'customer_surname' => ['required', 'string', 'max:255'], + + /** + * Customer patronic name + * + * @example Öwezowiç + */ + 'customer_patronic_name' => ['nullable', 'string', 'max:255'], + + /** + * Date of birth + * + * @example 2000 + */ + 'born_at' => ['required', 'before_or_equal:today'], + + /** + * Education (https://online.tbbank.gov.tm/api/base-app-enums) + */ + 'education' => ['required', 'string', Rule::in(array_keys(EducationRepo::values()))], + + /** + * Marriage status (https://online.tbbank.gov.tm/api/base-app-enums) + */ + 'marriage_status' => ['required', 'string', Rule::in(array_keys(MarriageRepo::values()))], + + /** + * Passport address + * + * @example Kemine 100/190 + */ + 'passport_address' => ['required', 'string', 'max:255'], + + /** + * Real address + * + * @example Kemine 100/200 + */ + 'real_address' => ['required', 'string', 'max:255'], + + /** + * Passport serie + */ + 'passport_serie' => ['required', 'string', Rule::in(PassportRepo::values())], + + /** + * Passport number + * + * @example 100999 + */ + 'passport_id' => ['required', 'numeric', 'digits:6'], + + /** + * Passport date of issue + * + * @example 2024-01-10 + */ + 'passport_given_at' => ['required', 'date', 'before_or_equal:today'], + + /** + * Passport given by + * + * @example Ashgabat shaher polisiya tarapyndan + */ + 'passport_given_by' => ['required', 'string', 'max:255'], + + /** + * Born place + * + * @example Ashgabat shaher + */ + 'born_place' => ['required', 'string', 'max:255'], + + /** + * Email + * + * @example mahmyt1206@gmail.com + */ + 'email' => ['nullable', 'email', 'max:255'], + + /** + * Phone number + * + * @example 65999990 + */ + 'phone' => ['required', 'integer', 'between:61000000, 71999999'], + + /** + * Phone number (additional) + * + * @example 61126667 + */ + 'phone_additional' => ['nullable', 'integer', 'between:61000000, 71999999'], + + /** + * Phone number (home) + * + * @example 92-92-92 + */ + 'phone_home' => ['required', 'string', 'max:255'], + + /** + * Region (https://online.tbbank.gov.tm/api/base-app-enums) + */ + 'work_region' => ['required', 'string', Rule::in(array_keys(RegionRepo::values()))], + + /** + * Provinces (https://online.tbbank.gov.tm/api/provinces) + */ + 'work_province_id' => ['required', 'integer', Rule::exists('provinces', 'id')], + + /** + * Work company name + * + * @example WebUglam HJ + */ + 'work_company' => ['required', 'string', 'max:255'], + + /** + * HR department number + * + * @example 707012 + */ + 'work_company_accountant_number' => ['required', 'string', 'max:255'], + + /** + * Work position + * + * @example Bugalter + */ + 'work_position' => ['required', 'string', 'max:255'], + + /** + * Salary + * + * @example 40000 + */ + 'work_salary' => ['required', 'numeric', 'max_digits:8'], + + /** + * Work start date + * + * @example 2024-01-16 + */ + 'work_started_at' => ['required', 'date', 'before_or_equal:today'], + + /** + * Passport (sahypa 1) + */ + 'passport_one' => ['required', 'file', 'max:2048', 'mimes:jpg,png,jpeg'], + + /** + * Pasport (2-3-nji sahypa) + */ + 'passport_two' => ['required', 'file', 'max:2048', 'mimes:jpg,png,jpeg'], + + /** + * Pasport (8-9 sahypa) + */ + 'passport_three' => ['required', 'file', 'max:2048', 'mimes:jpg,png,jpeg'], + + /** + * Pasport (32-nji sahypa) + */ + 'passport_four' => ['required', 'file', 'max:2048', 'mimes:jpg,png,jpeg'], - // "branch_id", - // "customer_name", - // "customer_surname", - // "customer_patronic_name", - // "passport_address", - // "real_address", - // "passport_serie", - // "passport_id", - // "passport_given_at", - // "passport_given_by", - // "born_place", - // "born_at", - // "email", - // "phone", - // "phone_additional", - // "phone_home", - // "work_region", - // "work_province_id", - // "work_company", - // "work_company_accountant_number", - // "work_started_at", - // "work_salary", - // "work_position", - // "education", - // "marriage_status", - // "passport_one", - // "passport_two", - // "passport_three", - // "passport_four", ]; } } diff --git a/app/Modules/LoanType/Controllers/LoanTypeController.php b/app/Modules/LoanType/Controllers/LoanTypeController.php new file mode 100644 index 0000000..795dfd7 --- /dev/null +++ b/app/Modules/LoanType/Controllers/LoanTypeController.php @@ -0,0 +1,20 @@ +json(LoanType::get(['id', 'name'])->map(fn ($loanOrder) => [ + 'id' => $loanOrder->id, + 'name' => $loanOrder->name, + ])); + } +} diff --git a/app/Modules/Province/Controllers/ProvinceController.php b/app/Modules/Province/Controllers/ProvinceController.php new file mode 100644 index 0000000..402782d --- /dev/null +++ b/app/Modules/Province/Controllers/ProvinceController.php @@ -0,0 +1,35 @@ +validate([ + 'groupBy' => ['nullable', 'string', 'in:region'], + ]); + + $provinces = Province::query() + ->where('active', true) + ->get() + ->map(fn ($branch) => [ + 'id' => $branch->id, + 'name' => $branch->name, + 'region' => $branch->region, + ]); + + if ($request->filled('groupBy')) { + $provinces = $provinces->groupBy('region'); + } + + return response()->json($provinces); + } +} diff --git a/routes/api.php b/routes/api.php index 8cf88ec..540742f 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,7 +2,11 @@ use App\Http\Controllers\ProfileController; use App\Modules\ApiAuth\Controllers\ApiAuthController; +use App\Modules\BaseAppEnum\Controllers\BaseAppEnumController; +use App\Modules\Branch\Controllers\BranchController; use App\Modules\LoanOrder\Controllers\LoanOrderController; +use App\Modules\LoanType\Controllers\LoanTypeController; +use App\Modules\Province\Controllers\ProvinceController; use Illuminate\Support\Facades\Route; /* @@ -23,13 +27,20 @@ Route::post('auth/verify', [ApiAuthController::class, 'verify']); Route::middleware('auth:sanctum') ->post('auth/delete-user', [ApiAuthController::class, 'delete']); +// Branches... +Route::get('branches', [BranchController::class, 'index']); + +// Provinces... +Route::get('provinces', [ProvinceController::class, 'index']); + +// Base enums +Route::get('base-app-enums', [BaseAppEnumController::class, 'index']); + Route::middleware(['auth:sanctum', 'not_banned'])->group(function () { // Profile... Route::get('profile', [ProfileController::class, 'index']); Route::post('profile', [ProfileController::class, 'store']); - Route::get('loan-types', [LoanTypeController::class, 'index']); - // Loan order... Route::get('loan-order', [LoanOrderController::class, 'index']); Route::get('loan-order/{loanOrder}', [LoanOrderController::class, 'show']);