From 8ad57b548fbfa8849a2bab365b3325f963e30a59 Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Thu, 5 Jun 2025 13:28:16 -0300 Subject: [PATCH] Added the Services layer to the code to do the database operation --- src/pilgrim/application.py | 7 +++ src/pilgrim/models/entry.py | 10 ++++ src/pilgrim/models/travel_diary.py | 6 +++ src/pilgrim/service/__init__.py | 0 src/pilgrim/service/entry_service.py | 52 +++++++++++++++++++++ src/pilgrim/service/servicemanager.py | 19 ++++++++ src/pilgrim/service/travel_diary_service.py | 35 ++++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 src/pilgrim/service/__init__.py create mode 100644 src/pilgrim/service/entry_service.py create mode 100644 src/pilgrim/service/servicemanager.py create mode 100644 src/pilgrim/service/travel_diary_service.py diff --git a/src/pilgrim/application.py b/src/pilgrim/application.py index fec18fc..0c0dcbb 100644 --- a/src/pilgrim/application.py +++ b/src/pilgrim/application.py @@ -1,4 +1,5 @@ from pilgrim.database import Database +from pilgrim.service.servicemanager import ServiceManager class Application: @@ -7,3 +8,9 @@ class Application: def run(self): self.database.create() + + def get_service_manager(self): + session = self.database.session() + session_manager = ServiceManager() + session_manager.set_session(session) + return session_manager \ No newline at end of file diff --git a/src/pilgrim/models/entry.py b/src/pilgrim/models/entry.py index 42f2a0b..b9f75ed 100644 --- a/src/pilgrim/models/entry.py +++ b/src/pilgrim/models/entry.py @@ -1,3 +1,5 @@ +from typing import Any + from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship @@ -16,3 +18,11 @@ class Entry(Base): secondary=photo_entry_association, back_populates="entries") fk_TravelDiary_id = Column(Integer, ForeignKey("TravelDiary.id")) + def __init__(self, title: str, text: str, date: str, travel_diary_id: int, **kw: Any): + super().__init__(**kw) + self.title = title + self.text = text + self.date = date + self.fk_TravelDiary_id = travel_diary_id + + diff --git a/src/pilgrim/models/travel_diary.py b/src/pilgrim/models/travel_diary.py index 175749e..23caf34 100644 --- a/src/pilgrim/models/travel_diary.py +++ b/src/pilgrim/models/travel_diary.py @@ -1,3 +1,5 @@ +from typing import Any + from sqlalchemy import Column, String, Integer from ..database import Base @@ -6,3 +8,7 @@ class TravelDiary(Base): __tablename__ = "TravelDiary" id = Column(Integer, primary_key=True) name = Column(String) + + def __init__(self, name: str, **kw: Any): + super().__init__(**kw) + self.name = name diff --git a/src/pilgrim/service/__init__.py b/src/pilgrim/service/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pilgrim/service/entry_service.py b/src/pilgrim/service/entry_service.py new file mode 100644 index 0000000..07bc959 --- /dev/null +++ b/src/pilgrim/service/entry_service.py @@ -0,0 +1,52 @@ + + +from ..models.entry import Entry +from ..models.travel_diary import TravelDiary + + +class EntryService: + def __init__(self,session): + self.session = session + + def create(self, travel_diary_id:int, title: str, text: str, date: str, ): + travel_diary = self.session.query(TravelDiary).filter(TravelDiary.id == travel_diary_id).first() + if not travel_diary: + return None + new_entry = Entry(title,text,date,travel_diary_id) + self.session.add(new_entry) + self.session.commit() + self.session.refresh(new_entry) + + + return new_entry + + def read_by_id(self,entry_id:int): + entry = self.session.query(Entry).filter(Entry.id == entry_id).first() + return entry + + def read_all(self): + entries = self.session.query(Entry).all() + return entries + + def update(self,entry_src:Entry,entry_dst:Entry): + original:Entry = self.read_by_id(entry_src.id) + if original: + original.title = entry_dst.title + original.text = entry_dst.text + original.date = entry_dst.date + original.fk_TravelDiary_id = entry_dst.fk_TravelDiary_id + original.photos = entry_dst.photos + self.session.commit() + self.session.refresh(original) + return original + + def delete(self,entry_src:Entry): + excluded = self.read_by_id(entry_src.id) + if excluded is not None: + self.session.delete(excluded) + self.session.commit() + return excluded + return None + + + diff --git a/src/pilgrim/service/servicemanager.py b/src/pilgrim/service/servicemanager.py new file mode 100644 index 0000000..8ec7801 --- /dev/null +++ b/src/pilgrim/service/servicemanager.py @@ -0,0 +1,19 @@ +from pilgrim.service.entry_service import EntryService +from pilgrim.service.travel_diary_service import TravelDiaryService + + +class ServiceManager: + def __init__(self): + self.session = None + def set_session(self, session): + self.session = session + def get_session(self): + return self.session + def get_entry_service(self): + if self.session is not None: + return EntryService(self.session) + return None + def get_travel_diary_service(self): + if self.session is not None: + return TravelDiaryService(self.session) + return None \ No newline at end of file diff --git a/src/pilgrim/service/travel_diary_service.py b/src/pilgrim/service/travel_diary_service.py new file mode 100644 index 0000000..0be4cc0 --- /dev/null +++ b/src/pilgrim/service/travel_diary_service.py @@ -0,0 +1,35 @@ +from ..models.travel_diary import TravelDiary + + +class TravelDiaryService: + def __init__(self,session): + self.session = session + def create(self, name:str): + new_travel_diary = TravelDiary(name) + self.session.add(new_travel_diary) + self.session.commit() + self.session.refresh(new_travel_diary) + + return new_travel_diary + + def read_by_id(self, travel_id:int): + return self.session.query(TravelDiary).get(travel_id) + + def read_all(self): + return self.session.query(TravelDiary).all() + + def update(self, travel_diary_src:TravelDiary,travel_diary_dst:TravelDiary): + original = self.read_by_id(travel_diary_src.id) + if original is not None: + original.name = travel_diary_dst.name + self.session.commit() + self.session.refresh(original) + return original + + def delete(self, travel_diary_src:TravelDiary): + excluded = self.read_by_id(travel_diary_src.id) + if excluded is not None: + self.session.delete(travel_diary_src) + self.session.commit() + return excluded + return None