Skip to content

Commit f0d5284

Browse files
committed
ultra super mega refactoring
1 parent 4f24433 commit f0d5284

30 files changed

+182
-152
lines changed

app/api/deps.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,20 @@
88
from fastapi.security import APIKeyHeader
99

1010
from app.logic import Logic as _Logic
11-
from app.models.user import User as _User
11+
from app.models.users.user import User as _User
1212

1313

1414
async def get_logic() -> _Logic:
15-
return await _Logic.create()
15+
async with Logic.create() as logic:
16+
yield logic
1617

1718

1819
Logic = Annotated[_Logic, Depends(get_logic)]
1920

2021

2122
async def get_user(
22-
token: Annotated[str, Depends(APIKeyHeader(name='access-token'))],
23-
logic: Logic,
23+
token: Annotated[str, Depends(APIKeyHeader(name='access-token'))],
24+
logic: Logic,
2425
) -> _User | None:
2526
return await logic.users.retrieve_by_token(token)
2627

app/api/v1/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77
from fastapi import APIRouter
88

9-
from . import users
9+
from . import auth, users
1010

1111
FOLDER_NAME = f'{Path(__file__).parent.name}'
1212

1313
router = APIRouter(prefix=f'/{FOLDER_NAME}', tags=[FOLDER_NAME])
14+
router.include_router(auth.router)
1415
router.include_router(users.router)
1516

1617
__all__ = ['router']
File renamed without changes.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from fastapi import APIRouter
22

33
from app.api import deps
4-
from app.models.token import AccessToken
5-
from app.models.user import UserCreate
4+
from app.models.auth import AccessToken
5+
from app.models.users.user import UserCreate
66

77
router = APIRouter(prefix='/token')
88

@@ -12,7 +12,7 @@ async def token(data: UserCreate, logic: deps.Logic):
1212
"""
1313
Retrieve new access token
1414
"""
15-
return await logic.users.auth.generate_token(**data.model_dump())
15+
return await logic.auth.generate_token(**data.model_dump())
1616

1717

1818
__all__ = ['router']

app/api/v1/users/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44

55
from fastapi import APIRouter
66

7-
from . import auth, create, retrieve
7+
from . import create, retrieve
88

99
router = APIRouter(prefix='/users', tags=['users'])
10-
router.include_router(auth.router)
1110
router.include_router(create.router)
1211
router.include_router(retrieve.router)
1312

app/api/v1/users/create.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from fastapi import APIRouter
22

33
from app.api import deps
4-
from app.models.user import UserCreate, UserRead
4+
from app.models.users.user import UserCreate, UserRead
55

66
router = APIRouter(prefix='/create')
77

@@ -11,7 +11,7 @@ async def create(data: UserCreate, logic: deps.Logic):
1111
"""
1212
Create user
1313
"""
14-
return await logic.users.create(**data.model_dump())
14+
return await logic.users.create(data)
1515

1616

1717
__all__ = ['router']

app/api/v1/users/retrieve.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from fastapi import APIRouter
66

77
from app.api import deps
8-
from app.models.user import UserRead
8+
from app.models.users.user import UserRead
99

1010
router = APIRouter()
1111

app/core/db.py

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

5-
from typing import NoReturn, Self
5+
from typing import Self
66

77
from sqlalchemy.ext.asyncio import (AsyncEngine, async_sessionmaker,
88
create_async_engine)
@@ -15,47 +15,49 @@
1515
class Database:
1616
_instance = None
1717

18-
def __new__(cls, *args, **kwargs) -> Self:
18+
def __new__(cls, *args, **kwargs) -> 'Database':
1919
if cls._instance is None:
2020
cls._instance = super(Database, cls).__new__(cls)
2121
return cls._instance
2222

2323
def __init__(
24-
self,
25-
engine: AsyncEngine | None = None,
26-
session: AsyncSession | None = None,
24+
self,
25+
engine: AsyncEngine | None = None,
26+
session: AsyncSession | None = None,
2727
) -> None:
2828
if not hasattr(self, 'initialized'):
29-
self.engine = engine
30-
self.session = session
29+
self.__engine = engine
30+
self.__session = session
3131
self.initialized = True
3232

33-
async def __set_async_engine(self) -> NoReturn:
34-
if self.engine is None:
35-
self.engine = create_async_engine(
33+
async def __set_async_engine(self) -> None:
34+
if self.__engine is None:
35+
self.__engine = create_async_engine(
3636
settings.pg_dsn.unicode_string(), echo=False, future=True
3737
)
3838

39-
async def __set_async_session(self) -> NoReturn:
40-
if self.session is None:
41-
self.session = async_sessionmaker(
39+
async def __set_async_session(self) -> None:
40+
if self.__session is None:
41+
self.__session = async_sessionmaker(
4242
autocommit=False,
4343
autoflush=False,
44-
bind=self.engine,
44+
bind=self.__engine,
4545
class_=AsyncSession,
4646
expire_on_commit=False,
4747
)()
4848

49-
async def __set_repositories(self) -> NoReturn:
50-
if self.session is not None:
51-
self.user = repos.UserRepo(session=self.session)
49+
async def __set_repositories(self) -> None:
50+
if self.__session is not None:
51+
self.user = repos.UserRepo(session=self.__session)
5252

5353
async def __aenter__(self) -> Self:
5454
await self.__set_async_engine()
5555
await self.__set_async_session()
5656
await self.__set_repositories()
5757
return self
5858

59-
async def __aexit__(self, exc_type, exc_value, traceback) -> NoReturn:
60-
if self.session is not None:
61-
await self.session.close()
59+
async def __aexit__(self, exc_type, exc_value, traceback) -> None:
60+
if self.__session is not None:
61+
await self.__session.commit()
62+
await self.__session.close()
63+
self.__session = None

app/logic/__init__.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,3 @@
1-
from typing import Self
2-
3-
from app.core.db import Database
4-
5-
from .security import Security
6-
from .users import Users
7-
8-
9-
class Logic:
10-
def __init__(self, db: Database):
11-
self.db = db
12-
self.security = Security()
13-
self.users = Users(self)
14-
15-
@classmethod
16-
async def create(cls) -> Self:
17-
async with Database() as db:
18-
return cls(db)
19-
1+
from .logic import Logic
202

213
__all__ = ['Logic']
File renamed without changes.

0 commit comments

Comments
 (0)