ProductController.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Egg;
  4. use App\Models\Node;
  5. use App\Models\Product;
  6. use Illuminate\Contracts\Foundation\Application;
  7. use Illuminate\Contracts\Routing\ResponseFactory;
  8. use Illuminate\Database\Eloquent\Builder;
  9. use Illuminate\Http\JsonResponse;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Http\Response;
  12. use Illuminate\Support\Collection;
  13. class ProductController extends Controller
  14. {
  15. /**
  16. * @description get product locations based on selected egg
  17. * @param Request $request
  18. * @param Egg $egg
  19. * @return Collection|JsonResponse
  20. */
  21. public function getNodesBasedOnEgg(Request $request, Egg $egg)
  22. {
  23. if (is_null($egg->id)) return response()->json('egg id is required', '400');
  24. #get products that include this egg
  25. $products = Product::query()->with('nodes')->whereHas('eggs', function (Builder $builder) use ($egg) {
  26. $builder->where('id', '=', $egg->id);
  27. })->get();
  28. $nodes = collect();
  29. #filter unique nodes
  30. $products->each(function (Product $product) use ($nodes) {
  31. $product->nodes->each(function (Node $node) use ($nodes) {
  32. if (!$nodes->contains('id', $node->id) && !$node->disabled) {
  33. $nodes->add($node);
  34. }
  35. });
  36. });
  37. return $nodes;
  38. }
  39. /**
  40. * @param Node $node
  41. * @return Collection|JsonResponse
  42. */
  43. public function getProductsBasedOnNode(Node $node)
  44. {
  45. if (is_null($node->id)) return response()->json('node id is required', '400');
  46. return Product::query()->whereHas('nodes', function (Builder $builder) use ($node) {
  47. $builder->where('id' , '=' , $node->id);
  48. })->get();
  49. }
  50. }