Estou criando uma REST API para gerar número aleatórias para loteria. Estes são os endpointes de requisito.
No primeiro passo, precisamos construir um endpoint que receberá o e-mail da pessoa e retornará um objeto de resposta com os números sorteados para a aposta.
Também devemos construir um segundo endpoint para listar todas as apostas de um solicitante, passando seu e-mail como parâmetro.
Problemática:
Meu projeto conta com três classes principais, a Classe Aposta, que é abstrata e contem o método abstrato gerarAposta( ), a classe ApostaSimplesMegasena que estende a classe Aposta e implementa o método gerarAposta( ) e por fim a classe Apostador, que contem os atributos ID, email e uma List das apostas associadas a ele.
Preciso verificar se o e-mail informado já existe no banco de dados, se já existir, eu também preciso verificar se já existe uma combinação de números(aposta) associada a aquele e-mail antes de salvar a nova aposta no banco. Se não exister registro do e-mail informado no banco, apenas devo salvar a nova aposta.
Seguem os códigos das classes:
package com.apostas.api.apostas.api.model;
import lombok.Data;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@Table(name = “apostas”)
public abstract class Aposta {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "aposta", nullable = false)
private Integer numerosaposta = gerarNumeros();
@Column(name = "criadaEm", nullable = false)
private LocalDateTime criadaEm = LocalDateTime.now();
public abstract Integer gerarNumeros();
}
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ApostaSimplesMegasena extends Aposta{
@Override
public Integer gerarNumeros() {
Random gerador = new Random();
return gerador.nextInt(1-60);
}
}
@Data
@Accessors (chain = true)
@Entity
@Table(name = “apostadores”)
public class Apostador {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name ="email", nullable = false, unique = true)
private String email;
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<ApostaSimplesMegasena> apostaSimplesMegasena;
}
Minha dificuldade está em fazer essas verificações antes de salvar a aposta no banco. Sei que é uma dúvida besta, mas é a primeira API que estou desenvolvendo. Se alguém puder me ajudar com um exemplo, ficarei muito grato.