Merge pull request #3 from IDTS-LAB/ddd-clean-architecture-with-cqrs-… · IDTS-LAB/python-codebase@a256fae · GitHub
Skip to content

Commit a256fae

Browse files
authored
Merge pull request #3 from IDTS-LAB/ddd-clean-architecture-with-cqrs-review-dfff8
Update from task 9d6c2646-8dbc-409e-bccc-824f40edfff8
2 parents 358660d + 1a8a61b commit a256fae

36 files changed

Lines changed: 366 additions & 69 deletions

File tree

‎.gitignore‎

Lines changed: 40 additions & 10 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from pydantic import BaseModel
2+
3+
4+
class CreatePermissionCommand(BaseModel):
5+
resource: str
6+
action: str
7+
description: str | None = None
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from src.modules.authorization.application.create_permission.command import (
2+
CreatePermissionCommand,
3+
)
4+
from src.modules.authorization.domain.entities.permission import Permission
5+
from src.modules.authorization.domain.permissions import permission_key
6+
from src.modules.authorization.domain.repositories.casbin_policy_repository import (
7+
CasbinPolicyRepository,
8+
)
9+
from src.shared.unit_of_work import UnitOfWork
10+
11+
12+
class CreatePermissionHandler:
13+
def __init__(
14+
self,
15+
policy_repo: CasbinPolicyRepository,
16+
unit_of_work: UnitOfWork,
17+
):
18+
self._policy_repo = policy_repo
19+
self._unit_of_work = unit_of_work
20+
21+
async def execute(self, command: CreatePermissionCommand) -> Permission:
22+
permission = Permission.create(
23+
key=permission_key(command.resource, command.action),
24+
resource=command.resource,
25+
action=command.action,
26+
description=command.description,
27+
)
28+
async with self._unit_of_work:
29+
created = await self._policy_repo.create_permission(permission)
30+
await self._unit_of_work.commit()
31+
return created
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from pydantic import BaseModel
2+
3+
4+
class CreateRoleCommand(BaseModel):
5+
name: str
6+
description: str | None = None
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from src.modules.authorization.application.create_role.command import CreateRoleCommand
2+
from src.modules.authorization.domain.entities.role import Role
3+
from src.modules.authorization.domain.repositories.casbin_policy_repository import (
4+
CasbinPolicyRepository,
5+
)
6+
from src.shared.unit_of_work import UnitOfWork
7+
8+
9+
class CreateRoleHandler:
10+
def __init__(
11+
self,
12+
policy_repo: CasbinPolicyRepository,
13+
unit_of_work: UnitOfWork,
14+
):
15+
self._policy_repo = policy_repo
16+
self._unit_of_work = unit_of_work
17+
18+
async def execute(self, command: CreateRoleCommand) -> Role:
19+
role = Role.create(name=command.name, description=command.description)
20+
async with self._unit_of_work:
21+
created = await self._policy_repo.create_role(role)
22+
await self._unit_of_work.commit()
23+
return created
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from uuid import UUID
2+
3+
from pydantic import BaseModel
4+
5+
6+
class DeletePermissionCommand(BaseModel):
7+
permission_id: UUID
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from src.modules.authorization.application.delete_permission.command import (
2+
DeletePermissionCommand,
3+
)
4+
from src.modules.authorization.domain.repositories.casbin_policy_repository import (
5+
CasbinPolicyRepository,
6+
)
7+
from src.shared.unit_of_work import UnitOfWork
8+
9+
10+
class DeletePermissionHandler:
11+
def __init__(
12+
self,
13+
policy_repo: CasbinPolicyRepository,
14+
unit_of_work: UnitOfWork,
15+
):
16+
self._policy_repo = policy_repo
17+
self._unit_of_work = unit_of_work
18+
19+
async def execute(self, command: DeletePermissionCommand) -> None:
20+
async with self._unit_of_work:
21+
await self._policy_repo.delete_permission(command.permission_id)
22+
await self._unit_of_work.commit()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from uuid import UUID
2+
3+
from pydantic import BaseModel
4+
5+
6+
class DeleteRoleCommand(BaseModel):
7+
role_id: UUID
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from src.modules.authorization.application.delete_role.command import DeleteRoleCommand
2+
from src.modules.authorization.domain.repositories.casbin_policy_repository import (
3+
CasbinPolicyRepository,
4+
)
5+
from src.shared.unit_of_work import UnitOfWork
6+
7+
8+
class DeleteRoleHandler:
9+
def __init__(
10+
self,
11+
policy_repo: CasbinPolicyRepository,
12+
unit_of_work: UnitOfWork,
13+
):
14+
self._policy_repo = policy_repo
15+
self._unit_of_work = unit_of_work
16+
17+
async def execute(self, command: DeleteRoleCommand) -> None:
18+
async with self._unit_of_work:
19+
await self._policy_repo.delete_role(command.role_id)
20+
await self._unit_of_work.commit()
Lines changed: 13 additions & 0 deletions

0 commit comments

Comments
 (0)