Skip to content

Commit d6999d6

Browse files
committed
feat: adds service factory
1 parent a029e97 commit d6999d6

File tree

9 files changed

+194
-486
lines changed

9 files changed

+194
-486
lines changed

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ repos:
2525
rev: v0.19.1
2626
hooks:
2727
- id: slotscheck
28-
exclude: test_*|docs|migrations|scripts
28+
exclude: test_*|docs|src/app/db/migrations|tools|manage.py
2929
entry: env PYTHONPATH=src slotscheck
3030
- repo: https://github.com/pre-commit/mirrors-mypy
3131
rev: v1.14.1

src/app/db/migrations/versions/2025-01-13_users_and_teams_1c703154d1d8.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""Users and Teams
33
44
Revision ID: 1c703154d1d8
5-
Revises:
5+
Revises:
66
Create Date: 2025-01-13 18:19:37.270730+00:00
77
88
"""

src/app/domain/accounts/controllers/roles.py

-15
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,13 @@
22

33
from __future__ import annotations
44

5-
from uuid import UUID
6-
75
from litestar import Controller
86

97
from app.domain.accounts.guards import requires_superuser
10-
from app.lib.deps import create_filter_dependencies
118

129

1310
class RoleController(Controller):
1411
"""Handles the adding and removing of new Roles."""
1512

1613
tags = ["Roles"]
1714
guards = [requires_superuser]
18-
dependencies = {
19-
"filters": create_filter_dependencies(
20-
{
21-
"id_filter": UUID,
22-
"created_at": True,
23-
"updated_at": True,
24-
"pagination_size": 5,
25-
"sort_field": "name",
26-
"search_fields": ["name", "slug"],
27-
},
28-
),
29-
}

src/app/domain/accounts/controllers/users.py

+2-15
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from __future__ import annotations
44

55
from typing import TYPE_CHECKING, Annotated
6-
from uuid import UUID
76

87
from litestar import Controller, delete, get, patch, post
98
from litestar.di import Provide
@@ -13,9 +12,10 @@
1312
from app.domain.accounts.deps import provide_users_service
1413
from app.domain.accounts.guards import requires_superuser
1514
from app.domain.accounts.schemas import User, UserCreate, UserUpdate
16-
from app.lib.deps import create_filter_dependencies
1715

1816
if TYPE_CHECKING:
17+
from uuid import UUID
18+
1919
from advanced_alchemy.filters import FilterTypes
2020
from advanced_alchemy.service import OffsetPagination
2121

@@ -29,19 +29,6 @@ class UserController(Controller):
2929
guards = [requires_superuser]
3030
dependencies = {
3131
"users_service": Provide(provide_users_service),
32-
"filters": Provide(
33-
create_filter_dependencies(
34-
{
35-
"id_filter": UUID,
36-
"created_at": True,
37-
"updated_at": True,
38-
"pagination_size": 20,
39-
"sort_field": "email",
40-
"sort_order": "asc",
41-
"search_fields": ["name", "email"],
42-
},
43-
)
44-
),
4532
}
4633

4734
@get(operation_id="ListUsers", path=urls.ACCOUNT_LIST, cache=60)

src/app/domain/tags/controllers.py

+3-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
from typing import TYPE_CHECKING, Annotated
4-
from uuid import UUID
54

65
from advanced_alchemy.extensions.litestar.dto import SQLAlchemyDTO
76
from litestar import Controller, delete, get, patch, post
@@ -11,11 +10,13 @@
1110
from app.domain.accounts.guards import requires_active_user, requires_superuser
1211
from app.domain.tags.services import TagService
1312
from app.lib import dto
14-
from app.lib.deps import create_filter_dependencies, create_service_provider
13+
from app.lib.deps import create_service_provider
1514

1615
from . import urls
1716

1817
if TYPE_CHECKING:
18+
from uuid import UUID
19+
1920
from advanced_alchemy.filters import FilterTypes
2021
from advanced_alchemy.service import OffsetPagination
2122
from litestar.dto import DTOData
@@ -44,16 +45,6 @@ class TagController(Controller):
4445

4546
guards = [requires_active_user]
4647
dependencies = {
47-
"filters": create_filter_dependencies(
48-
{
49-
"id_filter": UUID,
50-
"created_at": True,
51-
"updated_at": True,
52-
"pagination_size": 10,
53-
"search_fields": ["name", "slug"],
54-
"search_is_case_sensitive": False,
55-
},
56-
),
5748
"tags_service": create_service_provider(
5849
TagService,
5950
load=[selectinload(m.Tag.teams, recursion_depth=2)],

src/app/domain/teams/controllers/teams.py

+6-22
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from __future__ import annotations
44

55
from typing import TYPE_CHECKING, Annotated
6-
from uuid import UUID
76

87
from litestar import Controller, delete, get, patch, post
98
from sqlalchemy import select
@@ -15,32 +14,22 @@
1514
from app.domain.teams.guards import requires_team_admin, requires_team_membership
1615
from app.domain.teams.schemas import Team, TeamCreate, TeamUpdate
1716
from app.domain.teams.services import TeamService
18-
from app.lib.deps import create_filter_dependencies, create_service_provider
17+
from app.lib.deps import create_service_provider
1918

2019
if TYPE_CHECKING:
20+
from uuid import UUID
21+
22+
from advanced_alchemy.service import FilterTypeT
2123
from advanced_alchemy.service.pagination import OffsetPagination
2224
from litestar.params import Dependency, Parameter
2325

24-
from app.lib.dependencies import FilterTypes
25-
2626

2727
class TeamController(Controller):
2828
"""Teams."""
2929

3030
tags = ["Teams"]
3131
dependencies = {
3232
"teams_service": create_service_provider(TeamService, load=[m.Team.tags, m.Team.members]),
33-
"filters": create_filter_dependencies(
34-
{
35-
"id_filter": UUID,
36-
"created_at": True,
37-
"updated_at": True,
38-
"pagination_size": 1,
39-
"sort_field": "name",
40-
"sort_order": "asc",
41-
"search_fields": ["name", "slug"],
42-
},
43-
),
4433
}
4534
guards = [requires_active_user]
4635

@@ -49,7 +38,7 @@ async def list_teams(
4938
self,
5039
teams_service: TeamService,
5140
current_user: m.User,
52-
filters: Annotated[list[FilterTypes], Dependency(skip_validation=True)],
41+
filters: Annotated[list[FilterTypeT], Dependency(skip_validation=True)],
5342
) -> OffsetPagination[Team]:
5443
"""List teams that your account can access.."""
5544
if not teams_service.can_view_all(current_user):
@@ -60,12 +49,7 @@ async def list_teams(
6049
return teams_service.to_schema(data=results, total=total, schema_type=Team, filters=filters)
6150

6251
@post(operation_id="CreateTeam", path=urls.TEAM_CREATE)
63-
async def create_team(
64-
self,
65-
teams_service: TeamService,
66-
current_user: m.User,
67-
data: TeamCreate,
68-
) -> Team:
52+
async def create_team(self, teams_service: TeamService, current_user: m.User, data: TeamCreate) -> Team:
6953
"""Create a new team."""
7054
obj = data.to_dict()
7155
obj.update({"owner_id": current_user.id, "owner": current_user})

0 commit comments

Comments
 (0)