diff --git a/app/Http/Controllers/Api/ApiBaseController.php b/app/Http/Controllers/Api/ApiBaseController.php new file mode 100644 index 0000000..c3dce87 --- /dev/null +++ b/app/Http/Controllers/Api/ApiBaseController.php @@ -0,0 +1,14 @@ + 'required|in:tm,ru,en']; + } +} diff --git a/app/Http/Controllers/Api/ExportController.php b/app/Http/Controllers/Api/ExportController.php new file mode 100644 index 0000000..861587e --- /dev/null +++ b/app/Http/Controllers/Api/ExportController.php @@ -0,0 +1,40 @@ +all(), array_merge([ + 'page' => 'numeric|gt:0', + 'group' => 'required|exists:groups,id', + 'category' => 'exists:categories,id', + 'type' => 'in:internal,external' + ], $this->localeValidationRule())); + if($validator->fails()) { + return response()->json($validator->errors()); + } + + $exports = Export::query() + ->where('group_id', request('group')) + ->where('locale', request('locale')) + // ->when(request('title'), fn ($q) => $q->whereIn('id', $searchIds)) + ->when(request('category'), fn ($q) => $q->where('category_id', request('category'))) + ->when(request('unit'), fn ($q) => $q->where('unit', request('unit'))) + ->when(request('currency'), fn ($q) => $q->where('currency', request('currency'))) + ->when(request('payment'), fn ($q) => $q->where('payment', request('payment'))) + ->when(request('send'), fn ($q) => $q->where('send', request('send'))) + ->when(request('type'), fn ($q) => $q->where('type', request('type'))); + + return response()->json([ + 'exports' => ExportResource::collection($exports->simplePaginate(5)), + ], 200); + } +} diff --git a/app/Http/Controllers/Api/FiltersController.php b/app/Http/Controllers/Api/FiltersController.php new file mode 100644 index 0000000..eb6ab81 --- /dev/null +++ b/app/Http/Controllers/Api/FiltersController.php @@ -0,0 +1,61 @@ +only(['type', 'locale']); + $validator = Validator::make($data, array_merge([ + 'type' => 'required|in:export,import' + ], $this->localeValidationRule())); + + if ($validator->fails()) { + return response()->json($validator->errors(), 400); + } + + return GroupResource::collection(Group::whereType($data['type'])->orderBy('is_default', 'desc')->get()); + } + + public function categories(Request $request) + { + $validator = Validator::make($request->only('locale'), $this->localeValidationRule()); + if ($validator->fails()) { + return response()->json($validator->errors(), 400); + } + + return CategoryApiResource::collection(Category::all()); + } + + public function otherFilters(Request $request) + { + $validator = Validator::make($request->all(), array_merge([ + 'model' => 'required|in:Export,Import', + 'group' => 'required|exists:groups,id', + 'filter' => 'required|in:unit,currency,payment,send,country' + + ], $this->localeValidationRule())); + + if ($validator->fails()) { + return response()->json($validator->errors(), 400); + } + + $modelClass = '\\App\\Models\\' . $request['model']; + + return $modelClass::selectRaw(request('filter')) + ->where('group_id', request('group')) + ->where('locale', request('locale')) + ->distinct() + ->pluck(request('filter')); + + } +} diff --git a/app/Http/Controllers/Api/ImportController.php b/app/Http/Controllers/Api/ImportController.php new file mode 100644 index 0000000..3f03ed8 --- /dev/null +++ b/app/Http/Controllers/Api/ImportController.php @@ -0,0 +1,37 @@ +all(), array_merge([ + 'page' => 'numeric|gt:0', + 'group' => 'required|exists:groups,id' + ], $this->localeValidationRule())); + + if ($validator->fails()) { + return response()->json($validator->errors()); + } + + $imports = Import::query() + ->where('group_id', request('group')) + ->where('locale', request('locale')) + // ->when(request('title'), fn ($q) => $q->whereIn('id', $searchIds)) + ->when(request('country'), fn ($q) => $q->where('country', request('country'))) + ->when(request('unit'), fn ($q) => $q->where('unit', request('unit'))) + ->when(request('currency'), fn ($q) => $q->where('currency', request('currency'))); + // ->when(request('registered_at'), fn ($q) => $q->whereDate('registered_at', request('registered_at'))); + + return response()->json([ + 'imports' => ImportResource::collection($imports->simplePaginate(5)), + ], 200); + } +} diff --git a/app/Http/Resources/CategoryApiResource.php b/app/Http/Resources/CategoryApiResource.php new file mode 100644 index 0000000..07732de --- /dev/null +++ b/app/Http/Resources/CategoryApiResource.php @@ -0,0 +1,22 @@ + $this->id, + 'title' => $this->getTranslation('title', $request->get('locale')), + ]; + } +} diff --git a/app/Http/Resources/GroupResource.php b/app/Http/Resources/GroupResource.php new file mode 100644 index 0000000..b299dd4 --- /dev/null +++ b/app/Http/Resources/GroupResource.php @@ -0,0 +1,28 @@ +get('locale'); + + return [ + 'id' => $this->id, + 'title' => $this->getTranslation('title', $locale), + 'type' => $this->type, + 'file' => $this->getTranslation('file', $locale), + 'is_default' => $this->is_default, + 'hashid' => $this->hashid + ]; + } +} diff --git a/routes/api.php b/routes/api.php index 35f62d5..67f5834 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,10 +1,10 @@ name('api.imports'); +Route::get('exports', [ExportController::class, 'index'])->name('api.exports'); +Route::get('groups', [FiltersController::class, 'groups']); +Route::get('categories', [FiltersController::class, 'categories']); +Route::get('other-filters', [FiltersController::class, 'otherFilters']); +// Route::post('requests', [RequestController::class, 'store']); // Route::get('lines', [LineController::class, 'index']); // Route::middleware('auth:sanctum')->get('/user', function (Request $request) {