from fastapi import Depends from backend.models.enum_for_models import UserTypeEnum from backend.models.user_model import User from backend.services.exceptions import TagNotFoundException from ..database import db_session from sqlalchemy.orm import Session from ..models.tag_model import Tag from ..entities.tag_entity import TagEntity from sqlalchemy import select # Add in checks for user permission? class TagService: def __init__(self, session: Session = Depends(db_session)): self._session = session def get_all(self) -> list[Tag]: """Returns a list of all Tags""" query = select(TagEntity) entities = self._session.scalars(query).all() return [entity.to_model() for entity in entities] def create(self, subject: User, tag: Tag) -> Tag: entity = TagEntity.from_model(tag) self._session.add(entity) self._session.commit() return entity.to_model() def update(self, subject: User, tag: Tag) -> Tag: query = select(TagEntity).where(TagEntity.id == tag.id) entity = self._session.scalars(query).one_or_none() if entity is None: raise TagNotFoundException(f"Tag with id {tag.id} does not exist") entity.content = tag.content self._session.commit() return entity.to_model() def delete(self, subject: User, tag: Tag) -> None: query = select(TagEntity).where(TagEntity.id == tag.id) entity = self._session.scalars(query).one_or_none() if entity is None: raise TagNotFoundException(f"Tag with id {tag.id} does not exist") self._session.delete(entity) self._session.commit()