from sqlalchemy.orm import Session from datetime import datetime from typing import Optional from fastapi import HTTPException from app.modules.feed.models import Feed from app.modules.feed.schema import FeedCreate, FeedResponse, FeedUpdate, messageResponse class FeedService: @staticmethod def create_feed(db: Session, data: FeedCreate ): new_feed = Feed(**data.dict()) db.add(new_feed) db.commit() db.refresh(new_feed) return new_feed @staticmethod def get_feed(db: Session, feed_id: int, current_user): feed = db.query(Feed).filter(Feed.id == feed_id).first() if not feed: raise ValueError("feed no encontrado") return feed @staticmethod def update_feed(db: Session, feed_id: int, data: FeedUpdate , current_user): feed = db.query(Feed).filter(Feed.id == feed_id).first() if not feed: raise ValueError("feed no encontrado") if current_user.role not in ["ROOT", "ADMIN"]: raise ValueError("No tienes permisos para actualizar este feed") update_data = data.dict(exclude_unset=True) for key, value in update_data.items(): setattr(feed, key, value) db.commit() db.refresh(feed) return feed @staticmethod def delete_feed(db: Session, feed_id: int, current_user): feed = db.query(Feed).filter(Feed.id == feed_id).first() if not feed: raise ValueError("feed no encontrado") if current_user.role not in ["ROOT", "ADMIN"]: raise ValueError("No tienes permisos para eliminar este feed") try: feed.is_active = False feed.deleted_at = datetime.utcnow() feed.deleted_by = current_user.id db.commit() db.refresh(feed) except Exception as e: db.rollback() raise ValueError(f"Error al eliminar el feed: {e}") return {"message": "feed eliminado correctamente"}