Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
pull_request:
branches:
- 'main'
- 'develop'

jobs:
mf_data_test:
Expand Down
4 changes: 2 additions & 2 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ SQLAlchemy에서 기본적으로 제공하는 작업 단위 패턴 외에 직접
from sqlalchemy.engine import Engine
from sqlalchemy.ext.asyncio import AsyncEngine

from pymfdata.rdb.command import AsyncSQLAlchemyUnitOfWork, SyncSQLAlchemyUnitOfWork
from pymfdata.rdb.usecase import AsyncSQLAlchemyUnitOfWork, SyncSQLAlchemyUnitOfWork
from pymfdata.rdb.transaction import async_transactional


Expand All @@ -214,7 +214,7 @@ class AsyncMemoUseCaseUnitOfWork(AsyncSQLAlchemyUnitOfWork):
await super().__aenter__()

self.memo_repository: MemoRepository = MemoRepository(self.session)


class MemoUseCase:
def __init__(self, uow: AsyncMemoUseCaseUnitOfWork) -> None:
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ SQLAlchemy uses the unit of work pattern by default, but if you want to define y
from sqlalchemy.engine import Engine
from sqlalchemy.ext.asyncio import AsyncEngine

from pymfdata.rdb.command import AsyncSQLAlchemyUnitOfWork, SyncSQLAlchemyUnitOfWork
from pymfdata.rdb.usecase import AsyncSQLAlchemyUnitOfWork, SyncSQLAlchemyUnitOfWork
from pymfdata.rdb.transaction import async_transactional


Expand All @@ -215,7 +215,7 @@ class AsyncMemoUseCaseUnitOfWork(AsyncSQLAlchemyUnitOfWork):
await super().__aenter__()

self.memo_repository: MemoRepository = MemoRepository(self.session)


class MemoUseCase:
def __init__(self, uow: AsyncMemoUseCaseUnitOfWork) -> None:
Expand Down
11 changes: 10 additions & 1 deletion pymfdata/common/command.py → pymfdata/common/usecase.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from abc import ABC, abstractmethod
from typing import Optional, Type
from typing import final, Optional, Protocol, Type, Union


class AsyncBaseUnitOfWork(ABC):
Expand Down Expand Up @@ -36,3 +36,12 @@ def commit(self):
@abstractmethod
def rollback(self):
raise NotImplementedError("Choice ORM rollback func")


class BaseUseCase(Protocol):
_uow: Union[AsyncBaseUnitOfWork, SyncBaseUnitOfWork]

@property
def uow(self):
assert self._uow is not None
return self._uow
2 changes: 1 addition & 1 deletion pymfdata/rdb/transaction.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import enum

from pymfdata.rdb.command import AsyncSession, Session
from pymfdata.rdb.usecase import AsyncSession, Session


class Propagation(enum.Enum):
Expand Down
2 changes: 1 addition & 1 deletion pymfdata/rdb/command.py → pymfdata/rdb/usecase.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from sqlalchemy.orm import Session
from typing import Optional, Type

from pymfdata.common.command import AsyncBaseUnitOfWork, SyncBaseUnitOfWork
from pymfdata.common.usecase import AsyncBaseUnitOfWork, SyncBaseUnitOfWork


class AsyncSQLAlchemyUnitOfWork(AsyncBaseUnitOfWork):
Expand Down
7 changes: 4 additions & 3 deletions tests/rdb/domain/usecase.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from sqlalchemy.engine import Engine
from sqlalchemy.ext.asyncio import AsyncEngine

from pymfdata.rdb.command import AsyncSQLAlchemyUnitOfWork, SyncSQLAlchemyUnitOfWork
from pymfdata.common.usecase import BaseUseCase
from pymfdata.rdb.usecase import AsyncSQLAlchemyUnitOfWork, SyncSQLAlchemyUnitOfWork
from pymfdata.rdb.transaction import async_transactional

from tests.rdb.domain.dto import MemoRequest
Expand All @@ -28,9 +29,9 @@ def __enter__(self):
self.memo_repository: SyncMemoRepository = SyncMemoRepository(self.session)


class MemoUseCase:
class MemoUseCase(BaseUseCase):
def __init__(self, uow: AsyncMemoUseCaseUnitOfWork) -> None:
self.uow = uow
self._uow = uow

@async_transactional(read_only=True)
async def find_by_id(self, item_id: int):
Expand Down