buster/api/prds/active/sharing_user_lookup.md

86 lines
2.3 KiB
Markdown
Raw Normal View History

2025-03-19 22:57:20 +08:00
# User Lookup by Email PRD
## Overview
This PRD outlines the implementation of a user lookup functionality by email address within the sharing access controls system. This component is essential for enabling email-based sharing features.
## Background
When sharing assets with users, it's more user-friendly to use email addresses rather than user IDs. This requires a reliable way to look up users by their email addresses.
## Goals
- Implement a function to find users by email address
- Return appropriate user information needed for sharing
- Handle cases where users don't exist
- Ensure proper error handling
## Non-Goals
- Creating or modifying user records
- Implementing complex user search functionality
- Handling authentication or authorization
## Technical Design
### Component: User Lookup Module
Create a new module `user_lookup.rs` in the sharing library with the following functionality:
```rust
pub async fn find_user_by_email(email: &str) -> Result<Option<User>> {
// Implementation details
}
```
### Implementation Details
1. The function will query the database to find a user with the given email address
2. If a user is found, return the user object
3. If no user is found, return None
4. Handle any database errors appropriately
### Database Query
The function will use the following query pattern:
```rust
users::table
.filter(users::email.eq(email))
.filter(users::deleted_at.is_null())
.first::<User>(&mut conn)
.optional()
.await
```
### Error Handling
The function should handle the following error cases:
- Database connection errors
- Query execution errors
- Invalid email format
## Testing Strategy
### Unit Tests
- Test finding an existing user
- Test handling a non-existent user
- Test error handling for database issues
### Integration Tests
- Test the function in combination with permission creation
## Dependencies
- Database models and schema
- Diesel ORM
- Error handling utilities
## Implementation Plan
1. ✅ Create the `user_lookup.rs` file
2. ✅ Implement the `find_user_by_email` function
3. ✅ Add error handling
4. ✅ Write tests
5. ✅ Update the library exports in `lib.rs`
2025-03-19 22:57:20 +08:00
## Success Criteria
- ✅ Function correctly finds users by email
- ✅ Appropriate error handling is implemented
- ✅ Tests pass successfully
- ✅ Code is well-documented