From d8befb5c1a266882c28ed2cbfce2ecef01ade391 Mon Sep 17 00:00:00 2001 From: merdan Date: Fri, 3 Mar 2023 17:02:29 +0500 Subject: [PATCH] Folders --- .../Sarga/API/Http/Controllers/Wishlists.php | 44 ++++++++++++++++++- .../Sarga/API/Http/Requests/FolderRequest.php | 27 ++++++++++++ .../Resources/Customer/FolderResource.php | 22 ++++++++++ packages/Sarga/API/Http/routes.php | 4 ++ ...023_03_03_184925_wishlist_folder_table.php | 40 +++++++++++++++++ packages/Sarga/Shop/src/Contracts/Folder.php | 8 ++++ .../Sarga/Shop/src/Contracts/Wishlist.php | 8 ++++ packages/Sarga/Shop/src/Models/Folder.php | 24 ++++++++++ .../Sarga/Shop/src/Models/FolderProxy.php | 8 ++++ packages/Sarga/Shop/src/Models/Wishlist.php | 12 +++++ .../src/Providers/ModuleServiceProvider.php | 2 + .../src/Repositories/FolderRepository.php | 19 ++++++++ 12 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 packages/Sarga/API/Http/Requests/FolderRequest.php create mode 100644 packages/Sarga/API/Http/Resources/Customer/FolderResource.php create mode 100644 packages/Sarga/Admin/src/Database/Migrations/2023_03_03_184925_wishlist_folder_table.php create mode 100644 packages/Sarga/Shop/src/Contracts/Folder.php create mode 100644 packages/Sarga/Shop/src/Contracts/Wishlist.php create mode 100644 packages/Sarga/Shop/src/Models/Folder.php create mode 100644 packages/Sarga/Shop/src/Models/FolderProxy.php create mode 100644 packages/Sarga/Shop/src/Models/Wishlist.php create mode 100644 packages/Sarga/Shop/src/Repositories/FolderRepository.php diff --git a/packages/Sarga/API/Http/Controllers/Wishlists.php b/packages/Sarga/API/Http/Controllers/Wishlists.php index f10ddeb81..e04e4c405 100644 --- a/packages/Sarga/API/Http/Controllers/Wishlists.php +++ b/packages/Sarga/API/Http/Controllers/Wishlists.php @@ -3,8 +3,11 @@ namespace Sarga\API\Http\Controllers; use Illuminate\Http\Request; +use Sarga\API\Http\Requests\FolderRequest; use Sarga\API\Http\Resources\Checkout\CartResource; +use Sarga\API\Http\Resources\Customer\FolderResource; use Sarga\API\Http\Resources\Customer\WishListResource; +use Sarga\Shop\Repositories\FolderRepository; use Sarga\Shop\Repositories\ProductRepository; use Webkul\Checkout\Facades\Cart; use Webkul\Product\Repositories\ProductFlatRepository; @@ -60,7 +63,8 @@ class Wishlists extends WishlistController 'channel_id' => core()->getCurrentChannel()->id, 'product_id' => $id, 'customer_id' => $customer->id, - 'price' => $product->min_price ?? $product->price + 'price' => $product->min_price ?? $product->price, + 'folder_id' => $request->folder_id ]); return response([ @@ -109,4 +113,42 @@ class Wishlists extends WishlistController 'message' => __('rest-api::app.wishlist.option-missing'), ], 400); } + + public function folders(FolderRepository $folderRepository){ + $customer = request()->user(); + return FolderResource::collection($folderRepository->findWhere(['customer_id' => $customer->id])); + } + + public function createFolder(FolderRequest $request) + { + $folderRepo = app(FolderRepository::class); + + if($folder = $folderRepo->create(['name' => $request->name, 'customer_id' => $request->user()->id])){ + return FolderResource::make($folder); + } + + return response(['message' => 'Folder creation failed'],400); + } + + public function deleteFolder(Request $request) + { + $folderRepo = app(FolderRepository::class); + + if($folderRepo->deleteWhere(['folder_id' => $request->folder_id, 'customer_id' => $request->user()->id])){ + return response(['message' => 'Folder deletion successful'],200); + } + + return response(['message' => 'Folder deletion failed'],400); + } + + public function updateFolder(Request $request,$id) + { + $folderRepo = app(FolderRepository::class); + if($folder = $folderRepo->update($request->all(), $id)){ + return FolderResource::make($folder); + } + return response(['message' => 'Folder update failed'],400); + } + + } \ No newline at end of file diff --git a/packages/Sarga/API/Http/Requests/FolderRequest.php b/packages/Sarga/API/Http/Requests/FolderRequest.php new file mode 100644 index 000000000..f1f71d8cd --- /dev/null +++ b/packages/Sarga/API/Http/Requests/FolderRequest.php @@ -0,0 +1,27 @@ + 'required' + ]; + } +} \ No newline at end of file diff --git a/packages/Sarga/API/Http/Resources/Customer/FolderResource.php b/packages/Sarga/API/Http/Resources/Customer/FolderResource.php new file mode 100644 index 000000000..7929ed0f2 --- /dev/null +++ b/packages/Sarga/API/Http/Resources/Customer/FolderResource.php @@ -0,0 +1,22 @@ + $this->id, + 'name' => $this->name, + 'items' => WishlistResource::collection($this->wishlist) + + ]; + } +} \ No newline at end of file diff --git a/packages/Sarga/API/Http/routes.php b/packages/Sarga/API/Http/routes.php index 5c2aa39d9..1cc2e1613 100644 --- a/packages/Sarga/API/Http/routes.php +++ b/packages/Sarga/API/Http/routes.php @@ -91,6 +91,10 @@ Route::group(['prefix' => 'api'], function () { Route::get('wishlist', [Wishlists::class, 'index']); Route::post('wishlist/{id}', [Wishlists::class, 'addOrRemove']); Route::post('wishlist/{id}/move-to-cart', [Wishlists::class, 'moveToCart']); + Route::get('folders',[Wishlists::class, 'folders']); + Route::post('folder',[Wishlists::class, 'createFolder']); + Route::put('folder',[Wishlists::class, 'updateFolder']); + Route::delete('folder',[Wishlists::class, 'deleteFolder']); /** * Recipients */ diff --git a/packages/Sarga/Admin/src/Database/Migrations/2023_03_03_184925_wishlist_folder_table.php b/packages/Sarga/Admin/src/Database/Migrations/2023_03_03_184925_wishlist_folder_table.php new file mode 100644 index 000000000..f7d39517f --- /dev/null +++ b/packages/Sarga/Admin/src/Database/Migrations/2023_03_03_184925_wishlist_folder_table.php @@ -0,0 +1,40 @@ +increments('id'); + $table->integer('customer_id')->unsigned(); + $table->foreign('customer_id')->references('id')->on('customers'); + $table->text('name'); + + }); + + Schema::table('wishlist', function (Blueprint $table) { + $table->integer('folder_id')->nullable()->unsigned(); + $table->foreign('folder_id')->references('id')->on('wishlist_folder')->onDelete('cascade'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('wishlist_folder'); + } +} diff --git a/packages/Sarga/Shop/src/Contracts/Folder.php b/packages/Sarga/Shop/src/Contracts/Folder.php new file mode 100644 index 000000000..b9aef0b1c --- /dev/null +++ b/packages/Sarga/Shop/src/Contracts/Folder.php @@ -0,0 +1,8 @@ +belongsTo(CustomerProxy::modelClass()); + } + + public function wishlist() : HasMany { + return $this->hasMany(WishlistProxy::modelClass()); + } +} \ No newline at end of file diff --git a/packages/Sarga/Shop/src/Models/FolderProxy.php b/packages/Sarga/Shop/src/Models/FolderProxy.php new file mode 100644 index 000000000..b79ef1d60 --- /dev/null +++ b/packages/Sarga/Shop/src/Models/FolderProxy.php @@ -0,0 +1,8 @@ +belongsTo(FolderProxy::modelClass()); + } +} \ No newline at end of file diff --git a/packages/Sarga/Shop/src/Providers/ModuleServiceProvider.php b/packages/Sarga/Shop/src/Providers/ModuleServiceProvider.php index a5acfa955..60060dc87 100644 --- a/packages/Sarga/Shop/src/Providers/ModuleServiceProvider.php +++ b/packages/Sarga/Shop/src/Providers/ModuleServiceProvider.php @@ -14,5 +14,7 @@ class ModuleServiceProvider extends CoreModuleServiceProvider \Sarga\Shop\Models\Order::class, \Sarga\Shop\Models\Category::class, \Sarga\Shop\Models\Notification::class, + \Sarga\Shop\Models\Folder::class, + \Sarga\Shop\Models\Wishlist::class, ]; } \ No newline at end of file diff --git a/packages/Sarga/Shop/src/Repositories/FolderRepository.php b/packages/Sarga/Shop/src/Repositories/FolderRepository.php new file mode 100644 index 000000000..7dda48e01 --- /dev/null +++ b/packages/Sarga/Shop/src/Repositories/FolderRepository.php @@ -0,0 +1,19 @@ +