This commit is contained in:
merdan 2023-03-03 17:02:29 +05:00
parent 5f597d4985
commit d8befb5c1a
12 changed files with 217 additions and 1 deletions

View File

@ -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);
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace Sarga\API\Http\Requests;
class FolderRequest extends \Illuminate\Foundation\Http\FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(): array{
return [
'name' => 'required'
];
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace Sarga\API\Http\Resources\Customer;
class FolderResource extends \Illuminate\Http\Resources\Json\JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'items' => WishlistResource::collection($this->wishlist)
];
}
}

View File

@ -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
*/

View File

@ -0,0 +1,40 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateWishlistFolderTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('wishlist_folder', function (Blueprint $table) {
$table->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');
}
}

View File

@ -0,0 +1,8 @@
<?php
namespace Sarga\Shop\Contracts;
interface Folder
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace Sarga\Shop\Contracts;
interface Wishlist
{
}

View File

@ -0,0 +1,24 @@
<?php
namespace Sarga\Shop\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Sarga\Shop\Contracts\Folder as FolderContract;
use Webkul\Customer\Models\CustomerProxy;
use Webkul\Customer\Models\WishlistProxy;
class Folder extends Model implements FolderContract
{
protected $table = 'wishlist_folder';
protected $fillable = ['name','customer_id'];
public function customer() : BelongsTo{
return $this->belongsTo(CustomerProxy::modelClass());
}
public function wishlist() : HasMany {
return $this->hasMany(WishlistProxy::modelClass());
}
}

View File

@ -0,0 +1,8 @@
<?php
namespace Sarga\Shop\Models;
class FolderProxy extends \Konekt\Concord\Proxies\ModelProxy
{
}

View File

@ -0,0 +1,12 @@
<?php
namespace Sarga\Shop\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Webkul\Customer\Models\Wishlist as BagistoWishlist;
use Sarga\Shop\Contracts\Wishlist as WishlistContract;
class Wishlist extends BagistoWishlist implements WishlistContract
{
public function folder() : BelongsTo{
return $this->belongsTo(FolderProxy::modelClass());
}
}

View File

@ -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,
];
}

View File

@ -0,0 +1,19 @@
<?php
namespace Sarga\Shop\Repositories;
use Sarga\Shop\Contracts\Folder;
use Webkul\Core\Eloquent\Repository;
class FolderRepository extends Repository
{
/**
* Specify model class name.
*
* @return string
*/
public function model(): string
{
return Folder::class;
}
}