115 lines
4.3 KiB
PHP
115 lines
4.3 KiB
PHP
<?php
|
|
|
|
|
|
class RsvTimetableCapacityController {
|
|
use RsvPagedResponseTrait;
|
|
private string $namespace = 'reservations/v1';
|
|
private string $resource_name = 'timetable/(?P<id>\d+)/capacity';
|
|
|
|
public function register_routes(): void {
|
|
register_rest_route($this->namespace, '/' . $this->resource_name, [
|
|
[
|
|
'methods' => 'GET',
|
|
'callback' => [$this, 'get_all'],
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
|
],
|
|
[
|
|
'methods' => 'POST',
|
|
'callback' => [$this, 'create'],
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
|
// 'args' => self::input_args(RsvTimetableCapacity::schema()),
|
|
],
|
|
]);
|
|
|
|
register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P<capacity_id>\d+)', [
|
|
[
|
|
'methods' => 'GET',
|
|
'callback' => [$this, 'get'],
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
|
],
|
|
[
|
|
'methods' => 'PUT',
|
|
'callback' => [$this, 'update'],
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
|
'args' => self::input_args(RsvTimetableCapacity::schema()),
|
|
],
|
|
[
|
|
'methods' => 'DELETE',
|
|
'callback' => [$this, 'delete'],
|
|
'permission_callback' => [RsvRestPolicy::class, 'admin'],
|
|
],
|
|
]);
|
|
}
|
|
|
|
public function get_all(WP_REST_Request $request): WP_REST_Response {
|
|
[$skip, $limit] = self::paging($request);
|
|
$timetable_id = (int) $request->get_param('id');
|
|
$service = new RsvTimetableCapacityRepository();
|
|
return $this->paged_response(
|
|
$service->get_all($timetable_id, $limit, $skip),
|
|
$service->count_all($timetable_id)
|
|
);
|
|
}
|
|
|
|
public function get(WP_REST_Request $request): WP_REST_Response {
|
|
return new WP_REST_Response(
|
|
(new RsvTimetableCapacityRepository())->get((int) $request->get_param('capacity_id')),
|
|
200
|
|
);
|
|
}
|
|
|
|
public function create(WP_REST_Request $request): WP_REST_Response {
|
|
$items = $request->get_json_params();
|
|
$timetable_id = (int) $request->get_param('id');
|
|
|
|
$ids = [];
|
|
|
|
foreach($items as $item) {
|
|
$capacity = new RsvTimetableCapacity(
|
|
null,
|
|
$timetable_id,
|
|
(int) $item['capacity'],
|
|
(int) $item['min_lead_time_minutes'],
|
|
new DateTime($item['date']),
|
|
(int) $item['start_time'],
|
|
(int) $item['end_time'],
|
|
(int) $item['repeat_period_in_days'],
|
|
(int) $item['repeat_times'],
|
|
(bool) $item['requires_confirmation'],
|
|
);
|
|
|
|
$ids[] = (new RsvTimetableCapacityRepository())->create($capacity);
|
|
}
|
|
|
|
return new WP_REST_Response(
|
|
['ids' => $ids],
|
|
201
|
|
);
|
|
}
|
|
|
|
public function update(WP_REST_Request $request): WP_REST_Response {
|
|
$capacity = new RsvTimetableCapacity(
|
|
(int) $request->get_param('capacity_id'),
|
|
(int) $request->get_param('id'),
|
|
(int) $request->get_param('capacity'),
|
|
(int) $request->get_param('min_lead_time_minutes'),
|
|
new DateTime($request->get_param('date')),
|
|
(int)$request->get_param('start_time'),
|
|
(int)$request->get_param('end_time'),
|
|
(int) $request->get_param('repeat_period_in_days'),
|
|
(int) $request->get_param('repeat_times'),
|
|
(bool) $request->get_param('requires_confirmation'),
|
|
);
|
|
|
|
$capacity_id = (int) $request->get_param('capacity_id');
|
|
(new RsvTimetableCapacityRepository())->update($capacity_id, $capacity);
|
|
|
|
return new WP_REST_Response(['id' => $capacity_id], 200);
|
|
}
|
|
|
|
public function delete(WP_REST_Request $request): WP_REST_Response {
|
|
(new RsvTimetableCapacityRepository())->delete((int) $request->get_param('capacity_id'));
|
|
return new WP_REST_Response(null, 204);
|
|
}
|
|
}
|