cami-la / sacola-api_IFOOD_DEV_WEEK

Código-Fonte do Projeto Sacola API do iFood Dev Week.
https://www.dio.me/dev-week/ifood/ifood-developer
167 stars 29 forks source link

Erro teste #45

Open Carol-Alexandre opened 1 year ago

Carol-Alexandre commented 1 year ago

Camila, deu certo! Conseguir obg!

Mais apareceu outra coisa kkkkk

Fui a interface de excluir sacola, porém não aparece no sweggir, pq?

cami-la commented 1 year ago

Pode colocar o código aqui?

Porque não lembro dessa interface. Faz um tempo que eu fiz esse projetinho.

Carol-Alexandre commented 1 year ago

claro

na sacolaServicempl.java

package me.dio.sacola.service.impl;

import lombok.RequiredArgsConstructor; import me.dio.sacola.enumeration.FormaPagamento; import me.dio.sacola.model.Item; import me.dio.sacola.model.Restaurante; import me.dio.sacola.model.Sacola; import me.dio.sacola.repository.ItemRepository; import me.dio.sacola.repository.ProdutoRepository; import me.dio.sacola.repository.SacolaRepository; import me.dio.sacola.resource.dto.ItemDto; import me.dio.sacola.service.SacolaService; import org.springframework.stereotype.Service;

import java.util.ArrayList; import java.util.List;

@Service @RequiredArgsConstructor public class SacolaServiceImpl implements SacolaService { private final SacolaRepository sacolaRepository; private final ProdutoRepository produtoRepository; private final ItemRepository itemRepository;

@Override public Item incluirItemNaSacola(ItemDto itemDto) { Sacola sacola = verSacola(itemDto.getSacolaId());

if (sacola.isFechada()) {
  throw new RuntimeException("Esta sacola está fechada.");
}

Item itemParaSerInserido = Item.builder()
    .quantidade(itemDto.getQuantidade())
    .sacola(sacola)
    .produto(produtoRepository.findById(itemDto.getProdutoId()).orElseThrow(
        () -> {
          throw new RuntimeException("Esse produto não existe!");
        }
    ))
    .build();

List<Item> itensDaScola = sacola.getItens();
if (itensDaScola.isEmpty()) {
  itensDaScola.add(itemParaSerInserido);
} else {
  Restaurante restauranteAtual = itensDaScola.get(0).getProduto().getRestaurante();
  Restaurante restauranteDoItemParaAdicionar = itemParaSerInserido.getProduto().getRestaurante();
  if (restauranteAtual.equals(restauranteDoItemParaAdicionar)) {
    itensDaScola.add(itemParaSerInserido);
  } else {
    throw new RuntimeException("Não é possível adicionar produtos de restaurantes diferentes. Feche a sacola ou esvazie.");
  }
}

List<Double> valorDosItens = new ArrayList<>();
for (Item itemDaSacola: itensDaScola) {
  double valorTotalItem =
      itemDaSacola.getProduto().getValorUnitario() * itemDaSacola.getQuantidade();
  valorDosItens.add(valorTotalItem);
}

double valorTotalSacola = valorDosItens.stream()
    .mapToDouble(valorTotalDeCadaItem -> valorTotalDeCadaItem)
    .sum();

sacola.setValorTotal(valorTotalSacola);
sacolaRepository.save(sacola);
return itemParaSerInserido;

}

@Override public Sacola verSacola(Long id) { return sacolaRepository.findById(id).orElseThrow( () -> { throw new RuntimeException("Essa sacola não existe!"); } ); }

@Override public Sacola fecharSacola(Long id, int numeroformaPagamento) { Sacola sacola = verSacola(id); if (sacola.getItens().isEmpty()) { throw new RuntimeException("Inclua ítens na sacola!"); } /if (numeroformaPagamento == 0) { sacola.setFormaPagamento(FormaPagamento.DINHEIRO); } else { sacola.setFormaPagamento(FormaPagamento.MAQUINETA); }/ FormaPagamento formaPagamento = numeroformaPagamento == 0 ? FormaPagamento.DINHEIRO : FormaPagamento.MAQUINETA; sacola.setFormaPagamento(formaPagamento); sacola.setFechada(true); return sacolaRepository.save(sacola); }

@Override public void excluirSacola(Long id) { Sacola sacola = verSacola(id); if (sacola.isFechada()) { throw new RuntimeException("Não é possível excluir uma sacola fechada."); } sacolaRepository.delete(sacola); } }

cami-la commented 1 year ago

Oi, Carol. Então, deixa eu ver se entendi...

  1. Teu código está funcionando? A aplicação está de pé?
  2. A forma que as anotações estão escritas, não estão certas... Acredito que não esteja rodando..
  3. O Swagger ele "lê" o Controller e não o Service, tá? Lembra, que lá no Swagger UI fica exposto as urls para fazer os testes?

Para que o Swagger funcione, precisamos:

  1. Colocar a dependência do Swagger no nosso projeto, no arquivo build.gradle:
    implementation 'io.springfox:springfox-boot-starter:3.0.0'
  2. Acrescentar a seguinte configuração no application.yml:
    mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  3. Se quiser personalizar o Swagger UI, cria uma classe de configuração:
    
    package me.dio.sacola.configuration;

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket;

@Configuration public class SwaggerConfig { @Bean public Docket getBean() { return new Docket(DocumentationType.SWAGGER_2).select() .paths(PathSelectors.regex("/ifood-devweek/.*")) .build() .apiInfo(getInfo()); } private ApiInfo getInfo() { return new ApiInfoBuilder() .title("Sacola API") .description("Sacola API para Servir uma Aplicação de Delivery") .build(); } }

4. Coloca as anotações pertinentes do Swagger no [Resource](https://github.com/cami-la/sacola-api_IFOOD_DEV_WEEK/blob/master/src/main/java/me/dio/sacola/resource/SacolaResource.java): 
```java
@Api(value="/ifood-devweek/sacolas")
Carol-Alexandre commented 1 year ago

Meu Deus, vou ter que te contratar como professora particular kkkkk

pelo que to vendo kkkkk

vou tentar aqui e te retorno para falar se deu certo kkkk

por falar nisso eu ate começei um projetinho inspirada em vc e coloquei aqui depois vc ver com carinho kkkk

https://github.com/Carol-Alexandre/calendario-primeiro-projeto

cami-la commented 1 year ago

Oi @Carol-Alexandre. Tudo bem?? (:

Dei uma olhada sim no projeto, mas não consegui entender muito... Acredito que é porque ainda não esteja finalizado, né?

Mas você já deu o primeiro passo que é tentar e está indo muito bem por sinal.

Sugiro recomeçar o projeto e deixar ele o mais simples possível.

Bons estudos e qualquer coisa é só falar.