/// API endpoint constants for the warehouse management application /// /// This class contains all API endpoint paths used throughout the app. /// Endpoints are organized by feature for better maintainability. class ApiEndpoints { // Private constructor to prevent instantiation ApiEndpoints._(); // ==================== Base Configuration ==================== /// Base API URL - should be configured based on environment static const String baseUrl = 'https://api.warehouse.example.com'; /// API version prefix static const String apiVersion = '/api/v1'; // ==================== Authentication Endpoints ==================== /// Login endpoint /// POST: { "EmailPhone": string, "Password": string } /// Response: User with access token static const String login = '/PortalAuth/Login'; /// Logout endpoint /// POST: Empty body (requires auth token) static const String logout = '$apiVersion/auth/logout'; /// Refresh token endpoint /// POST: { "refreshToken": string } /// Response: New access token static const String refreshToken = '$apiVersion/auth/refresh'; /// Get current user profile /// GET: (requires auth token) static const String profile = '$apiVersion/auth/profile'; // ==================== User Endpoints ==================== /// Get all users (short info) /// GET: /PortalUser/GetAllMemberUserShortInfo (requires auth token) /// Response: List of users static const String users = '/PortalUser/GetAllMemberUserShortInfo'; /// Get current logged-in user /// GET: /PortalUser/GetCurrentUser?getDep=false (requires auth token) /// Response: Current user details static const String getCurrentUser = '/PortalUser/GetCurrentUser?getDep=false'; // ==================== Warehouse Endpoints ==================== /// Get all warehouses /// POST: /portalWareHouse/search (requires auth token) /// Response: List of warehouses static const String warehouses = '/portalWareHouse/search'; /// Get warehouse by ID /// GET: (requires auth token) /// Parameter: warehouseId static String warehouseById(int id) => '$apiVersion/warehouses/$id'; /// Get warehouse statistics /// GET: (requires auth token) /// Parameter: warehouseId static String warehouseStats(int id) => '$apiVersion/warehouses/$id/stats'; // ==================== Product Endpoints ==================== /// Get products for import (all products) /// GET: /portalProduct/getAllProduct (requires auth token) /// Response: List of products static const String products = '/portalProduct/getAllProduct'; /// Get products for export (products in specific warehouse) /// GET: /portalWareHouse/GetAllProductsInWareHouse?warehouseId={id} (requires auth token) /// Query param: warehouseId (int) /// Response: List of products in warehouse static String productsForExport(int warehouseId) => '/portalWareHouse/GetAllProductsInWareHouse?warehouseId=$warehouseId'; /// Get product stage in warehouse /// POST: /portalWareHouse/GetProductStageInWareHouse /// Body: { "WareHouseId": int, "ProductId": int } /// Response: Product details with stage information static const String productDetail = '/portalWareHouse/GetProductStageInWareHouse'; /// Create product warehouse (import/export) /// POST: /portalWareHouse/createProductWareHouse /// Body: Array of product warehouse creation objects /// Response: Created product warehouse record static const String createProductWarehouse = '/portalWareHouse/createProductWareHouse'; /// Get product by ID /// GET: (requires auth token) /// Parameter: productId static String productById(int id) => '$apiVersion/products/$id'; /// Search products /// GET: (requires auth token) /// Query params: query (string), warehouseId (int, optional) static const String searchProducts = '$apiVersion/products/search'; /// Get products by barcode /// GET: (requires auth token) /// Query params: barcode (string), warehouseId (int, optional) static const String productsByBarcode = '$apiVersion/products/by-barcode'; // ==================== Import/Export Operations ==================== /// Create import operation /// POST: { warehouseId, productId, quantity, ... } /// Response: Import operation details static const String importOperation = '$apiVersion/operations/import'; /// Create export operation /// POST: { warehouseId, productId, quantity, ... } /// Response: Export operation details static const String exportOperation = '$apiVersion/operations/export'; /// Get operation history /// GET: (requires auth token) /// Query params: warehouseId (int), type (string, optional), page (int), limit (int) static const String operationHistory = '$apiVersion/operations/history'; /// Get operation by ID /// GET: (requires auth token) /// Parameter: operationId static String operationById(String id) => '$apiVersion/operations/$id'; /// Cancel operation /// POST: (requires auth token) /// Parameter: operationId static String cancelOperation(String id) => '$apiVersion/operations/$id/cancel'; /// Confirm operation /// POST: (requires auth token) /// Parameter: operationId static String confirmOperation(String id) => '$apiVersion/operations/$id/confirm'; // ==================== Inventory Endpoints ==================== /// Get inventory for warehouse /// GET: (requires auth token) /// Parameter: warehouseId /// Query params: page (int), limit (int) static String warehouseInventory(int warehouseId) => '$apiVersion/inventory/warehouse/$warehouseId'; /// Get product inventory across all warehouses /// GET: (requires auth token) /// Parameter: productId static String productInventory(int productId) => '$apiVersion/inventory/product/$productId'; /// Update inventory /// PUT: { warehouseId, productId, quantity, reason, ... } static const String updateInventory = '$apiVersion/inventory/update'; // ==================== Report Endpoints ==================== /// Generate warehouse report /// GET: (requires auth token) /// Query params: warehouseId (int), startDate (string), endDate (string), format (string) static const String warehouseReport = '$apiVersion/reports/warehouse'; /// Generate product movement report /// GET: (requires auth token) /// Query params: productId (int, optional), startDate (string), endDate (string) static const String movementReport = '$apiVersion/reports/movements'; /// Generate inventory summary /// GET: (requires auth token) /// Query params: warehouseId (int, optional) static const String inventorySummary = '$apiVersion/reports/inventory-summary'; // ==================== Utility Endpoints ==================== /// Health check endpoint /// GET: No authentication required static const String health = '$apiVersion/health'; /// Get app configuration /// GET: (requires auth token) static const String config = '$apiVersion/config'; // ==================== Helper Methods ==================== /// Build full URL with base URL static String fullUrl(String endpoint) => baseUrl + endpoint; /// Build URL with query parameters static String withQueryParams(String endpoint, Map params) { if (params.isEmpty) return endpoint; final queryString = params.entries .where((e) => e.value != null) .map((e) => '${e.key}=${Uri.encodeComponent(e.value.toString())}') .join('&'); return '$endpoint?$queryString'; } /// Build paginated URL static String withPagination(String endpoint, int page, int limit) { return withQueryParams(endpoint, { 'page': page, 'limit': limit, }); } }