Compare commits

...

3 Commits

Author SHA1 Message Date
d3b2f4d71a feat: добавлен сервис управления пользователями
All checks were successful
Lint project / lint (push) Successful in 55s
- Создан файл services.py в директории lkeep/apps/auth.
- Определен класс UserService для управления пользователями.
- Реализован метод register_user для регистрации нового пользователя.
- Использованы зависимости UserManager и AuthHandler.
- Добавлены необходимые импорты из модулей schemas, managers и handlers.
2025-01-12 13:00:36 +04:00
aec3f41f4f fix: исправлен инициализатор класса UserManager
- Удалена передача модели пользователя в конструктор.
- Используется默认ная модель `User`.
2025-01-12 13:00:13 +04:00
c9de61e535 refactor: добавлены маршруты аутентификации в FastAPI проект
- Создан новый файл `routes.py` в директории `apps/auth`, содержащий маршруты для регистрации пользователя.
- В файле `__init__.py` в директории `apps` инициализирован роутер `apps_router` и подключен маршрут аутентификации.
- Обновлен файл `main.py` для включения роутера `apps_router`.
2025-01-12 13:00:04 +04:00
5 changed files with 93 additions and 2 deletions

View File

@ -5,3 +5,11 @@
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from fastapi import APIRouter
from lkeep.apps.auth.routes import auth_router
apps_router = APIRouter(prefix="/api/v1")
apps_router.include_router(router=auth_router)

View File

@ -20,7 +20,7 @@ class UserManager:
Класс для управления пользователями.
"""
def __init__(self, model: type[User] = User, db: DBDependency = Depends(DBDependency)) -> None:
def __init__(self, db: DBDependency = Depends(DBDependency)) -> None:
"""
Инициализирует экземпляр класса.
@ -30,7 +30,7 @@ class UserManager:
:type db: DBDependency
"""
self.db = db
self.model = model
self.model = User
async def create_user(self, user: CreateUser) -> UserReturnData:
"""

31
lkeep/apps/auth/routes.py Normal file
View File

@ -0,0 +1,31 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from fastapi import APIRouter, Depends
from starlette import status
from lkeep.apps.auth.schemas import RegisterUser, UserReturnData
from lkeep.apps.auth.services import UserService
auth_router = APIRouter(prefix="/auth", tags=["auth"])
@auth_router.post(path="/register", status_code=status.HTTP_201_CREATED)
async def registration(user: RegisterUser, service: UserService = Depends(UserService)) -> UserReturnData:
"""
Регистрация нового пользователя.
:param user: Данные нового пользователя, который нужно зарегистрировать.
:type user: RegisterUser
:param service: Сервис для взаимодействия с пользователями.
:type service: UserService
:returns: Данные зарегистрированного пользователя.
:rtype: UserReturnData
:raises HTTPException 400: Если данные пользователя некорректны.
"""
return await service.register_user(user=user)

View File

@ -0,0 +1,48 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from fastapi import Depends
from lkeep.apps.auth.handlers import AuthHandler
from lkeep.apps.auth.managers import UserManager
from lkeep.apps.auth.schemas import CreateUser, RegisterUser, UserReturnData
class UserService:
"""
Класс для управления пользователями.
"""
def __init__(
self, manager: UserManager = Depends(UserManager), handler: AuthHandler = Depends(AuthHandler)
) -> None:
"""
Инициализирует экземпляр класса, используя зависимости для управления пользователями и авторизации.
:param manager: Управитель пользователей, отвечающий за CRUD-операции над пользователями.
:type manager: UserManager
:param handler: Обработчик аутентификации и авторизации, который используется для проверки доступа к ресурсам.
:type handler: AuthHandler
"""
self.manager = manager
self.handler = handler
async def register_user(self, user: RegisterUser) -> UserReturnData:
"""
Регистрирует нового пользователя в системе.
:param user: Данные для регистрации пользователя.
:type user: RegisterUser
:return: Данные зарегистрированного пользователя.
:rtype: UserReturnData
"""
hashed_password = await self.handler.get_password_hash(user.password)
new_user = CreateUser(email=user.email, hashed_password=hashed_password)
return await self.manager.create_user(user=new_user)

View File

@ -9,8 +9,12 @@ https://pressanybutton.ru/category/servis-na-fastapi/
import uvicorn
from fastapi import FastAPI
from lkeep.apps import apps_router
app = FastAPI()
app.include_router(router=apps_router)
def start():
uvicorn.run(app="lkeep.main:app", reload=True)