Faça um fork desse repositório

Este é um repositório vazio de propósito. A ideia é que você faça um fork para que eu, Alberto, possa usar o github para ter a chance de olhar vários dos códigos produzido por você e seus(as) colegas da Jornada Dev Eficiente :).

Durante cada uma das seis semanas eu vou pegar código por amostragem e analisar. Feito isso, vou criar um vídeo anonimizando a pessoa que é dona do código, com as minhas observações e postar isso como material de suporte da funcionalidade :).

Aplicar cupom

  • Necessidades Agora, no começo do processo de finalização de compra, um cupom pode ser aplicado.

  • restrições

    • o código do cupom precisa ser válido - verificar se o cupom esta cadastrado no banco.
    • o cupom precisa ser válido ainda - verificar se o cupom ainda e valido pela data.
    • Uma vez associado o cupom, uma compra nunca pode ter essa informação alterada. - criar o atributo cupom como final.
    • O cupom só pode ser associada com uma compra que ainda não foi registrada no banco de dados (esse daqui eu não implementei) - verificar se a compra esta no banco. resultado esperado Manter o mesmo resultado que já existia

sobre a utilização do material de suporte aqui Agora você tem mais um passo para fazer no momento da criação da compra, que é a aplicação do cupom. A verdade é que você já treinou tudo que precisa para implementar essa funcionalidade.

Aplicar o cupom direto na compra ou seja usar o controller do compra

Criar um atributo codigo do cupom na novacompra request

passar um atributo CupomRepository no toModel da da classe NovaCompraRequest

Criar um repository para o cupom

  • Criar um metodo findBy codigo

Validar se o cupom existe

  • fazer um assert no metodo toModel da classe NovaCompraRequest

Associar o cupom na compra

  • criar um metodo aplicarCupom na classe compra Validar se o cupom ainda e valido

    • fazer um assert verificando se o cupom ainda e valido t
    • criar um atributo do tipo CupomAplicado na classe compra
      • A classe CupomAplicado recebe um atributo Cupom e guarda todas as informacoes do cupom como, validadeDoMomento, DescontoDoMomento e o proprio cupom de desconto
      • Anotar o atributo cupom como ManyToOne
      • Anotar a classe CupomAplicado como Embeddable Nao pode trocar o cupom de uma compra depois de aplicado
    • fazer um assert verificando se o atributo cupomAplicado esta nulo
  • anotar o atributo cupom como @Embedded, pois isso vai registrar o cupom na mesma tabela da compra.

Criar o atributo CupomRepository na classe NovaCompraRequest Anotar o atributo como autowired

Criar o toString para todos os metodos