Rest API Usando SpringBoot para gerar números para loteria

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.