37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from typing import Optional
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models.user import User
|
|
from app.services.user import UserService
|
|
from app.core.security import create_access_token
|
|
|
|
|
|
class AuthService:
|
|
def __init__(self, db: AsyncSession):
|
|
self.db = db
|
|
self.user_service = UserService(db)
|
|
|
|
async def login(self, username: str, password: str) -> Optional[dict]:
|
|
user = await self.user_service.authenticate(username, password)
|
|
if not user:
|
|
return None
|
|
|
|
access_token = create_access_token(data={"sub": str(user.id)})
|
|
return {
|
|
"access_token": access_token,
|
|
"token_type": "bearer",
|
|
"user": user
|
|
}
|
|
|
|
async def register(self, data: dict) -> Optional[dict]:
|
|
existing_user = await self.user_service.get_user_by_username(data["username"])
|
|
if existing_user:
|
|
return None
|
|
|
|
user = await self.user_service.create_user(data)
|
|
access_token = create_access_token(data={"sub": str(user.id)})
|
|
return {
|
|
"access_token": access_token,
|
|
"token_type": "bearer",
|
|
"user": user
|
|
} |