[
https://issues.apache.org/jira/browse/UNOMI-879?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Serge Huber reassigned UNOMI-879:
---------------------------------
Assignee: Serge Huber
> Unified CRUD Command System: Streamlining Shell Operations with a Consistent
> Interface
> --------------------------------------------------------------------------------------
>
> Key: UNOMI-879
> URL: https://issues.apache.org/jira/browse/UNOMI-879
> Project: Apache Unomi
> Issue Type: Sub-task
> Affects Versions: unomi-3.0.0
> Reporter: Serge Huber
> Assignee: Serge Huber
> Priority: Major
> Fix For: unomi-3.0.0
>
>
> This proposal suggests replacing our current disparate Karaf shell commands
> with a unified CRUD command system that would provide a consistent,
> maintainable, and extensible interface for all Unomi objects. This
> architectural improvement would offer significant benefits for both
> developers and operators.
> h3. Current Pain Points:
> 1. Inconsistent command patterns across different object types
> 2. Significant code duplication in command implementations
> 3. Varying parameter names and behaviors
> 4. Scattered documentation and help text
> 5. High maintenance overhead
> 6. Steep learning curve for new users
> h3. Proposed Solution:
> A unified command structure:
> {noformat}
> unomi:crud <operation> <type> [id] [options]
> Operations:
> - create: Create new object from JSON file
> - read: Display object details
> - update: Update existing object from JSON
> - delete: Remove an object
> - list: Display objects in table format
> - help: Show object type documentation
> Options:
> --file (-f): JSON file for create/update
> --csv: Output in CSV format
> --max-entries (-n): Maximum items to display
> {noformat}
> h3. Example Usage Would Be:
> {noformat}
> # List all rules
> unomi:crud list rule
> # Show rule details
> unomi:crud read rule rule_id
> # Create new rule
> unomi:crud create rule --file new_rule.json
> # Update existing rule
> unomi:crud update rule rule_id --file updated_rule.json
> # Delete rule
> unomi:crud delete rule rule_id
> # Get help for rule properties
> unomi:crud help rule
> {noformat}
> h3. Expected Benefits:
> 1. Consistency and Usability:
> * Single command pattern for all object types
> * Consistent parameter naming and behavior
> * Unified help system and documentation
> * Reduced learning curve for new users
> 2. Code Maintainability:
> * Expected ~75% reduction in command-related code
> * Centralized error handling
> * Shared pagination and filtering logic
> * Common JSON handling for all object types
> 3. Enhanced Features:
> * Built-in CSV output support
> * Consistent table formatting
> * Property auto-completion
> * Rich help documentation for each object type
> h3. Proposed Implementation:
> 1. Core Components:
> * CrudCommand interface: Would define CRUD operations
> * BaseCrudCommand: Would provide common implementation
> * UnomiCrudCommand: Would handle main command routing
> * Type-specific implementations (e.g., RuleCrudCommand, ProfileCrudCommand)
> 2. Key Features:
> * OSGi service-based architecture
> * Dynamic command registration
> * JSON-based object serialization
> * Flexible output formatting
> 3. Integration Points:
> * Persistence service integration
> * Security service integration
> * Transaction handling
> * Event system integration
> h3. Testing Strategy:
> 1. Unit Tests:
> * Core command functionality
> * Object serialization/deserialization
> * Error handling
> * Parameter validation
> 2. Integration Tests:
> * End-to-end command execution
> * Service integration
> * Transaction handling
> * Security integration
> h3. Migration Plan:
> 1. Phase 1:
> * Implement core framework
> * Convert one object type as proof of concept
> * Gather feedback from team
> 2. Phase 2:
> * Convert remaining object types
> * Keep old commands temporarily
> * Update documentation
> 3. Phase 3:
> * Deprecate old commands
> * Remove old command code
> * Finalize documentation
> h3. Success Metrics:
> 1. Code Quality:
> * Reduction in code lines
> * Improved test coverage
> * Reduced duplicate code
> * Fewer bug reports
> 2. User Experience:
> * Reduced command learning time
> * Fewer user errors
> * Improved help system usage
> * Positive user feedback
> h3. Risks and Mitigation:
> 1. Learning Curve:
> * Comprehensive documentation
> * Interactive help system
> * Example-driven guides
> * Gradual migration
> 2. Migration Challenges:
> * Maintain backward compatibility
> * Phased approach
> * Clear deprecation notices
> * Migration guides
> This unified approach would significantly improve the maintainability and
> usability of Unomi's shell interface while providing a solid foundation for
> future extensions.
> h3. Next Steps:
> 1. Review and feedback from team
> 2. Detailed technical design document
> 3. Proof of concept implementation
> 4. User experience testing
> 5. Full implementation plan
> Would you like to proceed with this proposal?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)