api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RecordController.php 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Controller;
  3. use Tqdev\PhpCrudApi\Record\ErrorCode;
  4. use Tqdev\PhpCrudApi\Record\RecordService;
  5. use Tqdev\PhpCrudApi\Request;
  6. use Tqdev\PhpCrudApi\Response;
  7. use Tqdev\PhpCrudApi\Middleware\Router\Router;
  8. class RecordController
  9. {
  10. private $service;
  11. private $responder;
  12. public function __construct(Router $router, Responder $responder, RecordService $service)
  13. {
  14. $router->register('GET', '/records/*', array($this, '_list'));
  15. $router->register('POST', '/records/*', array($this, 'create'));
  16. $router->register('GET', '/records/*/*', array($this, 'read'));
  17. $router->register('PUT', '/records/*/*', array($this, 'update'));
  18. $router->register('DELETE', '/records/*/*', array($this, 'delete'));
  19. $router->register('PATCH', '/records/*/*', array($this, 'increment'));
  20. $this->service = $service;
  21. $this->responder = $responder;
  22. }
  23. public function _list(Request $request): Response
  24. {
  25. $table = $request->getPathSegment(2);
  26. $params = $request->getParams();
  27. if (!$this->service->exists($table)) {
  28. return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
  29. }
  30. return $this->responder->success($this->service->_list($table, $params));
  31. }
  32. public function read(Request $request): Response
  33. {
  34. $table = $request->getPathSegment(2);
  35. $id = $request->getPathSegment(3);
  36. $params = $request->getParams();
  37. if (!$this->service->exists($table)) {
  38. return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
  39. }
  40. if (strpos($id, ',') !== false) {
  41. $ids = explode(',', $id);
  42. $result = [];
  43. for ($i = 0; $i < count($ids); $i++) {
  44. array_push($result, $this->service->read($table, $ids[$i], $params));
  45. }
  46. return $this->responder->success($result);
  47. } else {
  48. $response = $this->service->read($table, $id, $params);
  49. if ($response === null) {
  50. return $this->responder->error(ErrorCode::RECORD_NOT_FOUND, $id);
  51. }
  52. return $this->responder->success($response);
  53. }
  54. }
  55. public function create(Request $request): Response
  56. {
  57. $table = $request->getPathSegment(2);
  58. $record = $request->getBody();
  59. if ($record === null) {
  60. return $this->responder->error(ErrorCode::HTTP_MESSAGE_NOT_READABLE, '');
  61. }
  62. $params = $request->getParams();
  63. if (!$this->service->exists($table)) {
  64. return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
  65. }
  66. if (is_array($record)) {
  67. $result = array();
  68. foreach ($record as $r) {
  69. $result[] = $this->service->create($table, $r, $params);
  70. }
  71. return $this->responder->success($result);
  72. } else {
  73. return $this->responder->success($this->service->create($table, $record, $params));
  74. }
  75. }
  76. public function update(Request $request): Response
  77. {
  78. $table = $request->getPathSegment(2);
  79. $id = $request->getPathSegment(3);
  80. $record = $request->getBody();
  81. if ($record === null) {
  82. return $this->responder->error(ErrorCode::HTTP_MESSAGE_NOT_READABLE, '');
  83. }
  84. $params = $request->getParams();
  85. if (!$this->service->exists($table)) {
  86. return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
  87. }
  88. $ids = explode(',', $id);
  89. if (is_array($record)) {
  90. if (count($ids) != count($record)) {
  91. return $this->responder->error(ErrorCode::ARGUMENT_COUNT_MISMATCH, $id);
  92. }
  93. $result = array();
  94. for ($i = 0; $i < count($ids); $i++) {
  95. $result[] = $this->service->update($table, $ids[$i], $record[$i], $params);
  96. }
  97. return $this->responder->success($result);
  98. } else {
  99. if (count($ids) != 1) {
  100. return $this->responder->error(ErrorCode::ARGUMENT_COUNT_MISMATCH, $id);
  101. }
  102. return $this->responder->success($this->service->update($table, $id, $record, $params));
  103. }
  104. }
  105. public function delete(Request $request): Response
  106. {
  107. $table = $request->getPathSegment(2);
  108. $id = $request->getPathSegment(3);
  109. $params = $request->getParams();
  110. if (!$this->service->exists($table)) {
  111. return $this->responder->error(ErrorCode::TABLE_NOT_FOUND, $table);
  112. }
  113. $ids = explode(',', $id);
  114. if (count($ids) > 1) {
  115. $result = array();
  116. for ($i = 0; $i < count($ids); $i++) {
  117. $result[] = $this->service->delete($table, $ids[$i], $params);
  118. }
  119. return $this->responder->success($result);
  120. } else {
  121. return $this->responder->success($this->service->delete($table, $id, $params));
  122. }
  123. }
  124. }