feat: implement user avatars with DiceBear integration
- Add avatar_url field to MemberSettingsUpdate schema - Create AvatarService for generating default avatars using DiceBear - Update auth service to generate avatars on user registration - Add avatar upload UI to settings page - Update settings endpoint to handle avatar URL updates - Display current avatar in settings with upload/generate options Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -12,6 +12,7 @@ from rehearsalhub.config import get_settings
|
||||
from rehearsalhub.db.models import Member
|
||||
from rehearsalhub.repositories.member import MemberRepository
|
||||
from rehearsalhub.schemas.auth import RegisterRequest, TokenResponse
|
||||
from rehearsalhub.services.avatar import AvatarService
|
||||
|
||||
|
||||
def hash_password(plain: str) -> str:
|
||||
@@ -47,11 +48,22 @@ class AuthService:
|
||||
async def register(self, req: RegisterRequest) -> Member:
|
||||
if await self._repo.email_exists(req.email):
|
||||
raise ValueError(f"Email already registered: {req.email}")
|
||||
|
||||
# Create member without avatar first
|
||||
member = await self._repo.create(
|
||||
email=req.email.lower(),
|
||||
display_name=req.display_name,
|
||||
password_hash=hash_password(req.password),
|
||||
)
|
||||
|
||||
# Generate default avatar for new member
|
||||
avatar_service = AvatarService()
|
||||
avatar_url = await avatar_service.generate_default_avatar(member)
|
||||
|
||||
# Update member with avatar URL
|
||||
member.avatar_url = avatar_url
|
||||
await self._session.flush()
|
||||
|
||||
return member
|
||||
|
||||
async def login(self, email: str, password: str) -> TokenResponse | None:
|
||||
|
||||
Reference in New Issue
Block a user