Catalog · How the catalog works
horse-store
Caso de estudos - loja API Horse
- ★ 7 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Horse Store
horse-store é um projeto com objetivo de praticar desenvolvimento multi-camadas de aplicação. Foi criado utilizando a IDE Delphi Community Edition 11 Alexandria e tem como principais dependências bibliotecas gratuitas.
Sobre o projeto

- loja.exe: Cliente VCL (Visual Components Library ou Biblioteca de Componentes Visuais);
- loja_server_console.exe: Versão console API, portável para Linux
- loja_server_vcl.exe: Versão com interface gráfica da API, exclusivo para Windows;
- loja_server_test.exe: Projeto de testes
Padrões de Projeto (Design Patterns)
Servidor
- Abstract Factory: “Fábrica” que retorna objetos que obedecem um (ou mais) “contrato(s)” (interface);
- SRP - Single Responsiblity Principle: Única responsabilidade;
- Ex: Model contém regra de negócio, DAO acesso aos dados, Entity interface com os dados, DTO trafegar dados;
- OCP - Open-Closed Principle: Objetos ou entidades devem estar abertos para extensão, mas fechados para modificação, ou seja, quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e não alterar o código fonte original.
- Ex: DAO Oficial e DAO In-Memory, implementam mesmas interfaces, um tem objetivo de acesso a banco de dados e o outro salva dados em memória;
- DIP — Dependency Inversion Principle: Inversão de dependência, como cada classe tem seu objetivo bem definido, uma não “invade” a outra. Logo, uma classe não precisa saber como conectar ao repositório, basta acionar a classe que implementa tal interface;
- (Desejado) LSP— Liskov Substitution Principle: Implementação de injeção de dependência nos Model’s para definição dos DAOs.
Cliente
- MVC: Padrão Model + View + Controller:
- Model: classe para interfacear dados enviados ou recebidos da API
- View: basicamente são as telas gráficas do cliente;
- Controller: classes responsáveis por obter os dados, no caso, oriundos da API;
Estrutura pastas Servidor


- ./
- src
- controllers
- Loja.Controller.X.pas
- model
- bo:
- Loja.Model.Bo.Interfaces.pas
- Loja.Model.Bo.Factory.pas
- Loja.Model.Bo.X.pas
- dao:
- in-memory
- Loja.Model.Dao.X.Factory.InMemory.pas
- oficial
- Loja.Model.Dao.X.Factory.pas
- Loja.Model.Dao.Interfaces.pas
- Loja.Model.Dao.Factory.pa
- Loja.Model.Dao.X.Interfaces.pas
- in-memory
- dto:
- Loja.Model.Dto.Req.X.pas
- Loja.Model.Dto.Resp.X.pas
- entity
- Loja.Model.Entity.X.pas
- Loja.Model.Interfaces.pas
- Loja.Model.Factory.pas
- Loja.Model.X.pas
- bo:
- App.pas
- controllers
- src
- boss.json
Principais dependências
- Boss
[https://github.com/HashLoad/boss](https://github.com/HashLoad/boss)
- Horse
[https://github.com/HashLoad/horse](https://github.com/HashLoad/horse)
- GBSwagger
[https://github.com/gabrielbaltazar/gbswagger](https://github.com/gabrielbaltazar/gbswagger)
[https://github.com/IagooCesaar/gbswagger](https://github.com/IagooCesaar/gbswagger)
- Horse Json Interceptor
- RestRequest4D
- Dataset Serialize
- Delphi Code Coverage
- Pascal Database Engine
Banco de Dados
Firebird 3.0
Firebird: The true open source database for Windows, Linux, Mac OS X and more
> isql -user sysdba employee
SQL> create user SYSDBA password 'SomethingCryptic';
SQL> commit;
SQL> quit;IBExpert

<aside> 💡 Script modelo para criação da base de dados: https://github.com/IagooCesaar/horse-store/tree/main/server/database
</aside>
Apresentando e Executando os projetos 🚀
Iniciando o projeto
Primeiro passo será instalar versão 11 da IDE Delphi, podendo ser até mesmo a versão Community Edition.
Será necessário obter o Boss, que é um gerenciador de dependência para o Delphi, similar ao NPM e YARN para Node.js. Verifique pela versão compatível com seu dispositivo dentre as opções em Releases.
Para rodar o projeto de testes será necessário a instalação do DelphiCodeCoverage. Neste projeto foi utilizada a versão 1.0.15, que pode ser obtida aqui.
Após realizar download do Boss e do DelphiCodeCoverage, recomendo colocar ambos os executáveis em uma mesma pasta em seu computador, e adicionar o caminho para acesso a esta pasta na variável PATH do seu Windows (nível de usuário ou a nível do computador). Com isto, você conseguirá utilizar estes executáveis facilmente no Windows Terminal (ou outros consoles do Windows).
Após fazer download do projeto, abra o Windows Terminal e navegue até a pasta onde se encontra o projeto.

- Baixando dependências para o projeto CLIENTE: Navegue até a pasta do projeto cliente (ex:
cd .\cliente\vcl) e rode o comandoboss install. Aguarde o final do procedimento e então retorne para a pasta anterior (ex:cd ..\..). - Baixando dependências para o projeto SERVER: Navegue até a pasta do projeto server (ex:
cd .\server) e rode o comandoboss install. Aguarde o final do procedimento.
IMPORTANTE:
Este projeto foi construído utilizando versão do GBSwagger que ainda não foi disponibilizada oficialmente. Ou seja, embora no arquivo
boss.jsonesteja indicando a versão 3.0.7 do GBSwagger, este projeto exige versão superior.
Deste modo, até que a nova versão desta dependência sejam publicadas, é recomendado que seja realizado o download manual da lib e então atualizada a dependência em
\server\modules\gbswagger. Assim que a nova versão for disponibilizada, este projeto será atualizado.
Para executar a avaliação de cobertura de código, execute o arquivo code_coverage.bat que se encontra na pasta .\server\. Os resultados serão salvos em .\server\Win64\Debug\. Recomenda-se, para esta avaliação, abrir o arquivo .\server\Win64\Debug\CodeCoverage_summary.html

💡 Execute o script de criação do banco de dados antes de rodar o script de verificação de cobertura de código.
💡 Utilize o projeto
loja_server_vclpara configurar o acesso ao banco de dados
💡 No vídeo há mais detalhes sobre a execução deste projeto


