10 KiB
Advanced Order Management Implementation Summary
Overview
This document summarizes the complete implementation of advanced order management features for the Enaklo POS backend system. The implementation includes three major features: Partial Refund, Void Order, and Split Bill functionality.
๐ฏ Implemented Features
1. Partial Refund System
Purpose: Allow refunding specific items from paid orders while keeping remaining items.
Key Components:
- โ
API Endpoint:
POST /order/partial-refund - โ
Service Method:
PartialRefundRequest() - โ
Repository Methods:
UpdateOrderItem(),UpdateOrderTotals() - โ Validation: Order status, item existence, quantity validation
- โ Transaction Tracking: Creates refund transactions with negative amounts
- โ Status Management: Updates order to "PARTIAL" or "REFUNDED"
Business Logic:
// Flow: PAID โ PARTIAL/REFUNDED
// - Validate order is PAID
// - Reduce item quantities
// - Recalculate totals
// - Create refund transaction
// - Update order status
2. Void Order System
Purpose: Cancel ongoing orders (NEW/PENDING) either entirely or by specific items.
Key Components:
- โ
API Endpoint:
POST /order/void - โ
Service Method:
VoidOrderRequest() - โ Two Modes: "ALL" (entire order) or "ITEM" (specific items)
- โ Validation: Order status, item existence, quantity validation
- โ Status Management: Updates order to "VOIDED" or "PARTIAL"
Business Logic:
// Flow: NEW/PENDING โ VOIDED/PARTIAL
// - Validate order is NEW or PENDING
// - ALL: Set status to VOIDED
// - ITEM: Reduce quantities, recalculate totals
// - Update order status accordingly
3. Split Bill System
Purpose: Split orders into a separate order by items or amounts.
Key Components:
- โ
API Endpoint:
POST /order/split-bill - โ
Service Method:
SplitBillRequest() - โ Two Modes: "ITEM" (specify items) or "AMOUNT" (specify amount)
- โ Order Creation: Creates a new order for the split
- โ Original Order: Voids the original order after splitting
Business Logic:
// Flow: NEW/PENDING โ PENDING (reduced) + PAID (split)
// - Validate order is NEW or PENDING
// - ITEM: Create PAID order with specified items, reduce quantities in original
// - AMOUNT: Create PAID order with specified amount, reduce amount in original
// - Original order remains PENDING with reduced items/amount
// - New split order becomes PAID with specified payment method
๐๏ธ Architecture Components
1. Constants & Status Management
// Added new order statuses
const (
New OrderStatus = "NEW"
Paid OrderStatus = "PAID"
Cancel OrderStatus = "CANCEL"
Pending OrderStatus = "PENDING"
Refunded OrderStatus = "REFUNDED"
Voided OrderStatus = "VOIDED" // New
Partial OrderStatus = "PARTIAL" // New
)
2. Entity Models
// New entity types for request/response handling
type PartialRefundItem struct {
OrderItemID int64 `json:"order_item_id" validate:"required"`
Quantity int `json:"quantity" validate:"required,min=1"`
}
type VoidItem struct {
OrderItemID int64 `json:"order_item_id" validate:"required"`
Quantity int `json:"quantity" validate:"required,min=1"`
}
type SplitBillSplit struct {
CustomerName string `json:"customer_name" validate:"required"`
CustomerID *int64 `json:"customer_id"`
Items []SplitBillItem `json:"items,omitempty"`
Amount float64 `json:"amount,omitempty"`
}
3. Repository Layer
// New repository methods
type Repository interface {
// ... existing methods
UpdateOrderItem(ctx mycontext.Context, orderItemID int64, quantity int) error
UpdateOrderTotals(ctx mycontext.Context, orderID int64, amount, tax, total float64) error
}
4. Service Layer
// New service methods
type Service interface {
// ... existing methods
PartialRefundRequest(ctx mycontext.Context, partnerID, orderID int64, reason string, items []entity.PartialRefundItem) error
VoidOrderRequest(ctx mycontext.Context, partnerID, orderID int64, reason string, voidType string, items []entity.VoidItem) error
SplitBillRequest(ctx mycontext.Context, partnerID, orderID int64, splitType string, splits []entity.SplitBillSplit) ([]*entity.Order, error)
}
5. HTTP Handlers
// New API endpoints
func (h *Handler) Route(group *gin.RouterGroup, jwt gin.HandlerFunc) {
// ... existing routes
route.POST("/partial-refund", jwt, h.PartialRefund)
route.POST("/void", jwt, h.VoidOrder)
route.POST("/split-bill", jwt, h.SplitBill)
}
๐ Order Status Flow
NEW โ PENDING โ PAID โ REFUNDED
โ โ โ
VOIDED VOIDED PARTIAL
Status Transitions:
- NEW/PENDING โ VOIDED: When entire order is voided
- NEW/PENDING โ PARTIAL: When some items are voided
- PAID โ PARTIAL: When some items are refunded
- PAID โ REFUNDED: When all items are refunded
๐ Validation & Security
Input Validation
- โ Order Existence: Verify order exists and belongs to partner
- โ Status Validation: Ensure appropriate status for operations
- โ Item Validation: Verify items exist and quantities are valid
- โ Quantity Validation: Prevent refunding/voiding more than available
- โ Split Validation: Ensure split amounts match order total
Business Rules
- โ Partial Refund: Only PAID orders can be partially refunded
- โ Void Order: Only NEW/PENDING orders can be voided
- โ Split Bill: Only NEW/PENDING orders can be split
- โ Transaction Tracking: All operations create audit trails
๐งช Testing
Test Coverage
- โ Unit Tests: Comprehensive test coverage for all service methods
- โ Mock Testing: Uses testify/mock for dependency mocking
- โ Edge Cases: Tests for invalid states and error conditions
- โ Success Scenarios: Tests for successful operations
Test Files
internal/services/v2/order/refund_test.go- Original refund testsinternal/services/v2/order/advanced_order_management_test.go- New feature tests
๐ Documentation
API Documentation
- โ REFUND_API.md: Complete refund API documentation
- โ ADVANCED_ORDER_MANAGEMENT.md: Comprehensive feature documentation
- โ IMPLEMENTATION_SUMMARY.md: This summary document
Documentation Features
- โ Request/Response Examples: Complete JSON examples
- โ Error Handling: Common error scenarios and responses
- โ Business Logic: Detailed process flows
- โ cURL Examples: Ready-to-use API testing commands
๐ Usage Examples
Partial Refund
curl -X POST /order/partial-refund \
-H "Authorization: Bearer TOKEN" \
-d '{
"order_id": 123,
"reason": "Customer returned damaged items",
"items": [
{"order_item_id": 456, "quantity": 2}
]
}'
Void Order
curl -X POST /order/void \
-H "Authorization: Bearer TOKEN" \
-d '{
"order_id": 123,
"reason": "Customer cancelled order",
"type": "ALL"
}'
Split Bill
curl -X POST /order/split-bill \
-H "Authorization: Bearer TOKEN" \
-d '{
"order_id": 123,
"type": "ITEM",
"payment_method": "CASH",
"payment_provider": "CASH",
"items": [
{"order_item_id": 456, "quantity": 1},
{"order_item_id": 789, "quantity": 1}
]
}'
๐ง Database Considerations
Schema Updates
-- New statuses supported
ALTER TABLE orders ADD CONSTRAINT check_status
CHECK (status IN ('NEW', 'PENDING', 'PAID', 'REFUNDED', 'VOIDED', 'PARTIAL'));
-- Support for quantity updates
ALTER TABLE order_items ADD COLUMN updated_at TIMESTAMP DEFAULT NOW();
Transaction Management
- โ Atomic Operations: All operations use database transactions
- โ Rollback Support: Failed operations are properly rolled back
- โ Data Consistency: Ensures order totals match item totals
๐ฏ Benefits
Business Benefits
- Flexibility: Support for complex order management scenarios
- Customer Satisfaction: Handle partial returns and cancellations
- Operational Efficiency: Streamlined bill splitting for groups
- Audit Trail: Complete tracking of all order modifications
Technical Benefits
- Scalable Architecture: Clean separation of concerns
- Comprehensive Testing: High test coverage ensures reliability
- Extensible Design: Easy to add new order management features
- Documentation: Complete API documentation for integration
๐ฎ Future Enhancements
Potential Improvements
- Bulk Operations: Support for bulk partial refunds/voids
- Approval Workflow: Multi-level approval for large operations
- Notification System: Customer notifications for refunds/voids
- Analytics Dashboard: Order management trends and analysis
- Inventory Integration: Automatic inventory updates for refunds/voids
Integration Opportunities
- Payment Gateway: Direct refund processing
- Customer Management: Customer point adjustments
- Reporting System: Enhanced order analytics
- Mobile App: Real-time order management
๐ Implementation Checklist
- โ Core Features: All three main features implemented
- โ API Endpoints: Complete REST API implementation
- โ Service Layer: Business logic implementation
- โ Repository Layer: Database operations
- โ Validation: Comprehensive input validation
- โ Error Handling: Proper error responses
- โ Testing: Unit test coverage
- โ Documentation: Complete API documentation
- โ Status Management: New order statuses
- โ Transaction Tracking: Audit trail implementation
๐ Conclusion
The Advanced Order Management system provides a comprehensive solution for complex order scenarios in the Enaklo POS system. The implementation follows best practices for scalability, maintainability, and reliability, with complete documentation and testing coverage.
The system is now ready for production use and provides the foundation for future enhancements and integrations.