2026-01-26 10:30:49 -05:00

103 lines
2.5 KiB
Python

"""
Repository for Profile model operations.
"""
from typing import Optional, List
from django.contrib.auth.models import User
from django.db.models import QuerySet
from backend.core.models import Profile
from backend.core.repositories.base import BaseRepository
class ProfileRepository(BaseRepository[Profile]):
"""
Repository for Profile model operations.
"""
model = Profile
@classmethod
def get_by_user(cls, user: User) -> Optional[Profile]:
"""
Get a profile by user.
Args:
user: The user
Returns:
The profile or None if not found
"""
try:
return Profile.objects.get(user=user)
except Profile.DoesNotExist:
return None
@classmethod
def get_by_email(cls, email: str) -> Optional[Profile]:
"""
Get a profile by email.
Args:
email: The email address
Returns:
The profile or None if not found
"""
return Profile.objects.filter(email=email).first()
@classmethod
def get_by_role(cls, role: str) -> QuerySet[Profile]:
"""
Get profiles by role.
Args:
role: The role
Returns:
List of profiles with the specified role
"""
return Profile.objects.filter(role=role)
@classmethod
def get_admins(cls) -> QuerySet[Profile]:
"""
Get all admin profiles
Returns:
List of admin profiles
"""
return cls.get_by_role('admin')
@classmethod
def get_team_leaders(cls) -> QuerySet[Profile]:
"""
Get all team leader profiles
Returns:
List of team leader profiles
"""
return cls.get_by_role('team_leader')
@classmethod
def get_team_members(cls) -> QuerySet[Profile]:
"""
Get all team member profiles
Returns:
List of team member profiles
"""
return cls.get_by_role('team_member')
@classmethod
def search(cls, search_term: str, search_fields: List[str] = None) -> QuerySet[Profile]:
"""
Search profiles by name or email.
Args:
search_term: The search term
search_fields: List of fields to search in (optional, default fields will be used if not provided)
Returns:
QuerySet of matching profiles
"""
fields = search_fields or ['first_name', 'last_name', 'email', 'user__username', 'user__email']
return super().search(search_term, fields)