88 lines
3.2 KiB
PHP
88 lines
3.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
|
||
|
|
class RsvReservationController {
|
||
|
|
use RsvPagedResponseTrait;
|
||
|
|
|
||
|
|
private $namespace;
|
||
|
|
private $resource_name;
|
||
|
|
|
||
|
|
public function __construct() {
|
||
|
|
$this->namespace = 'reservations/v1';
|
||
|
|
$this->resource_name = 'reservation';
|
||
|
|
}
|
||
|
|
|
||
|
|
public function register_routes(): void {
|
||
|
|
register_rest_route($this->namespace, '/' . $this->resource_name, [
|
||
|
|
'methods' => 'GET',
|
||
|
|
'callback' => [$this, 'get_all'],
|
||
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin']
|
||
|
|
]);
|
||
|
|
|
||
|
|
register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P<id>\d+)', [
|
||
|
|
'methods' => 'GET',
|
||
|
|
'callback' => [$this, 'get'],
|
||
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin']
|
||
|
|
]);
|
||
|
|
|
||
|
|
register_rest_route($this->namespace, '/' . $this->resource_name, [
|
||
|
|
'methods' => 'POST',
|
||
|
|
'callback' => [$this, 'create'],
|
||
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin']
|
||
|
|
]);
|
||
|
|
|
||
|
|
register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P<id>\d+)/accept', [
|
||
|
|
'methods' => 'POST',
|
||
|
|
'callback' => [$this, 'accept_by_id'],
|
||
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
||
|
|
]);
|
||
|
|
|
||
|
|
register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P<id>\d+)/refuse', [
|
||
|
|
'methods' => 'POST',
|
||
|
|
'callback' => [$this, 'refuse_by_id'],
|
||
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
function get_all(WP_REST_Request $request) {
|
||
|
|
[$skip, $limit] = self::paging($request);
|
||
|
|
$service = new RsvReservationService();
|
||
|
|
return $this->paged_response((array) $service->get_all($limit, $skip), $service->count_all());
|
||
|
|
}
|
||
|
|
|
||
|
|
function get(WP_REST_Request $request): WP_REST_Response {
|
||
|
|
$service = new RsvReservationService();
|
||
|
|
$detail = $service->get_detail((int) $request->get_param('id'));
|
||
|
|
|
||
|
|
if ($detail === null) {
|
||
|
|
return new WP_REST_Response(['error' => 'Not found'], 404);
|
||
|
|
}
|
||
|
|
|
||
|
|
return new WP_REST_Response($detail, 200);
|
||
|
|
}
|
||
|
|
|
||
|
|
function create(WP_REST_Request $request) {
|
||
|
|
$service = new RsvReservationService();
|
||
|
|
$body = $request->get_json_params();
|
||
|
|
return $service->create(RsvReservation::from_array($body));
|
||
|
|
}
|
||
|
|
|
||
|
|
function accept_by_id(WP_REST_Request $request): WP_REST_Response {
|
||
|
|
try {
|
||
|
|
(new RsvTimetableReservationService())->accept_by_reservation_id((int) $request->get_param('id'));
|
||
|
|
return new WP_REST_Response(['status' => 'accepted'], 200);
|
||
|
|
} catch (InvalidArgumentException $e) {
|
||
|
|
return new WP_REST_Response(['error' => $e->getMessage()], 404);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function refuse_by_id(WP_REST_Request $request): WP_REST_Response {
|
||
|
|
try {
|
||
|
|
(new RsvTimetableReservationService())->refuse_by_reservation_id((int) $request->get_param('id'));
|
||
|
|
return new WP_REST_Response(['status' => 'refused'], 200);
|
||
|
|
} catch (InvalidArgumentException $e) {
|
||
|
|
return new WP_REST_Response(['error' => $e->getMessage()], 404);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|