diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..ec4bb386 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 00000000..c9ed50fc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,27 @@ +# **Titulo da Issue** + +## **WHAT** + + + +--- + +## **WHY** + + + +--- + +## **ADDITIONAL INFO** + + + +--- + +## **CHECKLIST** + + +- [ ] item 1 +- [ ] item 2 + +--- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..8a06eb3d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,36 @@ +--- +name: Feature request +about: Titulo da Issue +title: '' +labels: '' +assignees: '' + +--- + +# **Titulo da Issue** + +## **WHAT** + + + +--- + +## **WHY** + + + +--- + +## **ADDITIONAL INFO** + + + +--- + +## **CHECKLIST** + + +- [ ] item 1 +- [ ] item 2 + +--- diff --git a/README.md b/README.md index a64cdbfe..0b72fbd3 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,13 @@ A configuração já está dockerizada, então você só precisa ter o Docker Co - **PHP** 8.3 - **PostgreSQL** 13 +- **MongoDB** - **Nginx** - **Symfony** 7 -## Começando +## Instalação +
+Passo a passo ### Clonar o Repositório @@ -38,22 +41,60 @@ Execute o Docker Compose para iniciar os contêineres: docker-compose up -d ``` -## Instalação - -### Entrar no Contêiner PHP +### Instalar Dependências Para instalar as dependências do projeto, entre no contêiner PHP: ```bash docker-compose exec -it mapinha-php bash ``` -### Instalar Dependências Dentro do contêiner, execute: ```bash composer install ``` -## Uso +### Uso Depois que tudo estiver configurado e as dependências instaladas, você pode acessar sua aplicação Symfony em [http://localhost:8080](http://localhost:8080). Também criei uma rota de teste. Você pode acessá-la em [http://localhost:8080/hello](http://localhost:8080/hello). Esta rota está definida no controller `HelloWorldController` e retorna a mensagem "Bem vind@ ao Mapas Culturais CE". + +
+ + +## Desenvolvimento +
+Arquitetura e Decisões técnicas + +Estamos utilizando o Symfony e o seu ecossistma de bibliotecas, porém a arquitetura é baseada em camadas e trata-se de um monolítico com a metodologia API First + +```mermaid +flowchart TD + HC((HttpClient)) --JsonRequest<--> R[Routes] + B((Browser)) --GET/POST--> Routes + R --> CA[[ControllerApi]] + Routes --> CW[[ControllerWeb]] + CA <--> S[Service] + CW <--> S + S <--> RP[Repository] + RP <==> D[(Database)] + CA --JsonResponse--> HC + CW --HTML/CSS/JS--> B +``` + +Para saber mais sobre nossas decisões técnicas [acesse aqui](./help/README.md) +
+ +## Design UI/UX +
+Informações importantes + +### Prototipação das telas +A prototipagem das telas é feita por outro time, do RedeMapas, e se encontra [neste link do Figma](https://www.figma.com/design/HkR1qdfHPn4riffcBBOQwR/Prot%C3%B3tipos-%7C-Prioriza%C3%A7%C3%B5es?node-id=0-1&t=n23kLvhTSbEMELhz-0) + +### Componentes web +Há um fork do Bootstrap (framework css) com a implementação dos protótipos acima, se encontra [neste repositório](https://github.com/secultce/mapaculturaldesign) + +### Decisões de Design +Alguns protótipos implementados não estão seguindo a risca o design sugerido, por decisões totalmente técnicas que estão [documentadas aqui](https://github.com/secultce/mapaculturaldesign/blob/main/help/design-decisions.md) +
+ diff --git a/help/CREATE-ISSUES.md b/help/CREATE-ISSUES.md new file mode 100644 index 00000000..3a1ade0b --- /dev/null +++ b/help/CREATE-ISSUES.md @@ -0,0 +1,21 @@ +# Como contribuir criando issues + +## Instruções para criar uma nova issue + +1 - Navegue até a aba de issues: + +Você pode acessar diretamente por aqui https://github.com/secultce/mapinha/issues + +2 - Escolha o tipo de issue + +Clique em `New Issue` e logo após escolha o tipo de issue: +- Feature Request +- Bug Report + +3 - Preencha a descrição + +Adicione o máximo de informações possíveis, seguindo o template que foi carregado no formulário de criação. + +> Lembre-se que provavelmente outra pessoa é quem implementará a mudança, então, tal pessoa precisará do máximo de informações possíveis. +> +> Mesmo que seja você quem for implementar, ainda assim o máximo de detalhes é importante para fins de documentação e auditoria. diff --git a/help/CREATE-PULL-REQUESTS.md b/help/CREATE-PULL-REQUESTS.md new file mode 100644 index 00000000..a8d0db92 --- /dev/null +++ b/help/CREATE-PULL-REQUESTS.md @@ -0,0 +1,46 @@ +# Pull Requests + +1 - Escolha uma issue + +Acesse e escolha em qual issue quer trabalhar + +2 - Atualize o seu branch principal (develop) + +Para isso você já deve ter uma instalação local desse repositório. + +Caso não possua uma instalação, [veja aqui como instalar](./../README.md) + +Agora, dentro do diretório atualize seu branch: +````shell +git pull origin develop +```` + +3 - Crie um branch para a resolução da issue + +```shell +git checkout -b feat/resolve-tal-coisa +``` + +4 - Faça os códigos da implementação + +Siga as regras da [PSR-12](https://www.php-fig.org/psr/psr-12/), bem como, boas práticas de programação PHP: +- Kiss +- Dry +- Clean Code +- Design Patterns +- etc + +5 - Execute os testes e o CS-FIXER + +Você precisa criar testes que garantam a sua implementação +Para garantir que você não quebrou nada, e que o código está de acordo com as regras da aplicação, execute os comandos de STYLE CODE e TESTS que se encontra [nessa seção da documentação](../app/README.md#console-commands) + +6 - Faça o commit + +A regra, para melhor organização do repositório, é apenas 1 (um) commit por Pull Request + +7 - Abra o pull request + +Abra o pull request para o projeto `secultce/mapinha` e na descrição do PR informe se há algo a ser levado em consideração, bem como, especifique qual issue aquele pull request está atrelado. + +> Pronto, agora é só esperar o seu PR passar pelas validações de testes e code style, e depois ter 2 approves \ No newline at end of file diff --git a/help/README.md b/help/README.md new file mode 100644 index 00000000..917a9f1b --- /dev/null +++ b/help/README.md @@ -0,0 +1,408 @@ +# Mapinha - Arquitetura + +Essa é a documentação das decisões tećnicas, voltada para desenvolvedores e/ou entusiastas do código. + +
+ Acesso Rápido + +[Instalação dos Pacotes](#Instalação)
+[Controller](#API)
+[Repository](#Repository)
+[Command](#Command)
+[Data Fixtures](#Data-Fixtures)
+[Testes](#Testes)
+[Console](#console-commands)
+ +
+ +## Getting Started + +### Instalação dos pacotes + +Para instalar as dependências e atualizar o autoload, entre no container da aplicação e execute: +```shell +composer install +``` + +--- + +## Controller + +Os `Controllers` em conjunto com as `Routes` permitem criar endpoints para diversas finalidades. + +
+Como criar um novo controller + +#### 1 - Controller +Crie uma nova classe em `/app/Controller/Api/`, por exemplo, `EventApiController.php`: + +```php + Para gerar respostas em json, estamos utilizando a implementação da `JsonResponse` fornecida pelo pacote do Symfony: +> Para gerar respostas em HTML, estamos utilizando a implementação da `Response` (`Twig`) fornecida pelo pacote do Symfony: + +```php + 1, 'name' => 'Palestra'], + ['id' => 2, 'name' => 'Curso'], + ]; + + return new JsonResponse($events); + } + + public function getList(): Response + { + $events = [ + ['id' => 1, 'name' => 'Palestra'], + ['id' => 2, 'name' => 'Curso'], + ]; + + return $this->render('view.html.twig', $events); + } +} +``` + +#### 3 - Rotas + +Acesse os arquivos das rotas em `/config/routes` lá nós estamos separando as rotas em API e Web + +```yaml +get: + path: /example + controller: App\Controller\Admin\ExampleAdminController::action + methods: ['GET'] +``` + +Atente-se para seguir o padrão, um arquivo `.yaml` por controller + +#### 4 - Pronto + +Feito isso, seu endpoint deverá estar disponivel em: + + +E deve estar retornando um JSON ou uma página web, dependendo da action que você criou. + +
+ +--- + +## Repository + +A camada responsável pela comunicação entre nosso código e o banco de dados. + +
+Como criar um novo repository + +Siga o passo a passo a seguir: + +#### Passo 1 - Crie sua classe no `/app/src/Repository` e extenda a classe abstrata `AbstractRepository` + +```php + + +--- + +## Migrations +Migrations são a forma (correta) de fazer um versionamento do banco de dados, nesta parte da aplicação isso é fornecido pela biblioteca `doctrine/migrations` mas no core do MapaCultural isso ainda é feito por uma decisão técnica interna chamada `db-updates.php` + +
+Como criar uma nova migration + +#### Passo 1 - Criar uma nova classe no diretório `/app/migrations` + +```php +addSql('CREATE TABLE ...'); + } + + public function down(Schema $schema): void + { + //$this->addSql('DROP TABLE ...'); + } +} +``` + +Note que o nome da classe deve informar o momento de sua criação, para que seja mantida uma sequencia temporal da evolução do esquema do banco de dados. + +> Documentação oficial das migrations do Doctrine: +
+ +## Command +Comandos são entradas via CLI (linha de comando) que permitem automatizar alguns processos, como rodar testes, veririfcar estilo de código, e debugar rotas + +
+Como criar um novo console command + +#### Passo 1 - Criar uma nova classe em `app/src/Command/`: + +```php +writeln('Hello World!'); + + return Command::SUCCESS; + } +} +``` + +#### Passo 2 - Testar seu comando no CLI + +Entre no container da aplicação PHP e execute isso + +```shell +php bin/console app:my-command +``` + +Você deverá ver na tela o texto `Hello World!` + +#### Passo 3 - Documentação do pacote +Para criar e gerenciar os nosso commands estamos utilizando o pacote `symfony/console`, para ver sua documentação acesse: + +> Saiba mais em + +Para ver outros console commands da aplicação acesse a seção [Console Commands](#console-commands) + +
+ +--- + +## Data Fixtures +Data Fixtures são dados falsos, normalmente criados para testar a aplicação, algumas vezes são chamados de "Seeders". + +
+Como criar uma DataFixture para uma Entidade + +#### Passo 1 - Criar uma nova classe em `app/src/DataFixtures/`: + +```php +name = 'Agente Teste da Silva'; + + $manager->persist($agent); + $manager->flush(); + } +} +``` + +#### Passo 2 - Executar sua fixture no CLI + +Entre no container da aplicação PHP e execute isso + +```shell +php bin/console doctrine:fixtures:load +``` + +Pronto, você deverá ter um novo Agente criado de acordo com a sua Fixture. + +> Saiba mais sobre DataFixtures em + +
+ +--- + +## Testes +Estamos utilizando o PHPUnit para criar e gerenciar os testes automatizados, focando principalmente nos testes funcionais, ao invés dos testes unitários. + +Documentação do PHPUnit: + +
+Como criar um novo teste + +### Criar um novo teste +Para criar um no cenário de teste funcional, basta adicionar sua nova classe no diretório `/app/tests/functional/`, com o seguinte código: + +```php +dump($list); // equivalente ao print_r + + $this->assertEquals( + 'MarMinino', + implode('', $list) + ); +} +``` + +Para executar os testes veja a seção Console Commands +
+ +--- + +## DI (Injeção de dependência) +A injeção de dependência já acontece automaticamente pela própria estrutura do Symfony + +## Console Commands + +
+CACHE CLEAR + +### Limpar cache +Para executar o comando de limpar cache basta entrar no container da aplicação e executar o seguinte comando: + +```shell +php bin/console cache:clear +``` + +
+ +
+COMMAND SQL + +### Executar código SQL +Para executar um comando SQL basta entrar no container da aplicação e executar o seguinte comando: + +```shell +php bin/console doctrin:query:sql {sql} +``` +O argumento chamado de `sql` é requerido e é o comando a ser executar no banco de dados. +
+ +
+TESTS + +### Testes Automatizados +Para executar os testes, entre no container da aplicação e execute o seguinte comando: + +```shell +php bin/phpunit {path} +``` + +O `path` é opcional, o padrão é "/tests" +
+ +
+STYLE CODE + +### Style Code +Para executar o PHP-CS-FIXER basta entrar no container da aplicação e executar + +```shwll +php bin/console app:code-style +``` +
+ +
+DATA FIXTURES + +### Debug router +Para listas as routas basta entrar no container da aplicação e executar +``` +php bin/console debug:router +``` + +> Podemos usar as flags --show-actions e --show-controllers +
+ +
+DOCTRINE + +### Doctrine +Para listas todos os comandos disponiveis para gerenciamento do banco de dados através do doctrine basta entrar no container da aplicação e executar +``` +php bin/doctrine +``` + +
+