-
Notifications
You must be signed in to change notification settings - Fork 4
Description
🎯 Objective
Implement comprehensive Redis Sorted Set operations following the same detailed pattern as hash.rs, including all essential Sorted Set operations with HTTP REST API, WebSocket support, and TypeScript SDK integration.
📋 Description
Redis Sorted Sets are collections of unique strings where each member is associated with a score. This issue covers implementing all essential Sorted Set operations including ZADD, ZREM, ZSCORE, ZRANK, ZREVRANK, ZRANGE, ZREVRANGE, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZCARD, ZCOUNT, ZINCRBY, ZPOPMAX, ZPOPMIN, and batch operations following the comprehensive hash.rs pattern.
🚀 Priority
High Priority - Phase 1, Redis Completion
📝 Tasks
Task 1: Create Redis Sorted Set Primitives with Test Cases
1.1 Create Sorted Set Primitives (crates/adapter/redis/primitives/sorted_set.rs)
-
Core Sorted Set Operations
- Implement
RedisSortedSetstruct - Basic operations (zadd, zrem, zscore, zcard, zcount)
- Rank operations (zrank, zrevrank)
- Range operations (zrange, zrevrange, zrangebyscore, zrevrangebyscore)
- Score operations (zincrby, zpopmax, zpopmin)
- Management operations (del, exists, ttl, expire)
- Implement
-
Pipeline Operations
-
with_pipeline()method -
zadd_many()- Batch add operations -
zget_many()- Batch get operations -
zrem_many()- Batch remove operations -
zscore_many()- Batch score operations
-
-
Transaction Operations
-
with_transaction()method - Atomic batch operations
- Transaction rollback handling
-
-
Lua Script Operations
-
create_script()method -
eval_script()method - Custom Lua scripts for complex operations
-
1.2 Update Primitives Module (crates/adapter/redis/primitives/mod.rs)
- Add
pub mod sorted_set;to the module exports - Update documentation to include Sorted Set operations
1.3 Unit Tests for Sorted Set Primitives
-
Core Operations Tests
- Test all basic Sorted Set operations
- Test error handling and edge cases
- Test with invalid keys and values
-
Pipeline Tests
- Test batch operations
- Test pipeline efficiency
- Test pipeline error handling
-
Transaction Tests
- Test atomic operations
- Test transaction rollback
- Test concurrent transactions
-
Lua Script Tests
- Test custom Lua scripts
- Test script execution
- Test script error handling
Task 2: Build HTTP and WebSocket APIs with Test Cases
2.1 Create Sorted Set Operations in Common Layer (api/src/routes/common/sorted_set.rs)
-
Data Structures
- Implement
SortedSetOperationstruct - Implement
SortedSetResponsestruct - Implement
SortedSetInfostruct - Implement
SortedSetMemberstruct
- Implement
-
Single Member Operations
- Implement
sorted_set_add()- ZADD operation - Implement
sorted_set_remove()- ZREM operation - Implement
sorted_set_score()- ZSCORE operation - Implement
sorted_set_rank()- ZRANK operation - Implement
sorted_set_revrank()- ZREVRANK operation - Implement
sorted_set_increment()- ZINCRBY operation - Implement
sorted_set_pop_max()- ZPOPMAX operation - Implement
sorted_set_pop_min()- ZPOPMIN operation
- Implement
-
Range Operations
- Implement
sorted_set_range()- ZRANGE operation - Implement
sorted_set_revrange()- ZREVRANGE operation - Implement
sorted_set_range_by_score()- ZRANGEBYSCORE operation - Implement
sorted_set_revrange_by_score()- ZREVRANGEBYSCORE operation - Implement
sorted_set_get_all()- Get all members with scores
- Implement
-
Sorted Set Management
- Implement
delete_sorted_set()- Delete entire sorted set - Implement
sorted_set_exists()- Check if sorted set exists - Implement
get_sorted_set_ttl()- Get sorted set TTL - Implement
set_sorted_set_ttl()- Set sorted set TTL - Implement
get_sorted_set_cardinality()- ZCARD operation - Implement
get_sorted_set_count()- ZCOUNT operation
- Implement
-
Batch Operations
- Implement
get_multiple_sorted_set_scores()- Get scores from multiple sets - Implement
add_multiple_sorted_sets()- Add to multiple sorted sets - Implement
remove_multiple_sorted_set_members()- Remove from multiple sets - Implement
get_multiple_sorted_set_cardinalities()- Get cardinalities of multiple sets
- Implement
2.2 Create HTTP Routes (api/src/routes/redis/sorted_set.rs)
-
Request Structures
-
AddSortedSetMemberRequest- For add operations -
RemoveSortedSetMemberRequest- For remove operations -
IncrementSortedSetScoreRequest- For increment operations -
RangeSortedSetRequest- For range operations -
BatchAddSortedSetRequest- For batch add operations -
BatchGetSortedSetRequest- For batch get operations -
SetSortedSetTtlRequest- For TTL operations
-
-
Single Member Handlers
-
add_member_handler()- POST /redis/sorted-set/:key/add -
remove_member_handler()- DELETE /redis/sorted-set/:key/:member -
get_score_handler()- GET /redis/sorted-set/:key/:member/score -
get_rank_handler()- GET /redis/sorted-set/:key/:member/rank -
get_revrank_handler()- GET /redis/sorted-set/:key/:member/revrank -
increment_score_handler()- POST /redis/sorted-set/:key/:member/increment -
pop_max_handler()- DELETE /redis/sorted-set/:key/pop-max -
pop_min_handler()- DELETE /redis/sorted-set/:key/pop-min
-
-
Range Operation Handlers
-
get_range_handler()- GET /redis/sorted-set/:key/range -
get_revrange_handler()- GET /redis/sorted-set/:key/revrange -
get_range_by_score_handler()- GET /redis/sorted-set/:key/range-by-score -
get_revrange_by_score_handler()- GET /redis/sorted-set/:key/revrange-by-score -
get_all_handler()- GET /redis/sorted-set/:key
-
-
Sorted Set Management Handlers
-
delete_sorted_set_handler()- DELETE /redis/sorted-set/:key -
sorted_set_exists_handler()- GET /redis/sorted-set/:key/exists -
get_sorted_set_ttl_handler()- GET /redis/sorted-set/:key/ttl -
set_sorted_set_ttl_handler()- POST /redis/sorted-set/:key/ttl -
get_cardinality_handler()- GET /redis/sorted-set/:key/cardinality -
get_count_handler()- GET /redis/sorted-set/:key/count
-
-
Batch Operation Handlers
-
batch_get_scores_handler()- POST /redis/sorted-set/batch/scores -
batch_add_members_handler()- POST /redis/sorted-set/batch/add -
batch_remove_members_handler()- POST /redis/sorted-set/batch/remove -
batch_get_cardinalities_handler()- POST /redis/sorted-set/batch/cardinalities
-
-
Route Configuration
- Create
create_redis_sorted_set_routes()function - Add all routes with proper HTTP methods
- Add method not allowed handler
- Integrate with main router
- Create
2.3 Create WebSocket Routes (api/src/routes/redis_ws/sorted_set.rs)
-
WebSocket Message Types
-
SortedSetWsMessageenum with all operations -
SortedSetWsResponseenum for responses - Implement serialization/deserialization
-
-
WebSocket Handlers
-
redis_ws_sorted_set_handler()- Main WebSocket handler -
handle_redis_ws_sorted_set_socket()- Socket message processing - Support all Sorted Set operations via WebSocket
-
2.4 API Integration
- Update Main Router
- Add Sorted Set routes to main router
- Add WebSocket Sorted Set routes
- Update route documentation
2.5 API Tests
-
Common Layer Tests (
api/tests/common/sorted_set.rs)- Test all Sorted Set operations in common layer
- Test error handling
- Test edge cases
-
HTTP Route Tests (
api/tests/redis/sorted_set.rs)- Test all HTTP endpoints
- Test request/response formats
- Test error responses
-
WebSocket Tests (
api/tests/redis_ws/sorted_set.rs)- Test WebSocket connections
- Test WebSocket message handling
- Test real-time operations
Task 3: Build TypeScript SDK with Test Cases
3.1 Add Sorted Set Client (ts/src/clients/sorted-set.ts)
-
Sorted Set Client Class
- Create
SortedSetClientclass extendingBaseClient - Implement all Sorted Set operations
- Add proper error handling
- Add TypeScript types
- Create
-
Sorted Set Operations
-
zadd(key, member, score)- Add member with score -
zrem(key, member)- Remove member -
zscore(key, member)- Get member score -
zrank(key, member)- Get member rank -
zrevrank(key, member)- Get member reverse rank -
zincrby(key, member, increment)- Increment member score -
zpopmax(key, count?)- Pop members with highest scores -
zpopmin(key, count?)- Pop members with lowest scores -
zrange(key, start, stop, withscores?)- Get range by rank -
zrevrange(key, start, stop, withscores?)- Get reverse range by rank -
zrangebyscore(key, min, max, withscores?, limit?)- Get range by score -
zrevrangebyscore(key, max, min, withscores?, limit?)- Get reverse range by score -
zcard(key)- Get cardinality -
zcount(key, min, max)- Count members in score range
-
-
Batch Operations
-
batchZadd(operations)- Batch add members -
batchZrem(operations)- Batch remove members -
batchZscore(operations)- Batch get scores -
batchZcard(keys)- Batch get cardinalities
-
3.2 Add Sorted Set Types (ts/src/types/sorted-set.ts)
- Type Definitions
-
SortedSetOperationinterface -
SortedSetResponseinterface -
SortedSetInfointerface -
SortedSetMemberinterface - WebSocket message types
-
3.3 Add Sorted Set WebSocket Client (ts/src/clients/sorted-set.ts)
- WebSocket Support
-
createSortedSetWebSocket()method - WebSocket message handling
- Real-time Sorted Set operations
-
3.4 SDK Integration
- Update SDK Exports
- Add Sorted Set client to main exports
- Add Sorted Set types to main exports
- Update SDK documentation
3.5 TypeScript SDK Tests
-
TypeScript SDK Tests (
ts/src/__tests__/sorted-set-client.test.ts)- Test all Sorted Set operations
- Test WebSocket operations
- Test error handling
-
End-to-End Tests
- Test Sorted Set operations with real Redis
- Test concurrent Sorted Set operations
- Test Sorted Set operations with large datasets
📊 Acceptance Criteria
- All basic Sorted Set operations (ZADD, ZREM, ZSCORE, ZRANK, ZREVRANK, ZCARD, ZCOUNT) implemented
- Advanced Sorted Set operations (ZRANGE, ZREVRANGE, ZRANGEBYSCORE, ZREVRANGEBYSCORE, ZINCRBY, ZPOPMAX, ZPOPMIN) implemented
- Batch operations for performance
- HTTP REST API endpoints working with proper request/response structures
- WebSocket support for real-time Sorted Set operations
- TypeScript SDK with full Sorted Set support
- Comprehensive test coverage (>90%)
- Documentation updated with Sorted Set examples
- Follows same pattern as hash.rs implementation
🔧 Technical Details
API Endpoints (Following hash.rs pattern)
# Single member operations
POST /redis/sorted-set/:key/add
DELETE /redis/sorted-set/:key/:member
GET /redis/sorted-set/:key/:member/score
GET /redis/sorted-set/:key/:member/rank
GET /redis/sorted-set/:key/:member/revrank
POST /redis/sorted-set/:key/:member/increment
DELETE /redis/sorted-set/:key/pop-max
DELETE /redis/sorted-set/:key/pop-min
# Range operations
GET /redis/sorted-set/:key/range?start=0&stop=-1&withscores=false
GET /redis/sorted-set/:key/revrange?start=0&stop=-1&withscores=false
GET /redis/sorted-set/:key/range-by-score?min=0&max=100&withscores=false&limit=10
GET /redis/sorted-set/:key/revrange-by-score?max=100&min=0&withscores=false&limit=10
GET /redis/sorted-set/:key
# Sorted set management
DELETE /redis/sorted-set/:key
GET /redis/sorted-set/:key/exists
GET /redis/sorted-set/:key/ttl
POST /redis/sorted-set/:key/ttl
GET /redis/sorted-set/:key/cardinality
GET /redis/sorted-set/:key/count
# Batch operations
POST /redis/sorted-set/batch/scores
POST /redis/sorted-set/batch/add
POST /redis/sorted-set/batch/remove
POST /redis/sorted-set/batch/cardinalities🏷️ Labels
enhancementredishigh-priorityphase-1backendfrontend