Você está na página 1de 5

package com.filme.

crm;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Anime {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String titulo;


private String genero;
private int ano;
private int episodios;
private boolean filme;

// Construtores, getters e setters

public Anime() {
// Construtor padrão necessário para deserialização JSON
}

public Anime(String titulo, String genero, int ano, int episodios, boolean
filme) {
this.titulo = titulo;
this.genero = genero;
this.ano = ano;
this.episodios = episodios;
this.filme = filme;
}

// Getters e Setters

public Long getId() {


return id;
}

public void setId(Long id) {


this.id = id;
}

public String getTitulo() {


return titulo;
}

public void setTitulo(String titulo) {


this.titulo = titulo;
}

public String getGenero() {


return genero;
}

public void setGenero(String genero) {


this.genero = genero;
}

public int getAno() {


return ano;
}

public void setAno(int ano) {


this.ano = ano;
}

public int getEpisodios() {


return episodios;
}

public void setEpisodios(int episodios) {


this.episodios = episodios;
}

public boolean isFilme() {


return filme;
}

public void setFilme(boolean filme) {


this.filme = filme;
}
}

package com.filme.crm;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/v1/animes")
public class AnimeController {

private final List<Anime> animes;

@Autowired
private AnimeService animeService;

public AnimeController(List<Anime> animes) {


this.animes = animes;
}

@GetMapping
public List<Anime> listarAnimes() {
return animes;
}

@PostMapping
public void adicionarAnime(@RequestBody Anime anime) {
animeService.adicionarAnime(anime);
}
@GetMapping("/filtrar")
public List<Anime> filtrarAnimes(@RequestParam(required = false) String genero,
@RequestParam(required = false) Integer ano,
@RequestParam(required = false) Integer
episodios,
@RequestParam(required = false) Boolean filme)
{
return animeService.filtrarAnimes(genero, ano, episodios, filme);
}
}

package com.filme.crm;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Service;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@SpringBootApplication
@Service
@RestController
@RequestMapping("/v1/animes-filter")

public class AnimeFilter {

public static void main(String[] args) {


SpringApplication.run(AnimeFilter.class, args);
}

private final List<Anime> animes;

@Autowired
private AnimeService animeService;

public AnimeFilter(List<Anime> animes) {


this.animes = animes;
}

@GetMapping
public List<Anime> listarAnimes() {
return animes;
}

@PostMapping
public void adicionarAnime(@RequestBody Anime anime) {
animeService.adicionarAnime(anime);
}
@GetMapping("/filtrar")
public List<Anime> filtrarAnimes(@RequestParam(required = false) String genero,
@RequestParam(required = false) Integer ano,
@RequestParam(required = false) Integer
episodios,
@RequestParam(required = false) Boolean filme)
{
return animeService.filtrarAnimes(genero, ano, episodios, filme);
}
}

package com.filme.crm;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class AnimeService {

private final List<Anime> animes;

public AnimeService(List<Anime> animes) {


this.animes = animes;
}

public List<Anime> listarAnimes() {


return animes;
}

public void adicionarAnime(Anime anime) {


animes.add(anime);
}

public List<Anime> filtrarAnimes(String genero, Integer ano, Integer episodios,


Boolean filme) {
return animes.stream()
.filter(anime ->
(genero == null ||
anime.getGenero().equalsIgnoreCase(genero)) &&
(ano == null || anime.getAno() == ano) &&
(episodios == null || anime.getEpisodios() <= episodios) &&
(filme == null || anime.isFilme() == filme))
.collect(Collectors.toList());
}
}

package com.filme.crm.repositorio;

import java.util.List;

import com.filme.crm.Anime;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AnimeRepository extends JpaRepository<Anime, Long> {

List<Anime> findByTitulo(String titulo);

List<Anime> findByGenero(String genero);

List<Anime> findByAno(int ano);

List<Anime> findByEpisodiosLessThan(int maxEpisodios);

List<Anime> findByFilme(boolean filme);

List<Anime> findByGeneroAndAno(String genero, int ano);


// Exemplo de método combinando múltiplos critérios

// Adicione outros métodos conforme necessário


}

Você também pode gostar