Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Challenge alura nao deixar cadastrar com a descrição dentro do mesmo mes

ja testei apenas com a descrição e funciona mas o mes estou com dificuldades,

form

public Boolean verifica(ReceitasRepository receitasRepository) {

    Optional<Receitas> receitas = receitasRepository.findByDescricao(descricao);

    Optional<Receitas> byData = receitasRepository.findByData(LocalDate.from(data.getMonth()));

    if (receitas.isPresent() && byData.isPresent()){
        return true;
    }
    return false;
}


@PostMapping
public ResponseEntity<ReceitasDto> cadastrar (@RequestBody @Valid ReceitasForm receitasForm, UriComponentsBuilder uriComponentsBuilder){

    Receitas receitas = receitasForm.cadastrar();
    Boolean verifica = receitasForm.verifica(receitasRepository);
    if (!verifica) {
        receitasRepository.save(receitas);
        URI uri = uriComponentsBuilder.path("/receitas/{id}").buildAndExpand(receitas.getId()).toUri();
        return ResponseEntity.created(uri).body(new ReceitasDto(receitas));
    }
    return ResponseEntity.status(409).build();
}
5 respostas

Oi Rodrigo,

Você vai precisar fazer uma consulta filtrando pela decrição e entre uma data de início e fim:

receitasRepository.findByDescricaoAndDataBetween(descricao, inicioDoMes, fimDoMes);

E agora precisa escrever um código para pegar o mês da data da receita sendo cadastrada e criar uma variável para o primeiro dia desse mês e outra para o último dia desse mês.

meu metodo está assim:

public Boolean verifica(ReceitasRepository receitasRepository) {

    LocalDate firstDay = data.with(TemporalAdjusters.firstDayOfMonth());
    LocalDate lastDay = data.with(TemporalAdjusters.lastDayOfMonth());

    Optional<Receitas> receitas = receitasRepository.findByDescricaoAndDataBetween(descricao,firstDay,lastDay);


    if (receitas.isPresent()){
        return true;
    }
    return false;
}

}

só estou tomando essa exception: estou procurando sobre isso

javax.persistence.NonUniqueResultException: query did not return a unique result: 2 at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:128) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1672) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:111) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:198) ~[spring-data-jpa-2.7.2.jar:2.7.2] at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:90) ~[spring-data-jpa-2.7.2.jar:2.7.2] at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:156) ~[spring-data-jpa-2.7.2.jar:2.7.2] at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:144) ~[spring-data-jpa-2.7.2.jar:2.7.2] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.7.2.jar:2.7.2] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.7.2.jar:2.7.2] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:160) ~[spring-data-commons-2.7.2.jar:2.7.2] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:139) ~[spring-data-commons-2.7.2.jar:2.7.2] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:81) ~[spring-data-commons-2.7.2.jar:2.7.2] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.22.jar:5.3.22] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.22.jar:5.3.22] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.22.jar:5.3.22] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.22.jar:5.3.22] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145) ~[spring-data-jpa-2.7.2.jar:2.7.2] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.22.jar:5.3.22] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.22.jar:5.3.22] at jdk.proxy3/jdk.proxy3.$Proxy113.findByDescricaoAndDataBetween(Unknown Source) ~[na:na] at com.example.orcamentofamiliar.Controllers.Forms.Receitas.ReceitasForm.verifica(ReceitasForm.java:41) ~[classes/:na] at com.example.orcamentofamiliar.Controllers.ReceitaController.cadastrar(ReceitaController.java:34) ~[classes/:na] at com.example.orcamentofamiliar.Controllers.ReceitaController$$FastClassBySpringCGLIB$$eaf2115c.invoke() ~2]

solução!

Oi Rodrigo,

Deu erro porque na sua tabela tem mais de um registro com a mesma descrição dentro do mesmo mês. Nos testes você acabou inserindo mais de um registro, então agora precisar apagar da tabela.

foi isso mesmo, obrigado nossa eu ia ficar pesquisando aqui mo cota kkkkk funcionou