Ēriks K ef5da867a6 Improve template (#1)
- Created a README file
- Added PyCharm/IntelliJ IDE run configuration
- Squashed bugs related to:
  - Code style
  - Default Postgre database URL schema
- Updated project dependencies

Reviewed-on: #1
Co-authored-by: Ēriks K <git@72.lv>
Co-committed-by: Ēriks K <git@72.lv>
2025-04-05 13:15:41 +03:00

39 lines
1.3 KiB
Python

from service.api.dependencies import QueryParams
from service.core.security import verify_password
from service.crud.user.models import UserPublic, UserRegister
from service.crud.utils import order_queryset
from service.database.models import User
async def authenticate(*, username: str, password: str) -> User | None:
db_user = await get_user_by_username(username=username)
if not db_user:
return None
return db_user if verify_password(password, db_user.password) else None
async def get_user_by_email(*, email: str) -> User | None:
return await User.filter(email=email).first()
async def get_user_by_username(*, username: str) -> User | None:
return await User.filter(username=username).first()
async def get_users(filters: QueryParams) -> list[UserPublic]:
queryset = User.all()
if filters.q:
queryset = queryset.filter(username__icontains=filters.q)
queryset = order_queryset(queryset, filters, "-modified_at")
return [
UserPublic(id=u.id, username=u.username) for u in await queryset.offset(filters.offset).limit(filters.limit)
]
async def register_user(data: UserRegister) -> User:
user_object = User(email=data.email, username=data.username)
user_object.set_password(data.password)
await user_object.save()
await user_object.refresh_from_db()
return user_object