ctrlpanel/app/Http/Controllers/ProductController.php

90 lines
2.5 KiB
PHP
Raw Normal View History

2021-11-06 00:56:57 +00:00
<?php
namespace App\Http\Controllers;
use App\Models\Egg;
2021-11-07 15:29:18 +00:00
use App\Models\Location;
2021-11-06 00:56:57 +00:00
use App\Models\Node;
use App\Models\Product;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
class ProductController extends Controller
{
/**
* @description get product locations based on selected egg
* @param Request $request
* @param Egg $egg
* @return Collection|JsonResponse
*/
public function getNodesBasedOnEgg(Request $request, Egg $egg)
{
if (is_null($egg->id)) return response()->json('egg id is required', '400');
#get products that include this egg
$products = Product::query()->with('nodes')->whereHas('eggs', function (Builder $builder) use ($egg) {
$builder->where('id', '=', $egg->id);
})->get();
$nodes = collect();
#filter unique nodes
$products->each(function (Product $product) use ($nodes) {
$product->nodes->each(function (Node $node) use ($nodes) {
if (!$nodes->contains('id', $node->id) && !$node->disabled) {
$nodes->add($node);
}
});
});
return $nodes;
}
2021-11-07 15:29:18 +00:00
/**
* @description get product locations based on selected egg
* @param Request $request
* @param Egg $egg
* @return Collection|JsonResponse
*/
public function getLocationsBasedOnEgg(Request $request, Egg $egg)
{
$nodes = $this->getNodesBasedOnEgg($request, $egg);
$locations = collect();
//locations
$nodes->each(function (Node $node) use ($nodes, $locations) {
/** @var Location $location */
$location = $node->location;
if (!$locations->contains('id' , $location->id)){
$nodeIds = $nodes->map(function ($node){
return $node->id;
});
$location->nodes = $location->nodes()
->whereIn('id' , $nodeIds)
->get();
$locations->add($location);
}
});
return $locations;
}
2021-11-06 00:56:57 +00:00
/**
* @param Node $node
* @return Collection|JsonResponse
*/
public function getProductsBasedOnNode(Node $node)
{
if (is_null($node->id)) return response()->json('node id is required', '400');
return Product::query()->whereHas('nodes', function (Builder $builder) use ($node) {
2021-11-07 15:29:18 +00:00
$builder->where('id', '=', $node->id);
2021-11-06 00:56:57 +00:00
})->get();
}
}