Rodrigo, aproveitando o post gostaria de perguntar também se posso colocar variável no nome do meu cache, por exemplo jogo{id}
Respondendo, a classe é um controller. Já tentei colocar em um service mas não deu certo, segue:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import br.com.akconsultor.xadrez.dto.MovimentoDto;
import br.com.akconsultor.xadrez.dto.MovimentoVerificaDto;
import br.com.akconsultor.xadrez.dto.TabuleiroDto;
import br.com.akconsultor.xadrez.service.JogoService;
import br.com.akconsultor.xadrez.tabuleiro.Jogo;
@RestController
public class JogoController {
@Autowired
private JogoService service;
@Cacheable(value = "jogo")
public Jogo jogar() {
Jogo jogo = new Jogo("jogador1", "jogador2");
System.out.println(jogo);
return jogo;
}
@CacheEvict(value = "jogo")
@GetMapping("/novoJogo")
public ResponseEntity<Long> novoJogo(){
this.jogar();
return ResponseEntity.ok(Jogo.getId());
}
@PostMapping("/verifica")
public ResponseEntity<boolean[][]> verificaDestino(@RequestBody MovimentoVerificaDto mov){
Jogo jogo = this.jogar();
boolean podeMover[][] = service.verificaDestino(mov, jogo);
return ResponseEntity.ok(podeMover);
}
@PostMapping("/move")
public ResponseEntity<TabuleiroDto> move(@RequestBody MovimentoDto mov){
Jogo jogo = this.jogar();
TabuleiroDto dto = service.move(mov, jogo);
return ResponseEntity.ok(dto);
}
}