Projeto Flash
Para iniciarmos nosso projeto primeiramente vamos criar nossa base de projeto Spring Boot pelo SpringInitializr.
Com nosso projeto iniciado, vamos começar pela camada mais externa do nosso projeto o controller, nele vamos trabalhar com nossa primeira feature : registerCompany (cadastrar empresa).
Com o protótipo de tela de cadastro teremos uma visão melhor da nossa feature.
Depois de criar o pacote controller, adicionamos a classe CompanyController ao pacote. Vamos utilizar as anotações @RestController e @RequestMapping na nossa classe, feito isso vamos montar nosso endpoint. Utilizamos a anotação @PostMapping e então adicionamos o modificador de acesso ao nosso endpoint. Vamos usar uma entidade de resposta passando o tipo de retorno seguido do nome do método, vamos passar como parâmetros um dto que vai nos dar mais segurança ao transitar os dados entre as camadas da aplicação, depois especificamos o retorno com nossa entidade de resposta que vai nos mostrar o status http e o body. No body passamos como argumento o objeto companyService seguido do seu método que contém a regra de negócio armazenado no pacote service.
Vamos criar o pacote service e dentro dele uma interface. Adicionamos a interface CompanyService para a abstração da implementação. Nela vamos adicionar um método para cadastrar a empresa passando como parâmetro um objeto da classe de entidade.
No mesmo pacote ainda vamos separar mais um pacote chamado impl onde vamos guardar nossas classes de serviço. Iniciamos uma classe no pacote impl e usamos a anotação @Service que indica que aquela classe é uma classe de serviço. Na classe de serviço implementamos a interface de abstração e vamos montar nossa primeira regra de negócio : iniciamos a regra com a anotação @Transactional que nos permite garantir a ACID que é uma estrutura de banco de dados que garante seu correto funcionamento e impede que dados sejam corrompidos ou perdidos no processamento de transações.
Colocamos o modificador de acesso seguido do tipo de retorno esperado e o nome do método com o seguinte parâmetro, um objeto do tipo da entidade. Para a regra de negócio vamos estipular que nenhuma empresa pode ser salva se ela já existir no banco de dados então para realizar a validação vamos usar uma estrutura de decisão onde vamos buscar através do repository se o cnpj informado pelo usuário já está ativo no banco de dados, se a resposta obtida for false então podemos salvar, do contrário não será possivel realizar a operação.
Recomendados pelo LinkedIn
Criamos mais um pacote chamado repository e dentro dele uma interface com o nome CompanyRepository, que estende o JpaRepository, na interface declaramos um método para realizar a verificação do cnpj no banco de dados.
Criamos o pacote exception e dentro dele a classe EntityException que irá nos ajudar a tratar as exceções, ela estende de RuntimeException. Iniciamos um construtor com o mesmo nome da classe passando como parâmetro uma String e tendo como resposta a mensagem explicitada no service.
Criamos o pacote model que irá guardar nossas entidades, dentro do pacote criamos nossa primeira entidade a CompanyModel. Usamos a anotação @Entity para informar que a classe se trata de uma entidade do banco de dados, adicionamos os atributos que vão compor nossa empresa, como chave primária da entidade vamos usar o id, e também vamos deixar o id para gerar valores automáticos. Nossa entidade é composta por atributos, contrutores, getters e setters e para finalizar o ToString.
Vamos Criar o pacote Dto e dentro dele a classe CompanyDto, nessa classe vamos colocar os atributos que acharmos pertinentes ao conhecimento do usuário e suas anotações correspondentes. Criamos um método que irá fazer a transferência de dados passando um dto para uma entidade, além disso nossa classe conta com getters, setters e ToString.
Quero agradecer pela atenção destinada a esse artigo, lembrando que essa é a nossa primeira feature.
Até a próxima!
Atenciosamente Silvia Santos Martins.
Professor | Consultor e Analista de Negócios de TI | Desenvolvimento Web | Mobile | Banco de Dados | Gamificação | Metodologia Ágil
1 aGrande Silvia!!! Parabéns