An open API service indexing awesome lists of open source software.

https://github.com/ericneves/mysecretmessage

:fire: Application developed with PHP, Ports and Adapters Architecture, Postgres, Redis, Tests, Angular, PrimeNG and more...
https://github.com/ericneves/mysecretmessage

angular docker hexagonal-architecture php ports-and-adapters postgresql primeng redis

Last synced: 5 months ago
JSON representation

:fire: Application developed with PHP, Ports and Adapters Architecture, Postgres, Redis, Tests, Angular, PrimeNG and more...

Awesome Lists containing this project

README

        







My Secret Message







Projeto web desenvolvido com PHP e Angular, implementando melhorias na estrutura da aplicação em PHP através do uso de um dos modelos da Arquitetura Limpa, conhecido como Ports and Adapters ou Arquitetura Hexagonal.

Data de criação: Aug 4, 2024

https://github.com/user-attachments/assets/7884329d-ccad-4ae3-b954-28686556a9ba

#### Intro 📃

**My Secret Message** é um projeto web desenvolvido com **PHP** e **Angular**, projetado para o compartilhamento seguro de mensagens secretas. Para acessar a mensagem, o destinatário precisa de uma chave secreta (**secret key**), garantindo que apenas pessoas autorizadas possam visualizá-la. Além disso, o criador da mensagem pode definir um tempo de expiração, após o qual a mensagem se torna inacessível, proporcionando uma camada adicional de segurança e controle.

Esse projeto traz como principal **feature** a implementação de um dos modelos de **Arquitetura Limpa** conhecido porpulamente como **Hexagonal** ou **Ports** and **Adapters**.

Esse modelo arquitetônico tem como principal recurso a utilização de **Portas** e **Adaptadores**, mas afinal, o que isso significa ?

> [!NOTE]
>
> **Exemplo** - Maria comprou um cartão microSD para usar em sua câmera fotográfica, mas ao tentar inseri-lo, percebeu que sua câmera suporta apenas cartões SD de tamanho padrão. Para resolver o problema, Maria foi até uma loja de informática e adquiriu um adaptador de microSD para SD, permitindo que o cartão funcionasse perfeitamente em sua câmera.
>
>

Esse exemplo ilustra perfeitamente o conceito de **Ports** and **Adapters** na arquitetura de software. No contexto do sistema, as **portas** representam interfaces ou pontos de entrada e saída definidos, enquanto os **adaptadores** são responsáveis por conectar diferentes componentes do sistema, permitindo que trabalhem juntos, mesmo que usem formatos ou tecnologias diferentes.

Na estrutura da aplicação, as regras de negócio podem incluir um sistema de cadastro de usuários que utiliza a interface **UserRepositoryPort** (**ports/out**). Como adaptador, posso implementar o repositório **UserPostgresRepository** (**adapters/out**), o que me dá a flexibilidade de integrar diferentes tipos de bancos de dados, como em **memória**, **SQL**, **NoSQL**, entre outros. Isso torna a aplicação altamente flexível e preparada para mudanças futuras, permitindo a substituição ou adição de novas tecnologias sem impactar a lógica central do sistema.

> [!NOTE]
> **Citações Relacionadas**
>
> - **Livro Arquitetura Limpa**: "Portanto, as arquiteturas devem ser tão agnósticas em sua forma quanto práticas."
> - **Livro Arquitetura Limpa**: "A dificuldade em realizar uma mudança deve ser proporcional apenas ao escopo da mudança e não à forma da mudança."
> - **Livro Arquitetura Limpa**: "A arquitetura representa decisões significativas de design que moldam um sistema, onde a significância é medida pelo custo de mudança."
>

#### Features 🔭

Abaixo está a lista de **tecnologias** e **recursos** utilizados neste projeto, juntamente com a implementação da **infraestrutura** da API. Importante destacar que a API foi desenvolvida sem o uso de **frameworks**, utilizando exclusivamente **PHP**.

- API
- PHP:8.2
- ports and adapters architecture
- routes
- request/response
- controllers
- middlewares
- jwt
- libraries
- phpunit/phpunit:10.5
- vlucas/phpdotenv:5.6
- predis/predis:2.2
- ramsey/uuid:4.7
- postgreSQL:15.4
- redis:latest
- Web
- angular:17
- routes
- guards
- interceptors
- services
- events
- libraries
- typescript:5.4
- primeflex:3.3
- primeicons:7
- primeng:17.8
- devOps
- docker
- docker Compose

#### How to use ? 💡

> [!NOTE]
>
> Para garantir a execução bem-sucedida da aplicação, é essencial seguir os passos abaixo.
>

```sh

# project dir
$ cd mySecretMessage

# install web dependencies
$ cd web && pnpm install

# install www dependencies
$ cd www && composer install && cp .env.exemple .env

# run docker
$ cd ./mySecretMessage && docker compose -f "docker-compose.yml" up -d --build

```

#### Tests 🔋

```sh

# unit tests
$ cd www && composer test:unit

# integration tests
$ cd www && composer test:integration

```

#### Author 🦆








Eric Neves















#### License 📋