Implement RBAC API adapters
- Dominant language
- Python
- Stars
- 670
- Forks
- 183
- Avg merge
- 17h 7m
- Merged PRs (30d)
- 358
Description
## Overview
Implement data conversion adapters for the RBAC management REST API. Adapters transform between service layer data structures and API DTOs, handling complex query building and filtering logic.
## Scope
### 1. Role Adapter
Location: `src/ai/backend/manager/api/rbac/role_adapter.py`
**Methods:**
- `convert_to_dto(data: RoleData | RoleDetailData) -> RoleDTO`
- Converts repository layer role data to API DTO
- Handles both simple and detailed role data structures
- `build_querier(request: SearchRolesRequest) -> BatchQuerier`
- Converts search request to repository querier
- Applies filters, sorting, and pagination
- `_convert_filter(filter: RoleFilter) -> list[QueryCondition]`
- Transforms API filter to repository query conditions
- Handles name patterns, source, status filtering
- `_convert_order(order: RoleOrder) -> QueryOrder`
- Maps API sort fields to repository ordering
- Supports multiple sort fields
- `_build_pagination(limit: int, offset: int) -> OffsetPagination`
- Creates pagination object for queries
### 2. Assigned User Adapter
Location: `src/ai/backend/manager/api/rbac/assigned_user_adapter.py`
**Methods:**
- `convert_to_dto(data: AssignedUserData) -> AssignedUserDTO`
- Converts assigned user data to API DTO
- `build_querier(request: SearchUsersAssignedToRoleRequest) -> BatchQuerier`
- Converts user search request to querier
- Applies user-specific filters and sorting
- `_convert_filter(filter: AssignedUserFilter) -> list[QueryCondition]`
- Transforms user filter conditions
- `_convert_order(order: AssignedUserOrder) -> QueryOrder`
- Maps user sort fields
## Technical Requirements
### Input Types (from BA-3377)
- Request DTOs: `SearchRolesRequest`, `SearchUsersAssignedToRoleRequest`, etc.
- Response DTOs: `RoleDTO`, `AssignedUserDTO`
### Output Types (to Repository Layer)
- `BatchQuerier`: Repository query builder
- `QueryCondition`: Filter conditions
- `QueryOrder`: Sorting specifications
- `OffsetPagination`: Pagination metadata
### Conversion Logic
- Handle null/optional fields gracefully
- Validate enum conversions (RoleSource, RoleStatus)
- Convert string patterns to SQL LIKE expressions
- Map API field names to database column names
## Architecture
```
Request DTO (API Layer)
↓
Adapter.build_querier()
↓
BatchQuerier (Repository Layer)
↓
Database Query
Database Result
↓
Adapter.convert_to_dto()
↓
Response DTO (API Layer)
```
## Dependencies
### Requires (BA-3377)
- All Request/Response DTOs
- Filter and Order classes
### Provides To (BA-3379)
- Data conversion utilities for handlers
- Query building logic
### Internal Dependencies
- `ai.backend.manager.data.permission.role` for data structures
- `ai.backend.manager.repositories` for querier types
## Acceptance Criteria
- RoleAdapter with all 5 methods implemented
- AssignedUserAdapter with all 4 methods implemented
- Filter conversion handles all field types correctly
- Order conversion supports multiple sort fields
- Pagination correctly applies limit/offset
- Type checks pass (`pants check`)
- All adapter classes properly exported
## Estimated Effort
**Story Points**: 3
**Lines of Code**: ~200 lines
## Related Issues
- GitHub: #7315 (tentative, may change)
- Parent Branch: feat/rearrange-rbac-data-type
- Depends On: BA-3377 (DTOs must exist first)
- Blocks: BA-3379 (Handlers use adapters)
JIRA Issue: BA-3378
Contributor guide
Assessment
This issue has not been assessed yet.