Folders
This commit is contained in:
parent
5f597d4985
commit
d8befb5c1a
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace Sarga\Shop\Contracts;
|
||||
|
||||
interface Folder
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace Sarga\Shop\Contracts;
|
||||
|
||||
interface Wishlist
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?php
|
||||
|
||||
namespace Sarga\Shop\Models;
|
||||
|
||||
class FolderProxy extends \Konekt\Concord\Proxies\ModelProxy
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
];
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue