Skip to content

Commit e0cd530

Browse files
committed
Refined sample project
1 parent a78328a commit e0cd530

File tree

6 files changed

+60
-22
lines changed

6 files changed

+60
-22
lines changed

sample/ellar-and-django-orm/ellar_and_django_orm/apps/event/controllers.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def index(self):
1414
from ellar.common import Controller, ControllerBase, get, post
1515

1616
from ...interfaces.events_repository import IEventRepository
17-
from .schemas import EventSchema, EventSchemaOut
17+
from .schemas import EventSchemaIn, EventSchemaOut
1818

1919

2020
@Controller("/event")
@@ -23,10 +23,14 @@ def __init__(self, event_repo: IEventRepository):
2323
self.event_repo = event_repo
2424

2525
@post("/", response={201: EventSchemaOut})
26-
def create_event(self, event: EventSchema):
26+
def create_event(self, event: EventSchemaIn):
2727
event = self.event_repo.create_event(**event.dict())
2828
return 201, event
2929

30-
@get("/", response=t.List[EventSchema], name="event-list")
30+
@get("/", response=t.List[EventSchemaOut], name="event-list")
3131
def list_events(self):
3232
return list(self.event_repo.list_events())
33+
34+
@get("/{event_id:int}", response=EventSchemaOut, name="event-detail")
35+
def get_event_by_id(self, event_id: int):
36+
return self.event_repo.get_by_id(event_id)

sample/ellar-and-django-orm/ellar_and_django_orm/apps/event/schemas.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ASampleDTO(DataclassSerializer):
1919
from ellar.common import Serializer
2020

2121

22-
class EventSchema(Serializer):
22+
class EventSchemaIn(Serializer):
2323
title: str
2424
start_date: date
2525
end_date: date
@@ -30,3 +30,6 @@ class Config:
3030

3131
class EventSchemaOut(Serializer):
3232
id: int
33+
title: str
34+
start_date: date
35+
end_date: date
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import typing as t
2+
from datetime import datetime
3+
4+
import ellar.common as ec
5+
6+
class EventCategoryDTO(ec.Serializer):
7+
id: int
8+
name: str
9+
10+
11+
class EventDTO(ec.Serializer):
12+
id: int
13+
title: str
14+
category: t.Optional[EventCategoryDTO]
15+
start_date: datetime
16+
end_date: datetime
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import typing as t
22
from abc import abstractmethod
3-
4-
if t.TYPE_CHECKING:
5-
from ..wsgi_django.db_models.models import Event
3+
from .dto import EventDTO
64

75

86
class IEventRepository:
97
@abstractmethod
10-
def create_event(self, **kwargs: t.Dict) -> "Event":
8+
def create_event(self, **kwargs: t.Dict) -> EventDTO:
9+
pass
10+
11+
@abstractmethod
12+
def list_events(self) -> t.List[EventDTO]:
1113
pass
1214

1315
@abstractmethod
14-
def list_events(self) -> t.List["Event"]:
16+
def get_by_id(self, event_id: t.Any) -> EventDTO:
1517
pass
Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,43 @@
11
import typing as t
2+
3+
from asgiref.sync import sync_to_async
4+
5+
import ellar.common as ec
26
from datetime import datetime, timedelta
37

48
from ellar.di import injectable
59

610
from ..interfaces.events_repository import IEventRepository
711
from ..wsgi_django.db_models.models import Event
12+
from ..interfaces.dto import EventDTO
813

914

1015
@injectable
1116
class EventRepository(IEventRepository):
17+
1218
_dummy_data = {
1319
"title": "TestEvent1Title",
1420
"start_date": str(datetime.now().date()),
1521
"end_date": str((datetime.now() + timedelta(days=5)).date()),
1622
}
1723

18-
def create_dummy_events(self):
19-
for i in range(3):
20-
object_data = self._dummy_data.copy()
21-
object_data.update(title=f"{object_data['title']}_{i + 1}")
22-
Event.objects.create(**object_data)
23-
print("Done")
24+
def _seed(self) -> None:
25+
if not Event.objects.exists():
26+
for i in range(10):
27+
object_data = self._dummy_data.copy()
28+
object_data.update(title=f"{object_data['title']}_{i + 1}")
29+
Event.objects.create(**object_data)
30+
31+
def create_event(self, **kwargs: t.Dict) -> EventDTO:
32+
event = Event.objects.create(**kwargs)
33+
return EventDTO.from_orm(event)
2434

25-
def create_event(self, **kwargs: t.Dict) -> "Event":
26-
return Event.objects.create(**kwargs)
35+
def list_events(self) -> t.List[EventDTO]:
36+
self._seed()
37+
return [EventDTO.from_orm(event) for event in Event.objects.all()]
2738

28-
def list_events(self) -> t.List["Event"]:
29-
self.create_dummy_events()
30-
return Event.objects.all()
39+
def get_by_id(self, event_id: t.Any) -> EventDTO:
40+
event = Event.objects.filter(id=event_id).first()
41+
if not event:
42+
raise ec.NotFound()
43+
return EventDTO.from_orm(event)

sample/ellar-and-django-orm/ellar_and_django_orm/wsgi_django/db_models/models/event.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ class Event(models.Model):
1010
category = models.OneToOneField(
1111
Category, null=True, blank=True, on_delete=models.SET_NULL
1212
)
13-
start_date = models.DateField(auto_now=True)
14-
end_date = models.DateField(auto_now_add=True)
13+
start_date = models.DateField()
14+
end_date = models.DateField()

0 commit comments

Comments
 (0)