class {{ entity_name.capitalize() }}Service:
    """
    Servicio para manejar las operaciones CRUD relacionadas con {{ entity_name.lower() }}.

    Métodos disponibles:
        - create_{{ entity_name.lower() }}: Crea una nueva instancia de {{ entity_name.lower() }}.
        - retrieve_{{ entity_name.lower() }}: Recupera una instancia de {{ entity_name.lower() }} por ID.
        - update_{{ entity_name.lower() }}: Actualiza una instancia existente de {{ entity_name.lower() }}.
        - delete_{{ entity_name.lower() }}: Elimina una instancia de {{ entity_name.lower() }}.
    """

    #Si necesitas mantener un estado de lista de entidades
    {{ entity_name.capitalize() }}_list = []    

    def __init__(self, repository):
        """
        Inicializa el servicio con el repositorio correspondiente.

        :param repository: Repositorio que maneja la persistencia de {{ entity_name.lower() }}.
        """
        self.repository = repository    

    def create_{{ entity_name.lower() }}(self, **kwargs):
        """
        Crea una nueva instancia de {{ entity_name.lower() }}.

        :param kwargs: Diccionario con los datos necesarios para crear la instancia.
            nota: puedes sustituir **kwargs por un DTO
        :return: La entidad creada.
        :raises ValueError: Si las reglas de negocio no se cumplen.
        """
        # Validación de reglas de negocio (opcional)
        if self.repository.exists_by_field("unique_field", kwargs.get("unique_field")):
            raise ValueError("An instance with this unique_field already exists.")

        # Creación en el repositorio
        entity = self.repository.create(**kwargs)
        return entity

    def retrieve_{{ entity_name.lower() }}(self, entity_id: int):
        """
        Recupera una instancia de {{ entity_name.lower() }} por su ID.

        :param entity_id: ID de la instancia a recuperar.
        :return: La entidad recuperada.
        :raises ValueError: Si no se encuentra la instancia.
        """
        entity = self.repository.get_by_id(entity_id)
        if not entity:
            raise ValueError(f"No {{ entity_name.lower() }} found with ID {entity_id}.")
        return entity

    def update_{{ entity_name.lower() }}(self, entity_id: int, **kwargs):
        """
        Actualiza una instancia existente de {{ entity_name.lower() }}.

        :param entity_id: ID de la instancia a actualizar.
        :param kwargs: Diccionario con los datos a actualizar.
            nota: puedes sustituir **kwargs por un DTO        
        :return: La entidad actualizada.
        :raises ValueError: Si no se encuentra la instancia o las reglas de negocio no se cumplen.
        """
        entity = self.repository.get_by_id(entity_id)
        if not entity:
            raise ValueError(f"No {{ entity_name.lower() }} found with ID {entity_id}.")

        # Actualización en el repositorio
        updated_entity = self.repository.update(entity_id, **kwargs)
        return updated_entity

    def delete_{{ entity_name.lower() }}(self, entity_id: int):
        """
        Elimina una instancia de {{ entity_name.lower() }}.

        :param entity_id: ID de la instancia a eliminar.
        :return: Ninguno.
        :raises ValueError: Si no se encuentra la instancia.
        """
        entity = self.repository.get_by_id(entity_id)
        if not entity:
            raise ValueError(f"No {{ entity_name.lower() }} found with ID {entity_id}.")

        # Eliminación en el repositorio
        self.repository.delete(entity_id)
