OrderCreateController.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace Controllers;
  3. use Libs\ResponseLib;
  4. use Models\OrderModel;
  5. use Psr\Http\Message\ServerRequestInterface;
  6. use Respect\Validation\Validator as v;
  7. use Respect\Validation\Exceptions\ValidationException;
  8. class OrderCreateController
  9. {
  10. private OrderModel $model;
  11. public function __construct()
  12. {
  13. $this->model = new OrderModel();
  14. }
  15. public function __invoke(ServerRequestInterface $request)
  16. {
  17. $body = json_decode((string)$request->getBody(), true) ?? [];
  18. try {
  19. // Validação dos campos essenciais, esperando 'status_status'
  20. v::key('table_id', v::intType()->positive())
  21. ->key('user_id', v::intType()->positive())
  22. ->key('company_id', v::intType()->positive())
  23. ->key('order_name', v::stringType()->notEmpty()->alnum(' '))
  24. ->key('order_phone', v::stringType()->notEmpty()->length(8, 20))
  25. ->key('status_status', v::stringType()->notEmpty()->in(['Aberta', 'Finalizada', 'Cancelada']))
  26. ->assert($body);
  27. } catch (ValidationException $e) {
  28. return ResponseLib::sendFail("Validation failed: " . $e->getFullMessage(), [], "E_VALIDATE")->withStatus(400);
  29. }
  30. $tableId = (int) $body['table_id'];
  31. $userId = (int) $body['user_id'];
  32. $companyId = (int) $body['company_id'];
  33. $orderName = $body['order_name'];
  34. $orderPhone = $body['order_phone'];
  35. $statusStatus = $body['status_status'];
  36. // Converte o status_status para status_id usando o Model
  37. $statusId = $this->model->getStatusIdByName($statusStatus);
  38. if ($statusId === null) {
  39. // Isso pode acontecer se o status_status enviado não for mapeado no banco
  40. return ResponseLib::sendFail("Invalid status_status provided: '{$statusStatus}'", [], "E_VALIDATE")->withStatus(400);
  41. }
  42. // AQUI ESTAVA O ERRO: Passando $statusStatus (string) em vez de $statusId (int)
  43. $created = $this->model->createOrder(
  44. $tableId,
  45. $userId,
  46. $companyId,
  47. $orderName,
  48. $orderPhone,
  49. $statusId
  50. );
  51. return $created
  52. ? ResponseLib::sendOk(['created' => true, 'order_id' => $created])
  53. : ResponseLib::sendFail("Failed to create order", [], "E_DATABASE")->withStatus(500);
  54. }
  55. }