diff --git a/src/pilgrim/application.py b/src/pilgrim/application.py index 61d75ba..8954411 100644 --- a/src/pilgrim/application.py +++ b/src/pilgrim/application.py @@ -1,13 +1,17 @@ from pilgrim.database import Database +from pilgrim.service.mocks.service_manager_mock import ServiceManagerMock from pilgrim.service.servicemanager import ServiceManager +from pilgrim.ui.ui import UIApp class Application: def __init__(self): self.database = Database() + self.ui = UIApp(ServiceManagerMock()) def run(self): self.database.create() + self.ui.run() def get_service_manager(self): session = self.database.session() diff --git a/src/pilgrim/service/mocks/__init__.py b/src/pilgrim/service/mocks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pilgrim/service/mocks/entry_service_mock.py b/src/pilgrim/service/mocks/entry_service_mock.py new file mode 100644 index 0000000..a091a52 --- /dev/null +++ b/src/pilgrim/service/mocks/entry_service_mock.py @@ -0,0 +1,47 @@ +from typing import List +from pilgrim.service.entry_service import EntryService +from pilgrim.models.entry import Entry + + +class EntryServiceMock(EntryService): + def __init__(self): + super().__init__(None) + + self.mock_data = { + 1: Entry(title="The Adventure Begins", text="I'm hopping in the Plane to finally visit canadian lands", + date="26/07/2025", travel_diary_id=1, id=1, + photos=[]), + 2: Entry(title="The Landing", text="Finally on Canadian Soil", date="27/07/2025", + travel_diary_id=1, id=2,photos=[]), + 3: Entry(title="The Mount Royal", text="The Mount Royal is fucking awesome", date="28/07/2025", + travel_diary_id=1, id=3, photos=[]), + } + self._next_id = 4 + + def create(self, travel_diary_id: int, title: str, text: str, date: str) -> Entry: + new_entry = Entry(title, text, date, travel_diary_id, id=self._next_id) + self.mock_data[self._next_id] = new_entry + self._next_id += 1 + return new_entry + + def read_by_id(self, entry_id: int) -> Entry | None: + return self.mock_data.get(entry_id) + + def read_all(self) -> List[Entry]: + return list(self.mock_data.values()) + + def update(self, entry_id: int, entry_dst: Entry) -> Entry | None: + item_to_update = self.mock_data.get(entry_id) + if item_to_update: + item_to_update.title = entry_dst.title if entry_dst.title is not None else item_to_update.title + item_to_update.text = entry_dst.text if entry_dst.text is not None else item_to_update.text + item_to_update.date = entry_dst.date if entry_dst.date is not None else item_to_update.date + item_to_update.fk_travel_diary_id = entry_dst.fk_travel_diary_id if (entry_dst.fk_travel_diary_id + is not None) else entry_dst.id + item_to_update.photos.extend(entry_dst.photos) + + return item_to_update + return None + + def delete(self, entry_id: int) -> Entry | None: + return self.mock_data.pop(entry_id, None) \ No newline at end of file diff --git a/src/pilgrim/service/mocks/photo_service_mock.py b/src/pilgrim/service/mocks/photo_service_mock.py new file mode 100644 index 0000000..1b02c56 --- /dev/null +++ b/src/pilgrim/service/mocks/photo_service_mock.py @@ -0,0 +1,42 @@ +from pathlib import Path +from typing import List + +from pilgrim.models.photo import Photo +from pilgrim.service.photo_service import PhotoService + + +class PhotoServiceMock(PhotoService): + def __init__(self): + super().__init__(None) + self.mock_data = {} + self._next_id = 1 + + def create(self, filepath: Path, name: str, travel_diary_id, addition_date=None, caption=None) -> Photo | None: + new_photo = Photo(filepath, name, addition_date=addition_date, caption=caption) + self.mock_data[self._next_id] = new_photo + self._next_id += 1 + return new_photo + + + def read_by_id(self, photo_id: int) -> Photo: + return self.mock_data.get(photo_id) + + def read_all(self) -> List[Photo]: + return list(self.mock_data.values()) + + def update(self, photo_id: Photo, photo_dst: Photo) -> Photo | None: + item_to_update:Photo = self.mock_data.get(photo_id) + if item_to_update: + item_to_update.filepath = photo_dst.filepath if photo_dst.filepath else item_to_update.filepath + item_to_update.name = photo_dst.name if photo_dst.name else item_to_update.name + item_to_update.caption = photo_dst.caption if photo_dst.caption else item_to_update.caption + item_to_update.addition_date = photo_dst.addition_date if photo_dst.addition_date\ + else item_to_update.addition_date + item_to_update.fk_travel_diary_id = photo_dst.fk_travel_diary_id if photo_dst.fk_travel_diary_id \ + else item_to_update.fk_travel_diary_id + item_to_update.entries.extend(photo_dst.entries) + return item_to_update + return None + + def delete(self, photo_id: int) -> Photo | None: + return self.mock_data.pop(photo_id, None) diff --git a/src/pilgrim/service/mocks/service_manager_mock.py b/src/pilgrim/service/mocks/service_manager_mock.py new file mode 100644 index 0000000..4741b15 --- /dev/null +++ b/src/pilgrim/service/mocks/service_manager_mock.py @@ -0,0 +1,19 @@ +from pilgrim.service.mocks.entry_service_mock import EntryServiceMock +from pilgrim.service.mocks.photo_service_mock import PhotoServiceMock +from pilgrim.service.mocks.travel_diary_service_mock import TravelDiaryServiceMock +from pilgrim.service.photo_service import PhotoService +from pilgrim.service.servicemanager import ServiceManager + + +class ServiceManagerMock(ServiceManager): + def __init__(self): + super().__init__() + + def get_entry_service(self): + return EntryServiceMock() + + def get_travel_diary_service(self): + return TravelDiaryServiceMock() + + def get_photo_service(self): + return PhotoServiceMock() \ No newline at end of file diff --git a/src/pilgrim/service/mocks/travel_diary_service_mock.py b/src/pilgrim/service/mocks/travel_diary_service_mock.py new file mode 100644 index 0000000..a6b409b --- /dev/null +++ b/src/pilgrim/service/mocks/travel_diary_service_mock.py @@ -0,0 +1,33 @@ +from pilgrim.service.travel_diary_service import TravelDiaryService +from pilgrim.models.travel_diary import TravelDiary + + +class TravelDiaryServiceMock(TravelDiaryService): + def __init__(self): + super().__init__(None) + self.mock_data = { + 1:TravelDiary(id=1,name="Montreal") + } + self._next_id = 2 + + def create(self, name: str): + new_travel_diary = TravelDiary(id=self._next_id,name=name) + self.mock_data[self._next_id] = new_travel_diary + self._next_id += 1 + return new_travel_diary + + def read_by_id(self, travel_id: int): + return self.mock_data[travel_id] + + def read_all(self): + return list(self.mock_data.values()) + + def update(self, travel_diary_id: int, travel_diary_dst: TravelDiary): + item_to_update = self.mock_data.get(travel_diary_id) + if item_to_update: + item_to_update.name = travel_diary_dst.name if travel_diary_dst.name is not None else item_to_update.name + return item_to_update + return None + + def delete(self, travel_diary_id: int): + return self.mock_data.pop(travel_diary_id, None) diff --git a/src/pilgrim/ui/__init__.py b/src/pilgrim/ui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pilgrim/ui/ui.py b/src/pilgrim/ui/ui.py new file mode 100644 index 0000000..bf8c7ed --- /dev/null +++ b/src/pilgrim/ui/ui.py @@ -0,0 +1,9 @@ +from textual.app import App + +from pilgrim.service.servicemanager import ServiceManager + + +class UIApp(App): + def __init__(self,service_manager: ServiceManager): + super().__init__() + self.service_manager = service_manager