8000 ref · ProFastCode/FastAPI_Template@8eba400 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8eba400

Browse files
committed
ref
1 parent 32bef21 commit 8eba400

File tree

6 files changed

+27
-45
lines changed

6 files changed

+27
-45
lines changed

app/api/deps.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Dependencies
33
"""
44

5-
from typing import Annotated
5+
from typing import Annotated, AsyncGenerator
66

77
from fastapi import Depends
88
from fastapi.security import APIKeyHeader
@@ -11,16 +11,16 @@
1111
from app.models.users.user import User as _User
1212

1313

14-
async def get_logic() -> _Logic:
15-
async with Logic.create() as logic:
14+
async def get_logic() -> AsyncGenerator[_Logic, None]:
15+
async with _Logic.create() as logic:
1616
yield logic
1717

1818

1919
Logic = Annotated[_Logic, Depends(get_logic)]
2020

2121

2222
async def get_user(
23-
token: Annotated[str, Depends(APIKeyHeader(name='access-token'))],
23+
token: Annotated[str, Depends(APIKeyHeader(name="access-token"))],
2424
logic: Logic,
2525
) -> _User | None:
2626
return await logic.users.retrieve_by_token(token)

app/api/v1/auth/token.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
from app.models.auth import AccessToken
55
from app.models.users.user import UserCreate
66

7-
router = APIRouter(prefix='/token')
7+
router = APIRouter(prefix="/token")
88

99

10-
@router.post('/', response_model=AccessToken)
10+
@router.post("/", response_model=AccessToken)
1111
async def token(data: UserCreate, logic: deps.Logic):
1212
"""
1313
Retrieve new access token
1414
"""
15-
return await logic.auth.generate_token(**data.model_dump())
15+
return await logic.auth.generate_token(data)
1616

1717

18-
__all__ = ['router']
18+
__all__ = ["router"]

app/core/db.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,21 @@
44

55
from typing import Self
66

7-
from sqlalchemy.ext.asyncio import (AsyncEngine, async_sessionmaker,
8-
create_async_engine)
7+
from sqlalchemy.ext.asyncio import AsyncEngine, async_sessionmaker, create_async_engine
98
from sqlmodel.ext.asyncio.session import AsyncSession
109

1110
from app import repositories as repos
1211
from app.core.settings import settings
1312

1413

1514
class Database:
16-
_instance = None
17-
18-
def __new__(cls, *args, **kwargs) -> 'Database':
19-
if cls._instance is None:
20-
cls._instance = super(Database, cls).__new__(cls)
21-
return cls._instance
22-
2315
def __init__(
2416
self,
2517
engine: AsyncEngine | None = None,
2618
session: AsyncSession | None = None,
2719
) -> None:
28-
if not hasattr(self, 'initialized'):
29-
self.__engine = engine
30-
self.__session = session
31-
self.initialized = True
20+
self.__engine = engine
21+
self.__session = session
3222

3323
async def __set_async_engine(self) -> None:
3424
if self.__engine is None:
@@ -60,4 +50,3 @@ async def __aexit__(self, exc_type, exc_value, traceback) -> None:
6050
if self.__session is not None:
6151
await self.__session.commit()
6252
await self.__session.close()
63-
self.__session = None

app/logic/auth/auth.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,20 @@
22

33
from app.core import exps
44
from app.models.auth import AccessToken
5+
from app.models.users.user import UserCreate
56

67
if TYPE_CHECKING:
78
from app.logic import Logic
89

910

1011
class Auth:
11-
def __init__(self, logic: 'Logic'):
12+
def __init__(self, logic: "Logic"):
1213
self.logic = logic
1314

14-
async def generate_token(
15-
self, email: str, password: str
16-
) -> AccessToken | None:
17-
if (user := await self.logic.db.user.retrieve_by_email(email)) is None:
15+
async def generate_token(self, data: UserCreate) -> AccessToken | None:
16+
if (user := await self.logic.db.user.retrieve_by_email(data.email)) is None:
1817
raise exps.UserNotFoundException()
19-
if not self.logic.security.pwd.checkpwd(password, user.password):
18+
if not self.logic.security.pwd.checkpwd(data.password, user.password):
2019
raise exps.UserIsCorrectException()
21-
access_token = self.logic.security.jwt.encode_token(
22-
{'id': user.id}, 1440
23-
)
20+
access_token = self.logic.security.jwt.encode_token({"id": user.id}, 1440)
2421
return AccessToken(token=access_token)

app/logic/logic.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from contextlib import asynccontextmanager
2-
from typing import AsyncGenerator, Self
2+
from typing import AsyncGenerator
33

44
from app.core.db import Database
55

@@ -11,12 +11,12 @@
1111
class Logic:
1212
def __init__(self, db: Database):
1313
self.db = db
14-
self.security = Security()
15-
self.users = Users(self)
1614
self.auth = Auth(self)
15+
self.users = Users(self)
16+
self.security = Security()
1717

1818
@classmethod
1919
@asynccontextmanager
20-
async def create(cls) -> AsyncGenerator[Self, None]:
20+
async def create(cls) -> AsyncGenerator["Logic", None]:
2121
async with Database() as db:
2222
yield cls(db)

app/logic/users/users.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,19 @@
88

99

1010
class Users:
11-
def __init__(self, logic: 'Logic'):
11+
def __init__(self, logic: "Logic"):
1212
self.logic = logic
1313

14-
async def create(self, model: UserCreate) -> User | None:
15-
if await self.logic.db.user.retrieve_by_email(model.email):
14+
async def create(self, data: UserCreate) -> User | None:
15+
if await self.logic.db.user.retrieve_by_email(data.email):
1616
raise exps.UserExistsException()
1717

18-
model.password = self.logic.security.pwd.hashpwd(model.password)
19-
user = await self.logic.db.user.create(model)
18+
data.password = self.logic.security.pwd.hashpwd(data.password)
19+
user = await self.logic.db.user.create(data)
2020
return user
2121

2222
async def retrieve_by_token(self, token: str) -> User | None:
2323
payload = self.logic.security.jwt.decode_token(token)
24-
if not (
25-
user := await self.logic.db.user.retrieve_one(
26-
ident=payload.get('id')
27-
)
28-
):
24+
if not (user := await self.logic.db.user.retrieve_one(ident=payload.get("id"))):
2925
raise exps.UserNotFoundException()
3026
return user

0 commit comments

Comments
 (0)
0