CollectionWriter.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace Mpociot\ApiDoc\Postman;
  3. use Ramsey\Uuid\Uuid;
  4. use Illuminate\Support\Collection;
  5. use Illuminate\Support\Facades\URL;
  6. class CollectionWriter
  7. {
  8. /**
  9. * @var Collection
  10. */
  11. private $routeGroups;
  12. /**
  13. * @var string
  14. */
  15. private $baseUrl;
  16. /**
  17. * CollectionWriter constructor.
  18. *
  19. * @param Collection $routeGroups
  20. */
  21. public function __construct(Collection $routeGroups, $baseUrl)
  22. {
  23. $this->routeGroups = $routeGroups;
  24. $this->baseUrl = $baseUrl;
  25. }
  26. public function getCollection()
  27. {
  28. try {
  29. URL::forceRootUrl($this->baseUrl);
  30. } catch (\Error $e) {
  31. echo "Warning: Couldn't force base url as your version of Lumen doesn't have the forceRootUrl method.\n";
  32. echo "You should probably double check URLs in your generated Postman collection.\n";
  33. }
  34. $collection = [
  35. 'variables' => [],
  36. 'info' => [
  37. 'name' => config('apidoc.postman.name') ?: config('app.name').' API',
  38. '_postman_id' => Uuid::uuid4()->toString(),
  39. 'description' => config('apidoc.postman.description') ?: '',
  40. 'schema' => 'https://schema.getpostman.com/json/collection/v2.0.0/collection.json',
  41. ],
  42. 'item' => $this->routeGroups->map(function ($routes, $groupName) {
  43. return [
  44. 'name' => $groupName,
  45. 'description' => '',
  46. 'item' => $routes->map(function ($route) {
  47. $mode = $route['methods'][0] === 'PUT' ? 'urlencoded' : 'formdata';
  48. return [
  49. 'name' => $route['title'] != '' ? $route['title'] : url($route['uri']),
  50. 'request' => [
  51. 'url' => url($route['uri']),
  52. 'method' => $route['methods'][0],
  53. 'body' => [
  54. 'mode' => $mode,
  55. $mode => collect($route['bodyParameters'])->map(function ($parameter, $key) {
  56. return [
  57. 'key' => $key,
  58. 'value' => isset($parameter['value']) ? $parameter['value'] : '',
  59. 'type' => 'text',
  60. 'enabled' => true,
  61. ];
  62. })->values()->toArray(),
  63. ],
  64. 'description' => $route['description'],
  65. 'response' => [],
  66. ],
  67. ];
  68. })->toArray(),
  69. ];
  70. })->values()->toArray(),
  71. ];
  72. return json_encode($collection);
  73. }
  74. }