mirror of https://github.com/gmbrax/Pilgrim.git
79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
import re
|
|
from datetime import datetime
|
|
from typing import List
|
|
|
|
from pilgrim.models.entry import Entry
|
|
from pilgrim.models.travel_diary import TravelDiary
|
|
from pilgrim.models.photo import Photo # ✨ Importe o modelo Photo
|
|
|
|
|
|
class EntryService:
|
|
def __init__(self, session):
|
|
self.session = session
|
|
|
|
# ✨ Modifique a assinatura para aceitar a lista de fotos
|
|
def create(self, travel_diary_id: int, title: str, text: str, date: datetime, photos: List[Photo]):
|
|
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,photos=photos)
|
|
|
|
# ✨ Atribua a relação ANTES de adicionar e fazer o commit
|
|
new_entry.photos = photos
|
|
|
|
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:
|
|
entry = self.session.query(Entry).filter(Entry.id == entry_id).first()
|
|
return entry
|
|
|
|
def read_all(self) -> List[Entry]:
|
|
entries = self.session.query(Entry).all()
|
|
return entries
|
|
|
|
def update(self, entry_src: Entry, entry_dst: Entry) -> Entry | None:
|
|
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_travel_diary_id = entry_dst.fk_travel_diary_id
|
|
original.photos = entry_dst.photos
|
|
self.session.commit()
|
|
self.session.refresh(original)
|
|
return original
|
|
return None
|
|
|
|
def delete(self, entry_src: Entry) -> Entry | None:
|
|
excluded = self.read_by_id(entry_src.id)
|
|
if excluded is not None:
|
|
self.session.delete(excluded)
|
|
self.session.commit()
|
|
return excluded
|
|
return None
|
|
|
|
|
|
def delete_references_for_specific_photo(self, entry: Entry, photo_hash: str) -> Entry:
|
|
regex = r"\[\[photo::" + re.escape(photo_hash) + r"\]\]"
|
|
entry.text = re.sub(regex, lambda match: ' ' * len(match.group(0)), entry.text)
|
|
|
|
self.session.commit()
|
|
self.session.refresh(entry)
|
|
|
|
return entry
|
|
|
|
def delete_all_photo_references(self, entry: Entry, commit=True) -> Entry:
|
|
if not entry.photos:
|
|
return entry
|
|
photo_hashes = {photo.photo_hash[:8] for photo in entry.photos}
|
|
regex = r"\[\[photo::(" + "|".join(re.escape(h) for h in photo_hashes) + r")\]\]"
|
|
entry.text = re.sub(regex, lambda match: ' ' * len(match.group(0)), entry.text)
|
|
if commit:
|
|
self.session.commit()
|
|
self.session.refresh(entry)
|
|
return entry
|