// src/main/java/com/example/iwreactspring/service/TodoService.java 
package com.example.iwreactspring.service;

import java.util.List;
import java.util.ArrayList;
import com.example.iwreactspring.model.TodoItem;
import org.springframework.stereotype.Service;

import org.springframework.beans.factory.annotation.Autowired;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.Document;

import com.example.iwreactspring.repository.TodoRepository;

@Service
public class TodoService {

  @Autowired
  private TodoRepository todoRepository;

  public List getTodos() {
    return todoRepository.findAll();
  }

  public TodoItem createTodo(TodoItem newTodo) {
    TodoItem savedTodo = todoRepository.save(newTodo);
    return savedTodo;
  }
  public TodoItem getTodo(String id) {
    return todoRepository.findById(id).orElse(null);
  }

  public boolean deleteTodo(String id) {
    TodoItem todoToDelete = getTodo(id);
    if (todoToDelete != null) {
      todoRepository.deleteById(id);
      return true;
    } else {
      return false;
    }
  }
  public TodoItem saveTodo(TodoItem todoItem) {
    TodoItem savedTodo = todoRepository.save(todoItem);
    return savedTodo;
  }
}

Nós anotamos esta classe com @Service para denotá-lo como uma classe de serviço. Novamente, isso não é estritamente necessário, porque o Spring pode usar a classe como um bean injetado sem a anotação, mas anotar a classe torna as coisas mais descritivas. Em seguida, usamos @AutoWired para trazer o TodoRepository classe em. Isso será preenchido pelo Spring com base no tipo de classe, que é o com.example.iwreactspring.repository.TodoRepository vimos antes.

Por padrão, o Spring usa injeção singleton (uma instância da classe bean injetada), o que funciona bem para nós.

Operações CRUD na classe de serviço

Cada método nesta classe é dedicado a executar uma operação CRUD usando o repositório. Por exemplo, precisamos de uma maneira de obter todas as tarefas no banco de dados e getTodos() faz isso por nós. O Repository a classe também torna isso muito fácil: return todoRepository.findAll() retorna todos os registros (também conhecido como documentos) na coleção de tarefas (também conhecido comobase de dados).