ApprovalCollection.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Http\Resources\API;
  3. use App\Models\Enums\ApprovalObjectType;
  4. use App\Models\User;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Http\Resources\Json\ResourceCollection;
  7. class ApprovalCollection extends ResourceCollection
  8. {
  9. public function __construct($resource)
  10. {
  11. parent::__construct($resource);
  12. }
  13. /**
  14. * Transform the resource collection into an array.
  15. *
  16. * @return array<int|string, mixed>
  17. */
  18. public function toArray(Request $request): array
  19. {
  20. $usersId=make_array_list($this->users??'');
  21. $approvalUsers=User::query()->whereIn('id',$usersId)->get();
  22. $groupObjects = $this->getGroupObjects();
  23. $items = [];
  24. foreach ($this->resource as $approval) {
  25. $usersId=make_array_list($approval->users??'');
  26. $approvalUsers=User::query()->whereIn('id',$usersId)->get();
  27. $items[] = [
  28. 'id' => $approval->id,
  29. 'status' => $approval->status,
  30. 'object_type' => $approval->object_type,
  31. 'object_id' => $approval->object_id,
  32. 'node_level' => $approval->node_level,
  33. 'created_by' => new UserProfileResource($approval->createdBy),
  34. 'display_id' => $approval->display_id,
  35. 'approval_user'=>UserProfileResource::collection($approvalUsers),
  36. 'object' => [
  37. 'id' => $approval->object_id,
  38. 'name' => data_get($groupObjects, sprintf("%s.%s", $approval->object_type, $approval->object_id)),
  39. ]
  40. ];
  41. }
  42. return $items;
  43. }
  44. protected function getGroupObjects(): array
  45. {
  46. $groupObjects = [];
  47. foreach(collect($this->resource->items())->groupBy("object_type") as $objectType => $items) {
  48. $approvalObjectType = ApprovalObjectType::from($objectType);
  49. $groupObjects[$objectType] = $approvalObjectType
  50. ->modelBuilder()
  51. ->whereIn("id", array_column($items->toArray(), "object_id"))
  52. ->pluck($approvalObjectType->nameField(), "id");
  53. };
  54. return $groupObjects;
  55. }
  56. }