feat(05-admin-panel): Admin panel z historią rezerwacji

Phase 5 complete — CPT carei_reservation z automatycznym zapisem,
lista z kolumnami i filtrem statusu, meta box szczegółów,
system statusów nowe/przeczytane/zrealizowane, auto-mark-read.

Milestone v0.1 Formularz Rezerwacji MVP — all 5 phases complete.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-25 17:39:09 +01:00
parent a82ec90a51
commit 2af73782f2
11 changed files with 1261 additions and 23 deletions

View File

@@ -30,6 +30,13 @@ class Carei_REST_Proxy {
'permission_callback' => '__return_true',
) );
// GET /segments-branches-map (cached segment→branches mapping)
register_rest_route( self::NAMESPACE, '/segments-branches-map', array(
'methods' => 'GET',
'callback' => array( $this, 'get_segments_branches_map' ),
'permission_callback' => '__return_true',
) );
// POST /car-classes
register_rest_route( self::NAMESPACE, '/car-classes', array(
'methods' => 'POST',
@@ -99,6 +106,17 @@ class Carei_REST_Proxy {
),
) );
// POST /booking/cancel
register_rest_route( self::NAMESPACE, '/booking/cancel', array(
'methods' => 'POST',
'callback' => array( $this, 'cancel_booking' ),
'permission_callback' => array( $this, 'check_nonce' ),
'args' => array(
'reservationId' => array( 'required' => true, 'sanitize_callback' => 'sanitize_text_field' ),
'reason' => array( 'required' => true, 'sanitize_callback' => 'sanitize_text_field' ),
),
) );
// GET /agreements
register_rest_route( self::NAMESPACE, '/agreements', array(
'methods' => 'GET',
@@ -141,6 +159,14 @@ class Carei_REST_Proxy {
// ─── Callbacks ────────────────────────────────────────────────
public function get_segments_branches_map( WP_REST_Request $request ) {
$api = $this->api();
if ( is_wp_error( $api ) ) {
return $api;
}
return $this->respond( $api->get_segments_branches_map() );
}
public function get_all_car_classes( WP_REST_Request $request ) {
$api = $this->api();
if ( is_wp_error( $api ) ) {
@@ -218,8 +244,15 @@ class Carei_REST_Proxy {
if ( is_wp_error( $api ) ) {
return $api;
}
$data = $request->get_json_params();
return $this->respond( $api->make_booking( $data ) );
$data = $request->get_json_params();
$result = $api->make_booking( $data );
// Save reservation to WP on success (fire-and-forget)
if ( ! is_wp_error( $result ) && isset( $result['success'] ) && $result['success'] ) {
Carei_Admin_Panel::save_reservation( $data, $result );
}
return $this->respond( $result );
}
public function confirm_booking( WP_REST_Request $request ) {
@@ -232,6 +265,17 @@ class Carei_REST_Proxy {
) );
}
public function cancel_booking( WP_REST_Request $request ) {
$api = $this->api();
if ( is_wp_error( $api ) ) {
return $api;
}
return $this->respond( $api->cancel_booking(
$request->get_param( 'reservationId' ),
$request->get_param( 'reason' )
) );
}
public function get_agreements( WP_REST_Request $request ) {
$api = $this->api();
if ( is_wp_error( $api ) ) {