ver. 0.296: REST API for ordersPRO — orders management, dictionaries, API key auth
- New API layer: ApiRouter, OrdersApiController, DictionariesApiController - Orders API: list (with filters/pagination/updated_since), details, change status, set paid/unpaid - Dictionaries API: order statuses, transport methods, payment methods - X-Api-Key authentication via pp_settings.api_key - OrderRepository: listForApi(), findForApi(), touchUpdatedAt() - updated_at column on pp_shop_orders for polling support - api.php: skip session for API requests, route to ApiRouter - SettingsController: api_key field in system tab - 30 new tests (666 total, 1930 assertions) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
82
autoload/api/Controllers/DictionariesApiController.php
Normal file
82
autoload/api/Controllers/DictionariesApiController.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
namespace api\Controllers;
|
||||
|
||||
use api\ApiRouter;
|
||||
use Domain\ShopStatus\ShopStatusRepository;
|
||||
use Domain\Transport\TransportRepository;
|
||||
use Domain\PaymentMethod\PaymentMethodRepository;
|
||||
|
||||
class DictionariesApiController
|
||||
{
|
||||
private $statusRepo;
|
||||
private $transportRepo;
|
||||
private $paymentRepo;
|
||||
|
||||
public function __construct(
|
||||
ShopStatusRepository $statusRepo,
|
||||
TransportRepository $transportRepo,
|
||||
PaymentMethodRepository $paymentRepo
|
||||
) {
|
||||
$this->statusRepo = $statusRepo;
|
||||
$this->transportRepo = $transportRepo;
|
||||
$this->paymentRepo = $paymentRepo;
|
||||
}
|
||||
|
||||
public function statuses(): void
|
||||
{
|
||||
if (!ApiRouter::requireMethod('GET')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$statuses = $this->statusRepo->allStatuses();
|
||||
|
||||
$result = [];
|
||||
foreach ($statuses as $id => $name) {
|
||||
$result[] = [
|
||||
'id' => (int)$id,
|
||||
'name' => (string)$name,
|
||||
];
|
||||
}
|
||||
|
||||
ApiRouter::sendSuccess($result);
|
||||
}
|
||||
|
||||
public function transports(): void
|
||||
{
|
||||
if (!ApiRouter::requireMethod('GET')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$transports = $this->transportRepo->allActive();
|
||||
|
||||
$result = [];
|
||||
foreach ($transports as $transport) {
|
||||
$result[] = [
|
||||
'id' => (int)($transport['id'] ?? 0),
|
||||
'name' => (string)($transport['name_visible'] ?? $transport['name'] ?? ''),
|
||||
'cost' => (float)($transport['cost'] ?? 0),
|
||||
];
|
||||
}
|
||||
|
||||
ApiRouter::sendSuccess($result);
|
||||
}
|
||||
|
||||
public function payment_methods(): void
|
||||
{
|
||||
if (!ApiRouter::requireMethod('GET')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$methods = $this->paymentRepo->allActive();
|
||||
|
||||
$result = [];
|
||||
foreach ($methods as $method) {
|
||||
$result[] = [
|
||||
'id' => (int)($method['id'] ?? 0),
|
||||
'name' => (string)($method['name'] ?? ''),
|
||||
];
|
||||
}
|
||||
|
||||
ApiRouter::sendSuccess($result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user