Files
WooNooW/includes/Api/Routes.php
dwindown 249505ddf3 feat: Coupons CRUD - Backend API (Phase 1)
Implemented CouponsController with full CRUD operations

Created: CouponsController.php
- GET /coupons - List coupons with pagination and filtering
- GET /coupons/{id} - Get single coupon
- POST /coupons - Create new coupon
- PUT /coupons/{id} - Update coupon
- DELETE /coupons/{id} - Delete coupon

Features:
- Pagination support (page, per_page)
- Search by coupon code
- Filter by discount_type
- Full coupon data (all WooCommerce fields)
- Validation (code required, duplicate check)
- Error handling (user-friendly messages)

Coupon Fields Supported:
- Basic: code, amount, discount_type, description
- Usage: usage_count, usage_limit, usage_limit_per_user
- Restrictions: product_ids, categories, email_restrictions
- Limits: minimum_amount, maximum_amount, date_expires
- Options: individual_use, free_shipping, exclude_sale_items

Registered in Routes.php:
- Added CouponsController to route registration
- Follows API_ROUTES.md standards

Following PROJECT_SOP.md:
- Consistent error responses
- Permission checks (manage_woocommerce)
- User-friendly error messages
- Standard REST patterns

Next Steps:
- Frontend list page with submenu tabs
- Frontend create/edit form
- Update API_ROUTES.md
- Update NavigationRegistry.php
2025-11-20 13:52:12 +07:00

118 lines
4.6 KiB
PHP

<?php
namespace WooNooW\Api;
use WP_REST_Request;
use WP_REST_Response;
use WooNooW\Api\CheckoutController;
use WooNooW\Api\OrdersController;
use WooNooW\Api\AnalyticsController;
use WooNooW\Api\AuthController;
use WooNooW\Api\PaymentsController;
use WooNooW\Api\StoreController;
use WooNooW\Api\ShippingController;
use WooNooW\Api\TaxController;
use WooNooW\Api\PickupLocationsController;
use WooNooW\Api\EmailController;
use WooNooW\Api\DeveloperController;
use WooNooW\Api\SystemController;
use WooNooW\Api\NotificationsController;
use WooNooW\Api\ActivityLogController;
use WooNooW\Api\ProductsController;
use WooNooW\Api\CouponsController;
class Routes {
public static function init() {
// Initialize controllers (register action hooks)
OrdersController::init();
// Log ALL REST API requests to debug routing
add_filter('rest_pre_dispatch', function($result, $server, $request) {
$route = $request->get_route();
$method = $request->get_method();
$result_type = is_null($result) ? 'NULL (will call handler)' : 'NON-NULL (handler bypassed!)';
error_log("WooNooW REST: {$method} {$route} - Result: {$result_type}");
if (!is_null($result)) {
error_log("WooNooW REST: BYPASSED! Result type: " . gettype($result));
}
return $result;
}, 10, 3);
add_action('rest_api_init', function () {
error_log('WooNooW Routes: rest_api_init hook fired');
$namespace = 'woonoow/v1';
// Auth endpoints (public - no permission check)
register_rest_route( $namespace, '/auth/login', [
'methods' => 'POST',
'callback' => [ AuthController::class, 'login' ],
'permission_callback' => '__return_true',
] );
register_rest_route( $namespace, '/auth/logout', [
'methods' => 'POST',
'callback' => [ AuthController::class, 'logout' ],
'permission_callback' => '__return_true',
] );
register_rest_route( $namespace, '/auth/check', [
'methods' => 'GET',
'callback' => [ AuthController::class, 'check' ],
'permission_callback' => '__return_true',
] );
// Defer to controllers to register their endpoints
CheckoutController::register();
OrdersController::register();
AnalyticsController::register_routes();
// Payments controller
$payments_controller = new PaymentsController();
$payments_controller->register_routes();
// Store controller
$store_controller = new StoreController();
$store_controller->register_routes();
// Shipping controller
$shipping_controller = new ShippingController();
$shipping_controller->register_routes();
// Tax controller
$tax_controller = new TaxController();
$tax_controller->register_routes();
// Pickup locations controller
$pickup_controller = new PickupLocationsController();
$pickup_controller->register_routes();
// Email controller
$email_controller = new EmailController();
$email_controller->register_routes();
// Developer controller
$developer_controller = new DeveloperController();
$developer_controller->register_routes();
// System controller
$system_controller = new SystemController();
$system_controller->register_routes();
// Notifications controller
$notifications_controller = new NotificationsController();
$notifications_controller->register_routes();
// Activity Log controller
$activity_log_controller = new ActivityLogController();
$activity_log_controller->register_routes();
// Products controller
error_log('WooNooW Routes: Registering ProductsController routes');
ProductsController::register_routes();
error_log('WooNooW Routes: ProductsController routes registered');
// Coupons controller
CouponsController::register_routes();
});
}
}