Skip to content

Commit

Permalink
Add tags.
Browse files Browse the repository at this point in the history
  • Loading branch information
n1nj4t4nuk1 committed Dec 16, 2021
1 parent 0b6ad33 commit 012d8f1
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from src.contexts.backoffice.users.domain.entities.UserId import UserId
from src.contexts.photostore.photo.domain.entities.PhotoId import PhotoId
from src.contexts.photostore.photo.domain.entities.PhotoName import PhotoName
from src.contexts.photostore.photo.domain.entities.PhotoTag import PhotoTag
from src.contexts.photostore.photo.domain.entities.PhotoTags import PhotoTags
from src.contexts.shared.domain.DomainEvent import DomainEvent


Expand All @@ -19,13 +21,15 @@ def __init__(
photo_id: PhotoId,
user_id: UserId,
photo_name: PhotoName,
tags: PhotoTags,
event_id: Optional[str] = None,
occurred_on: Optional[datetime] = None,
):
super().__init__(self.EVENT_TYPE, aggregate_id, event_id, occurred_on)
self.photo_id = photo_id
self.user_id = user_id
self.photo_name = photo_name
self.tags = tags

@staticmethod
def create_from_primitives(raw_data: Dict[str, Any]):
Expand All @@ -34,12 +38,13 @@ def create_from_primitives(raw_data: Dict[str, Any]):
PhotoId(deep_find(raw_data, 'data.attributes.id')),
UserId(deep_find(raw_data, 'data.attributes.user-id')),
PhotoName(deep_find(raw_data, 'data.attributes.name')),
PhotoTags([PhotoTag(tag) for tag in deep_find(raw_data, 'data.attributes.tags')]),
event_id=deep_find(raw_data, 'data.id'),
occurred_on=deep_find(raw_data, 'data.occurred-on')
occurred_on=deep_find(raw_data, 'data.occurred-on'),
)
return photo

def to_primitives(self) -> Any:
def to_primitives(self) -> Dict[Any, Any]:
return {
'data': {
'id': self.id,
Expand All @@ -51,7 +56,8 @@ def to_primitives(self) -> Any:
'id': self.photo_id.value(),
'user-id': self.user_id.value(),
'name': self.photo_name.value(),
}
'tags': self.tags.values(),
},
},
'meta': {
'attempts': 0,
Expand Down
20 changes: 16 additions & 4 deletions src/contexts/photostore/photo/domain/entities/Photo.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,33 @@
from src.contexts.photostore.photo.domain.entities.PhotoFile import PhotoFile
from src.contexts.photostore.photo.domain.entities.PhotoId import PhotoId
from src.contexts.photostore.photo.domain.entities.PhotoName import PhotoName
from src.contexts.photostore.photo.domain.entities.PhotoTag import PhotoTag
from src.contexts.photostore.photo.domain.entities.PhotoTags import PhotoTags
from src.contexts.photostore.photo.domain.entities.UserId import UserId
from src.contexts.shared.domain.valueobj.AggregateRoot import AggregateRoot


class Photo(AggregateRoot):

def __init__(self, photo_id: PhotoId, name: PhotoName, user_id: UserId, file: PhotoFile):
def __init__(
self,
photo_id: PhotoId,
name: PhotoName,
user_id: UserId,
file: PhotoFile,
tags: PhotoTags,
):
super().__init__()
self.id = photo_id
self.name = name
self.user_id = user_id
self.file = file
self.tags = tags

@staticmethod
def create(photo_id: PhotoId, name: PhotoName, user_id: UserId, file: PhotoFile):
photo = Photo(photo_id, name, user_id, file)
event = PhotoCreatedDomainEvent(photo.id.value(), photo_id, user_id, name)
def create(photo_id: PhotoId, name: PhotoName, user_id: UserId, file: PhotoFile, tags: PhotoTags):
photo = Photo(photo_id, name, user_id, file, tags)
event = PhotoCreatedDomainEvent(photo.id.value(), photo_id, user_id, name, tags)
photo.record_event(event)
return photo

Expand All @@ -31,6 +41,7 @@ def create_from_primitives(raw_data: Dict[str, Any]):
PhotoName(raw_data.get('name')),
UserId(raw_data.get('user-id')),
PhotoFile(raw_data.get('file')),
PhotoTags([PhotoTag(tag) for tag in raw_data.get('tags', default=[])]),
)
return photo

Expand All @@ -39,4 +50,5 @@ def to_primitives(self) -> Union[Dict, List]:
'id': self.id.value(),
'name': self.name.value(),
'user-id': self.user_id.value(),
'tags': self.tags.values(),
}
7 changes: 7 additions & 0 deletions src/contexts/photostore/photo/domain/entities/PhotoTag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from src.contexts.shared.domain.valueobj.ValueObject import ValueObject


class PhotoTag(ValueObject):

def __init__(self, value: str):
super().__init__(value)
14 changes: 14 additions & 0 deletions src/contexts/photostore/photo/domain/entities/PhotoTags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from typing import List

from src.contexts.photostore.photo.domain.entities.PhotoTag import PhotoTag
from src.contexts.shared.domain.valueobj.ValueObject import ValueObject


class PhotoTags(ValueObject):

def __init__(self, value: List[PhotoTag]):
super().__init__(value)

def values(self):
tags: List[PhotoTag] = self._value
return [tag.value() for tag in tags]
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
from datetime import datetime
from typing import Any, Optional
from typing import Any, Optional, Dict

from deepfinder import deep_find

from src.contexts.backoffice.users.domain.entities.UserId import UserId
from src.contexts.photostore.photo.domain.entities.PhotoId import PhotoId
from src.contexts.photostore.photo.domain.entities.PhotoName import PhotoName
from src.contexts.photostore.photo.domain.entities.PhotoTag import PhotoTag
from src.contexts.photostore.photo.domain.entities.PhotoTags import PhotoTags
from src.contexts.shared.domain.DomainEvent import DomainEvent
from src.contexts.shared.domain.valueobj.AggregateRoot import AggregateRoot

Expand All @@ -12,22 +19,46 @@ class PhotoRegistryCreatedDomainEvent(DomainEvent):
def __init__(
self,
aggregate_id: str,
entity: AggregateRoot,
photo_id: PhotoId,
user_id: UserId,
photo_name: PhotoName,
tags: PhotoTags,
event_id: Optional[str] = None,
occurred_on: Optional[datetime] = None,
):
super().__init__(self.EVENT_TYPE, aggregate_id, event_id, occurred_on)
self.entity = entity
self.photo_id = photo_id
self.user_id = user_id
self.photo_name = photo_name
self.tags = tags

@staticmethod
def create_from_primitives(raw_data: Dict[str, Any]):
photo = PhotoRegistryCreatedDomainEvent(
deep_find(raw_data, 'data.aggregate-id'),
PhotoId(deep_find(raw_data, 'data.attributes.id')),
UserId(deep_find(raw_data, 'data.attributes.user-id')),
PhotoName(deep_find(raw_data, 'data.attributes.name')),
PhotoTags([PhotoTag(tag) for tag in deep_find(raw_data, 'data.attributes.tags')]),
event_id=deep_find(raw_data, 'data.id'),
occurred_on=deep_find(raw_data, 'data.occurred-on'),
)
return photo

def to_primitives(self) -> Any:
def to_primitives(self) -> Dict[Any, Any]:
return {
'data': {
'id': self.id,
'aggregate-id': self.aggregate_id,
'occurred-on': self.occurred_on,
'created-at': self.created_at,
'type': PhotoCreatedDomainEvent.EVENT_TYPE,
'attributes': self.entity.to_primitives(),
'type': PhotoRegistryCreatedDomainEvent.EVENT_TYPE,
'attributes': {
'id': self.photo_id.value(),
'user-id': self.user_id.value(),
'name': self.photo_name.value(),
'tags': self.tags.values(),
},
},
'meta': {
'attempts': 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from src.contexts.photostore.photo.domain.entities.PhotoId import PhotoId
from src.contexts.photostore.photo.domain.entities.PhotoName import PhotoName
from src.contexts.photostore.photo.domain.entities.PhotoTag import PhotoTag
from src.contexts.photostore.photo.domain.entities.PhotoTags import PhotoTags
from src.contexts.photostore.photo.domain.entities.UserId import UserId
from src.contexts.photostore.photoregistry.domain.domainevents.PhotoRegistryCreatedDomainEvent import \
PhotoRegistryCreatedDomainEvent
Expand All @@ -10,16 +12,17 @@

class PhotoRegistry(AggregateRoot):

def __init__(self, photo_id: PhotoId, name: PhotoName, user_id: UserId):
def __init__(self, photo_id: PhotoId, name: PhotoName, user_id: UserId, tags: PhotoTags):
super().__init__()
self.id = photo_id
self.name = name
self.user_id = user_id
self.tags = tags

@staticmethod
def create(photo_id: PhotoId, name: PhotoName, user_id: UserId):
photo_registry = PhotoRegistry(photo_id, name, user_id)
event = PhotoRegistryCreatedDomainEvent(photo_registry.id.value(), photo_registry)
def create(photo_id: PhotoId, name: PhotoName, user_id: UserId, tags: PhotoTags):
photo_registry = PhotoRegistry(photo_id, name, user_id, tags)
event = PhotoRegistryCreatedDomainEvent(photo_registry.id.value(), photo_registry, tags)
photo_registry.record_event(event)
return photo_registry

Expand All @@ -29,6 +32,7 @@ def create_from_primitives(raw_data: Dict[str, Any]):
PhotoId(raw_data.get('id')),
PhotoName(raw_data.get('name')),
UserId(raw_data.get('user-id')),
PhotoTags([PhotoTag(tag) for tag in raw_data.get('tags', default=[])]),
)
return photo_registry

Expand All @@ -37,4 +41,5 @@ def to_primitives(self) -> Union[Dict, List]:
'id': self.id.value(),
'name': self.name.value(),
'user-id': self.user_id.value(),
'tags': self.tags.values(),
}
4 changes: 2 additions & 2 deletions src/contexts/shared/domain/valueobj/ValueObject.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
class ValueObject:

def __init__(self, value: Any):
self.__value = value
self._value = value

def value(self):
return self.__value
return self._value

0 comments on commit 012d8f1

Please sign in to comment.