Skip to content
Snippets Groups Projects
Commit aaf12c7e authored by Shizuco's avatar Shizuco
Browse files

feat: compare through cache

parent 0888c67a
No related branches found
No related tags found
1 merge request!2Dctn 494/fix
<?php
namespace App\Nova\Actions;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Collection;
use Laravel\Nova\Actions\Action;
use App\Models\Product;
use Illuminate\Support\Facades\Cache;
use Laravel\Nova\Fields\ActionFields;
use Laravel\Nova\Http\Requests\NovaRequest;
class ChangeValue extends Action
{
use InteractsWithQueue, Queueable;
/**
* Perform the action on the given models.
*
* @param \Laravel\Nova\Fields\ActionFields $fields
* @param \Illuminate\Support\Collection $models
* @return mixed
*/
public function handle(ActionFields $fields, Collection $models)
{
if(!$this->isNotExistSameSKUOnDifferentRetailers($models))
{
return Action::danger('You chose too much products with the same sku!');
}
$compare = Cache::pull('compare');
foreach($models as $model)
{
Product::where('retailer_id', $compare['retailer'])->where('sku', $model['sku'])->update([$compare['field'] => $model[$compare['field']]]);
}
}
/**
* Get the fields available on the action.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function fields(NovaRequest $request)
{
return [];
}
private function isNotExistSameSKUOnDifferentRetailers(Collection $models){
$sku = [];
foreach($models as $model)
{
array_push($sku, $model['sku']);
}
$result = (count($sku) === count(array_unique($sku)));
return ($result) ? true : false;
}
}
......@@ -5,12 +5,12 @@
namespace App\Nova\Actions;
use App\Models\Retailer;
use Auth;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
use Laravel\Nova\Actions\Action;
use DB;
use Auth;
use Laravel\Nova\Fields\ActionFields;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Http\Requests\NovaRequest;
......@@ -23,7 +23,7 @@ class CompareActionChangeValues extends Action
public function handle(ActionFields $fields, Collection $models)
{
DB::table('compare')->insert(['user_id' => Auth::user()->id, 'retailer' => $fields->changeModel, 'field' => $fields->changeField]);
Cache::add('compare', ['user_id' => Auth::user()->id, 'retailer' => $fields->changeModel, 'field' => $fields->changeField]);
}
public function fields(NovaRequest $request)
......
......@@ -3,16 +3,13 @@
namespace App\Nova\Lenses;
use App\Models\Retailer;
use Auth;
use DB;
use Laravel\Nova\Fields\ID;
use App\Models\Product;
use Illuminate\Support\Facades\Cache;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Http\Requests\LensRequest;
use Laravel\Nova\Http\Requests\NovaRequest;
use Laravel\Nova\Lenses\Lens;
use Vyuldashev\NovaMoneyField\Money;
class CompareProduct extends Lens
{
......@@ -21,12 +18,12 @@ class CompareProduct extends Lens
public static function query(LensRequest $request, $query)
{
$compare = DB::table('compare')->where('user_id', Auth::user()->id)->first();
DB::table('compare')->where('user_id', Auth::user()->id)->delete();
self::$comparebelField = $compare->field;
$compare = Cache::get('compare');
if ($compare) {
self::$comparebelField = $compare['field'];
$existFields = Product::where('retailer_id', $compare['retailer'])->pluck('sku')->all();
return $request->withOrdering($request->withFilters(
$query->where('retailer_id', '!=', $compare->retailer)->orderBy('retailer_id', 'DESC')
$query->where('retailer_id', '!=', $compare['retailer'])->whereIn('sku', $existFields)->orderBy('retailer_id', 'DESC')
));
}
return $request->withOrdering($request->withFilters(
......@@ -65,31 +62,7 @@ public function fields(NovaRequest $request)
->rules('required'),
];
}
return [
Text::make('Name')
->sortable()
->rules('required', 'max:255', 'min:2'),
Select::make('Retailer', 'retailer_id')
->options(
Retailer::pluck('name', 'id')->all()
)
->rules('required')
->placeholder('Choose retailer')
->displayUsingLabels(),
Text::make('SKU')
->sortable()
->rules('numeric'),
Money::make('Price')
->sortable()
->rules('required'),
Textarea::make('Description')
->sortable()
->rules('required'),
];
return [];
}
/**
......@@ -122,9 +95,15 @@ public function filters(NovaRequest $request)
*/
public function actions(NovaRequest $request)
{
if (Cache::get('compare')) {
return [
new \App\Nova\Actions\ChangeValue(self::$comparebelField),
];
}
return [
\App\Nova\Actions\CompareActionChangeValues::make()->standalone(),
];
}
/**
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cache', function (Blueprint $table) {
$table->string('key')->primary();
$table->mediumText('value');
$table->integer('expiration');
});
Schema::create('cache_locks', function (Blueprint $table) {
$table->string('key')->primary();
$table->string('owner');
$table->integer('expiration');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cache');
Schema::dropIfExists('cache_locks');
}
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment