├── 00_ambiente ├── 00_install_git.md ├── 00_install_portugol.md ├── 01_install_dotnet.md ├── 02_install_visual_studio.md ├── 03_install_sql_server.md ├── 04_install_Insomnia.md ├── 05_install_vscode.md ├── 06_install_node.md └── README.md ├── 01_csharp ├── 01.md ├── 02.md ├── 03.md ├── 04.md ├── 05.md ├── 06.md ├── 07.md ├── 08.md ├── 09.md ├── 10.md ├── 11.md ├── 12.md ├── 13.md ├── 14.md ├── 15.md ├── 16.md ├── 17.md ├── 18.md ├── 19.md ├── README.md ├── b01.md ├── b02.md ├── b03.md ├── pr01.md ├── pr02.md ├── pr03.md ├── pr04.md ├── pr05.md ├── pr06.md ├── pr07.md ├── pr08.md ├── pr09.md └── pr10.md ├── 02_http └── 01.md ├── 03_mssql ├── 01.md ├── 02.md ├── 03.md ├── 04.md └── README.md ├── 04_aspnet ├── 01.md ├── 02.md ├── 03.md ├── 04.md ├── 05.md ├── 06.md ├── 07.md ├── 08.md ├── 09.md ├── 10.md ├── 11.md ├── 12.md ├── 13.md ├── 14.md ├── 15.md ├── 16.md ├── 17.md ├── 18.md ├── 19.md ├── 20.md ├── 21.md ├── 22.md ├── 23.md ├── 24.md ├── README.md └── uml.md ├── 05_react ├── 01.md ├── 02.md ├── 03.md ├── 04.md ├── 05.md ├── 06.md ├── 07.md ├── 08.md ├── 09.md ├── 10.md ├── 11.md ├── 12.md ├── 13.md ├── 14.md ├── 15.md ├── 16.md ├── 17.md ├── 18.md ├── 19.md ├── 20.md ├── 21.md ├── 22.md ├── 23.md ├── 24.md ├── 25.md ├── 26.md ├── 27.md ├── 28.md ├── 29.md ├── 30.md ├── 31.md ├── 32.pdf ├── 33.pdf └── README.md └── README.md /00_ambiente/00_install_git.md: -------------------------------------------------------------------------------- 1 |

Guia de Instalação do GIT - Windows

2 | 3 | 4 | 1. Faça o Download da Instalação do Git através do endereço: **https://git-scm.com/download/win** 5 | 6 | 2. Você será redirecionado para o site do Git. Faça o download do arquivo **64-bit Git for Windows Setup** indicado na imagem abaixo: 7 | 8 |
9 | 10 | 3. Execute o arquivo **64-bit Git for Windows Setup**, com um duplo clique do mouse. 11 | 12 | 4. Na janela **Information**, será exibida a licença do Git. Clique em **Next** para continuar. 13 | 14 |
15 | 16 | 5. Na janela **Select Destination Location**, será definida a pasta onde o Git será instalado. Mantenha a pasta padrão, como mostra a imagem abaixo e clique em **Next** para continuar. 17 | 18 |
19 | 20 | 6. Na janela **Select Components**, você pode selecionar os componentes do Git que serão instalados. Mantenha as opções da instalação padrão, como mostra a imagem abaixo e clique em **Next** para continuar. 21 | 22 |
23 | 24 | 7. Na janela **Select Start Menu Folder**, você pode indicar o nome da pasta no Menu Iniciar do Windows onde os atalhos do Git serão criados. Mantenha as opções da instalação padrão, como mostra a imagem abaixo e clique em **Next** para continuar. 25 | 26 |
27 | 28 | 8. Na janela **Choosing the default editor used by Git**, você pode selecionar o Editor de Código (IDE) padrão do Git. Neste tutorial sugerimos utilizar o **Visual Studio Code** (caso esteja instalado), como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 29 | 30 |
31 | 32 | *Caso você não tenha o **Visual Studio Code** instalado na sua máquina, você pode deixar a opção padrão do instalador do Git e configurar manualmente depois de instalar o Visual Studio Code.* 33 | 34 | 9. Na janela **Adjusting the name of the initial branch in new repositories**, você pode alterar o nome padrão de um novo repositório Git. Vamos alterar marcando a opção **Override the default branch name for new repositories** e indicar a palavra **main** como nome padrão para novos repositórios Git, como mostra a imagem abaixo e clique em **Next** para continuar. 35 | 36 |
37 | 38 | 10. Na janela **Adjusting your PATH environment**, você pode indicar em quais Teminais os comandos do Git serão executados. Marque a opção **Git from the command line and also from 3rd-party software** para executar os comandos em todos os terminais disponíveis no Windows (CMD - Prompt de Comando do Windows, Power Shell, Git Bash, entre outros), como mostra a imagem abaixo e clique em **Next** para continuar. 39 | 40 |
41 | 42 | 11. Na janela **Choosing the SSH executable**, você poderá selecionar qual cliente SSH (**Secure Socket Shell**) será utilizado. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 43 | 44 |
45 | 46 | > **SSH** é a sigla para **Secure Socket Shell, que é um dos protocolos específicos de segurança de troca de arquivos entre cliente e servidor de Internet, usando criptografia**. O objetivo do SSH é permitir que pessoas desenvolvedoras ou outros usuários realizem alterações em sites e servidores utilizando uma conexão simples e segura. 47 | 48 | 12. Na janela **Choosing HTTPS transport backend**, você poderá selecionar qual o protocolo **SSL** (**Secure Socket Layer**) será utilizado. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 49 | 50 |
51 | 52 | 13. Na janela **Configuring the line ending conversions**, você poderá configurar como o Git irá tratar os arquivos de código. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 53 | 54 |
55 | 56 | 14. Na janela **Configuring the terminal emulator to use with Git Bash**, você poderá selecionar como o Terminal do Git Bash será emulado no Windows. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 57 | 58 |
59 | 60 | *Como o Bash é um interpretador de comandos do mundo Unix/Linux, ele não será executado de forma nativa no Windows, ou seja, ele será emulado.* 61 | 62 | 15. Na janela **Choose the default behavior of `git pull `**, você poderá selecionar como o comando **git pull** se comportará. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 63 | 64 |
65 | 66 | 16. Na janela **Choose a credential helper**, você poderá selecionar como o **Git** irá gerenciar os dados do usuário. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 67 | 68 |
69 | 70 | 17. Na janela **Choose extra options**, você poderá selecionar recursos extras do **Git**. Mantenha a opção padrão, como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 71 | 72 |
73 | 74 | 18. Na janela **Configuring experimental options**, você poderá selecionar recursos experimentais (em teste) do **Git**. Mantenha a opção padrão (todas as opções desmarcadas), como mostra a imagem abaixo e na sequência clique em **Next** para continuar. 75 | 76 |
77 | 78 | 19. Aguarde a conclusão da instalação. 79 | 80 |
81 | 82 | 20. Assim que a instalação for concluída, na janela **Completing the Git Setup Wizard**, mantenha todas as opções desmarcadas e na sequência clique no botão **Finish**. 83 | 84 |
85 | 86 | 21. Na sequência será solicitado que você se conecte com o **Github**. **Caso não seja solicitado após a instalação, ao enviar um arquivo para o Github pela primeira vez, o Git irá solicitar a autenticação**. Clique no botão **Sign in with your browser**. 87 | 88 |
89 | 90 | 22. O seu Navegador da Internet será aberto e você será redirecionado para a página **Sign in to GitHub**, semelhante a imagem abaixo: 91 | 92 |
93 | 94 | 23. Digite o seu usuário e senha do Github para autenticar. Na sequência será exibida a janela abaixo, informando que a autenticação foi realizada com sucesso! 95 | 96 |
97 | 98 |

99 | 100 |
Voltar
101 | -------------------------------------------------------------------------------- /00_ambiente/00_install_portugol.md: -------------------------------------------------------------------------------- 1 |

Guia de Instalação do Portugol Studio

2 | 3 | O Portugol Studio é um software que vai auxiliar a pessoa desenvolvedora no processo de aprendizagem e adaptação aos comandos e estruturas de programação. 4 | 5 | 1. Acesse o site: [http://lite.acad.univali.br/portugol/](https://univali-lite.github.io/Portugol-Studio/) e clique no botão Download 6 | 7 |
8 | 9 | 3. Ao executar esse instalador precisamos permitir a execução do mesmo no sistema operacional, verifique se em sua barra de tarefas ou área de trabalho surgiu essa solicitação de permissão, nessa fase precisamos confirmar essa permissão clicando em "SIM" 10 | 11 | 4. O instalador vai exibir sua tela de boas vindas, aqui devemos seguir clicando em Avançar 12 | 13 |
portugol-instala-o-1
14 | 15 | 4. Na tela seguinte marque a opção: "Eu aceito os termos do acordo" e clique em Avançar 16 | 17 |
portugol-instala-o-2
18 | 19 | 5. Seguiremos para a tela de apresentação do software, aqui podemos clicar em Avançar 20 | 21 |
portugol-instala-o-3
22 | 23 | 6. Seguindo as orientações da LGPD o software vai apresentar os termos de uso, clique em Avançar 24 | 25 |
portugol-instala-o-4
26 | 27 | 9. Aguarde o processo de instalação onde vamos acompanhar a barra de progresso 28 | 29 |
portugol-instala-o-5
30 | 31 | 10. A próxima tela é apenas informativa, sobre abertura de arquivos, você poderá escolher entre os modos de execução Console ou Gráfico, em nossas sessões utilizaremos o modo Gráfico. Clique em Avançar 32 | 33 |
portugol-instala-o-6
34 | 35 | 11. Seguiremos então para a tela abaixo que é a tela de finalização que deverá apresentar a mensagem "A configuração do Portugol Studio foi finalizada em seu computador", clique em Finalizar 36 | 37 |
portugol-instala-o-7
38 | 39 | Seguindo os passos acima descritos concluímos a instalação do Portugol Studio, que pode ser localizado em sua máquina através da caixa de pesquisa da sua barra de tarefas, ou no menu iniciar do seu sistema operacional. 40 | 41 | portugol-instala-o-8-JPG 42 | 43 | 44 |

45 | 46 |
Voltar
47 | -------------------------------------------------------------------------------- /00_ambiente/01_install_dotnet.md: -------------------------------------------------------------------------------- 1 |

Guia de Instalação - Microsoft .NET - Versão 7.0

2 | 3 | 4 | 5 | 1. Acesse o Link, e faça download clicando em **x64**: 6 | 7 |
8 | 9 | 2. Abra o arquivo de instalação com um duplo clique do mouse, em seguida clique no botão **Instalar**: 10 | 11 |
12 | 13 | 3. Leia o que foi instalado em sua máquina, e click em **Fechar** para finalizar instalação. 14 | 15 |
16 | 17 |

18 | 19 |
Voltar
20 | -------------------------------------------------------------------------------- /00_ambiente/02_install_visual_studio.md: -------------------------------------------------------------------------------- 1 |

Guia de Instalação - Microsoft Visual Studio

2 | 3 | 4 | 1. Acesse o Link e role a tela para baixo até encontrar o conteúdo da imagem abaixo: 5 | 6 |
7 | 8 | 2. Clique no botão **Baixar o Visual Studio** e faça download da versão Community, clicando no item **Community 2022**: 9 | 10 |
11 | 12 | 3. Clique no arquivo de instalação, e em seguida clicar em **Continuar**: 13 | 14 |
15 | 16 | 4. Na tela de Cargas de trabalho selecione **ASP.NET e desenvolvimento Web**, e clique em **Instalar**: 17 | 18 |
19 | 20 | 5. Aguarde a finalização da instalação. 21 | 22 |
23 | 24 | 6. Na sequência, será aberta a janela de login na Microsoft. Clique no link **Ignore isso por enquanto** para continuar. 25 | 26 |
27 | 28 | 7. Na sequência, escolha o Tema de cores de sua preferência e clique no botão **Iniciar o Visual Studio**. 29 | 30 |
31 | 32 | 8. Aguarde a conclusão das configurações. 33 | 34 |
35 | 36 | 9. A tela inicial do Visual Studio será aberta! 37 | 38 |
39 | 40 |

41 | 42 |
Voltar
43 | -------------------------------------------------------------------------------- /00_ambiente/03_install_sql_server.md: -------------------------------------------------------------------------------- 1 |

Instalação SQL Server e SSMS

2 | 3 | 4 | 5 | 1. Instalando SQL Server 6 | 7 | 2. Instalando SSMS (SQL Server Management Studio) 8 | 9 | 3. Configurando o SSMS (SQL Server Management Studio) 10 | 11 | 12 | 13 |

1. Instalando SQL Server

14 | 15 | 1. Acesse o Link e role a tela para baixo até encontrar o conteúdo da imagem abaixo: 16 | 17 |
18 | 19 | 2. Clique no botão **Fazer download agora >** do item **Desenvolvedor**: 20 | 21 |
22 | 23 | 3. Clique no arquivo de instalação, em seguida selecione o tipo de instalação **Básico**: 24 | 25 |
26 | 27 | 4. Leia os termos de licença do Microsoft SQL Server, e clique em **Aceitar**: 28 | 29 |
30 | 31 | 5. Mantenha o local padrão de instalação e clique em **Instalar**: 32 | 33 |
34 | 35 | 7. Aguarde a conclusão da instalação. 36 | 37 |
38 | 39 | 8. Antes de finalizar instalação, vamos instalar o **SQL Server Management Studio**, a IDE do SQL Server. 40 | 41 |
42 | 43 | 9. Clique no botão **Instalar o SSMS** para instalar o **SQL Server Management Studio**. 44 | 45 |
46 | 47 |
48 | 49 |

2. Instalando o SSMS (SQL Server Management Studio)

50 | 51 | 52 | 53 | 1. Após clicar no botão Instalar o **SSMS** - **SQL Server Management Studio**, você será redirecionado para o site da Microsoft, para efetuar o download. 54 | 55 | 2. Caso não seja redirecionado, acesse o Link, e faça download clicando em **Download gratuito do SSMS (SQL Server Management Studio) 19.1**, como mostra a imagem abaixo: 56 | 57 |
58 | 59 | 3. Clique no arquivo de instalação, mantenha o local de instalação definido pelo Windows e clique em **Instalar**: 60 | 61 |
62 | 63 | 4. Aguarde a conclusão da instalação. 64 | 65 |
66 | 67 | 5. Clique em **Fechar** para finalizar a instalação. 68 | 69 |
70 | 71 | 6. Clique em **Fechar** para finalizar instalação. 72 | 73 |
74 | 75 | 7. Caso a mensagem abaixo seja exibida, clique em **Sim** para finalizar instalação. 76 | 77 |
78 | 79 | 8. Neste momento, pode acontecer do SQL Server pedir para reiniciar o seu computador para finalizar a configuração. 80 | 81 |
82 | 83 |

3. Configurando o SSMS (SQL Server Management Studio)

84 | 85 | 86 | 87 | 1. Após concluir a instalação do **SQL Server Management Studio**, podemos iniciar a ferramenta através da caixa de pesquisa da sua barra de tarefas, ou no menu iniciar do seu sistema operacional. 88 | 89 |
90 | 91 |
92 | 93 | 2. Uma vez que estamos no **SQL Server Management Studio** precisamos nos conectar com o **SQL Server**, através da tela abaixo. Observe que no item Nome do Servidor, o SQL Server inseriu o nome do seu computador (hostname). 94 | 95 |
96 | 97 | 3. Configure a sua conexão igual a imagem abaixo, alterando o item **Nome do servidor** para **localhost** e clique no botão **Conectar** 98 | 99 |
100 | 101 |
102 | 103 | | |
**DICA:** *Caso a mudança para localhost gere um erro de conexão com o SQL Server, mantenha o nome do seu computador no item Nome do servidor e clique em Conectar.*
| 104 | | ------------------------------------------------------------ | ------------------------------------------------------------ | 105 | 106 |
107 | 108 | 4. Será aberta a janela principal do **SQL Server Management Studio**: 109 | 110 |
111 | 112 | 5. Caso a janela de consultas (**SQLQuery1.sql**) não tenha sido aberta automaticamente, na Barra de Ferramentas do **SQL Server Management Studio**, clique no botão **Nova Consulta**: 113 | 114 |
115 | 116 | 6. Nesta janela (destacada com a cor verde), onde vamos criar as nossas instruções SQL. 117 | 118 |
119 | 120 | 7. Digite o código abaixo: 121 | 122 | ```sql 123 | select @@version 124 | ``` 125 | 126 | 8. Clique no botão **Executar**, localizado na Barra de Ferramentas do **SQL Server Management Studio**, como mostra a imagem abaixo: 127 | 128 |
129 | 130 | 9. O resultado você confere na imagem abaixo: 131 | 132 |
133 | 134 | Se o comando acima exibir a versão do SQL Server, a instalação e configuração foi concluída com êxito! 135 | 136 |
137 |
138 | 139 |
Voltar
140 | -------------------------------------------------------------------------------- /00_ambiente/04_install_Insomnia.md: -------------------------------------------------------------------------------- 1 |

Guia de Instalação do Insomnia

2 | 3 | 4 | 5 | 1. Acesse o site do Insomnia: **[https://insomnia.rest/download](https://insomnia.rest/download)** e clique no botão **Download Insomnia for Windows**. 6 |
7 | 8 | 2. Após efetuar o download, execute o instalador do Insomnia. 9 | 10 | 3. Ao abrir o instalador, será exibida a imagem abaixo. Ao concluir a instalação, a imagem será fechada e o programa será inicializado. 11 | 12 |
13 | 14 | 4. Na janela **Welcome to Insomnia**, clique no botão **Continue**. 15 | 16 |
17 | 18 |
19 | 20 | | |

**ATENÇÃO:** No momento em que este material foi escrito, a versão mais atual do Insomnia era a versão 8.0. Ao utilizar este material no futuro, pode ser que a versão mais atual seja outra.

| 21 | | ------------------------------------------------------------ | ------------------------------------------------------------ | 22 | 23 |
24 | 25 | 5. Na janela **Collaborations with Cloud Sync now available**, clique na opção **Keep storing locally in local Vault** para continuar. 26 | 27 |
28 | 29 | 6. Na janela **Welcome to Insomnia**, clique na opção **Continue with Github** para criar uma conta grátis no site do Insomnia. 30 | 31 |
32 | 33 | 7. Você será redirecionado para o Navegador e será aberta a janela **Authorize Insomnia**. Clique no botão **Authorize Insomnia-infra** para continuar. 34 | 35 |
36 | 37 | 8. Na janela **Enable E2E Security**, crie uma senha para a sua conta do **Insomnia** e clique no botão **Active E2E** para continuar. 38 | 39 |
40 | 41 | 9. Na janela **Choose your personal subscription**, selecione a opção **Free** e clique no botão **Subscribe**. 42 | 43 |
44 | 45 |
46 | 47 | | |

**ATENÇÃO:** Caso seja selecionado um plano diferente, o Insomnia exigirá o Cartão de Crédito para emitir a fatura do serviço.

| 48 | | ------------------------------------------------------------ | ------------------------------------------------------------ | 49 | 50 |
51 | 52 | 10. Será aberta a janela **Insomnia Dashboard**. 53 | 54 |
55 | 56 | 11. Volte para o Insomnia e na janela **Authorize Insomnia**, clique no link **Go Back** para continuar. 57 | 58 |
59 | 60 | 12. Na janela **Welcome to Insomnia**, clique na opção **Continue with Github** para efetuar login no site do Insomnia. 61 | 62 |
63 | 64 | 13. Na janela **Enter your passphrase**, digite a sua senha da conta do Insomnia. 65 | 66 |
67 | 68 | 14. Na janela **Permitir que este aplicativos abra o link do tipo insomnia com Insomnia**, clique no botão **Abrir link** para continuar. 69 | 70 |
71 | 72 | 15. A janela principal do Insomnia será aberta e a instalação estará concluída. 73 | 74 |
75 | 76 |
77 | 78 |

A janela principal do Insomnia não abriu!

79 | 80 | 81 | 82 | Caso a autenticação automática tenha falhado e a janela principal do Insomnia não tenha sido aberta, faça a autenticação manual: 83 | 84 | 1. Volte para o Navegador clique no link **Manually enter token** para copiar o token de autenticação manual. 85 | 86 |
87 | 88 | 2. Volte para o Insomnia. 89 | 3. Na janela **Authorizing Insomnia**, cole o token na caixa de texto indicada abaixo e clique no botão **Log in** para continuar. 90 | 91 |
92 | 93 | 4. A janela principal do Insomnia será aberta e a instalação estará concluída. 94 | 95 |
96 | 97 |

98 | 99 |
Voltar
100 | -------------------------------------------------------------------------------- /00_ambiente/05_install_vscode.md: -------------------------------------------------------------------------------- 1 | 

Guia de Instalação do Visual Studio Code - VSCode

2 | 3 | 1. Acesse o link: https://code.visualstudio.com/download para efetuar o download do VSCode. 4 |
5 | 6 | 2. Marque a opção **Eu aceito o acordo** e clique no botão **Próximo** para continuar. 7 |
8 | 9 | 3. Clique no botão **Próximo** para continuar. 10 |
11 | 12 | 4. Clique no botão **Próximo** para continuar. 13 |
14 | 15 | 5. Marque todas as opções e clique no botão **Próximo** para continuar. 16 |
17 | 18 | 6. Clique no botão **Instalar** para continuar. 19 |
20 | 21 | 7. Clique no botão **Concluir** para finalizar a instalação. 22 |
23 | 24 | 8. O **VSCode** está pronto para uso. 25 |
26 | 27 |

28 | 29 |
Voltar
30 | -------------------------------------------------------------------------------- /00_ambiente/06_install_node.md: -------------------------------------------------------------------------------- 1 | 

Guia de Instalação do Node

2 | 3 | 1. Acesse o site do node: **https://nodejs.org/en/** e clique no link para efetuar o download da versão **LTS** . 4 | 5 |
6 | 7 | | |

**ATENÇÃO:** No momento em que este guia foi escrito, a versão LTS mais atual do Node era a versão 16.15.0 LTS. Ao utilizar este guia no futuro, pode ser que a versão mais atual seja outra*

| 8 | | ------------------------------------------------------------ | ------------------------------------------------------------ | 9 | 10 | 2. Após efetuar o download, execute o instalador do Node. 11 | 12 | 3. Ao abrir o instalador, caso seja exibida a mensagem abaixo, clique em **OK** para continuar. 13 | 14 |
15 | 16 | 4. Na janela **Welcome to Node.js Setup Wizard**, clique no botão **Next** para continuar. 17 | 18 |
19 | 20 | 5. Na janela **End-User License Agreement**, marque a opção **I accept the terms in the License Agreement** e clique no botão **Next** para continuar. 21 | 22 |
23 | 24 | 6. Na janela **Destination Folder**, clique no botão **Next** para continuar. 25 | 26 |
27 | 28 | 7. Na janela **Custom Setup**, clique no botão **Next** para continuar. 29 | 30 |
31 | 32 | 8. Na janela **Tools for Native Modules**, clique no botão **Next** para continuar. 33 | 34 |
35 | 36 | 9. Na janela **Ready to install Node.js**, clique no botão **Install** para continuar. 37 | 38 |
39 | 40 | 10. Aguarde a conclusão da Instalação. Caso seja solicitada a confirmação da instalação, clique no botão **OK** para continuar. 41 | 42 |
43 | 44 | 11. Na janela **Completed the Node.js Setup Wizard**, clique no botão **Finish** para concluir. 45 | 46 |
47 | 48 | 12. Para verificar se a instalação do Node foi bem sucedida, execute o atalho para abrir a janela Executar. 49 | 50 |
51 | 52 | 13. Digite o comando **cmd** para abrir o **Prompt de comando do Windows**. 53 | 54 | 14. Verifique se o **Node** está instalado através do comando: 55 | 56 | ```bash 57 | node -v 58 | ``` 59 |
60 | 61 | 15. Verifique também se o **NPM** está instalado através do comando: 62 | 63 | ```bash 64 | npm -v 65 | ``` 66 | 67 |
68 | 69 |

70 | 71 |
Voltar
72 | -------------------------------------------------------------------------------- /00_ambiente/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Bootcamp - C# Full Stack

5 | 6 |

Preparação do Ambiente

7 | 8 | 0. Guia de Instalação - Portugol 9 | 1. Guia de Instalação - Git 10 | 2. Guia de Instalação - .NET - SDK 11 | 3. Guia de Instalação - Visual Studio 12 | 4. Guia de Instalação - SQL Server 13 | 5. Guia de Instalação - Insomnia 14 | 6. Guia de Instalação - VSCode 15 | 7. Guia de Instalação - Node 16 | 17 |

18 | 19 | 20 |
21 |
Home
22 | -------------------------------------------------------------------------------- /01_csharp/14.md: -------------------------------------------------------------------------------- 1 |

Classes Abstratas

2 | 3 | 4 | 5 | Relembrando nossa primeira sessão sobre Orientação a Objetos... 6 | 7 | - Um programa escrito em Linguagem Orientada à Objetos representa uma parte do mundo real; 8 | - As partes das quais o modelo é construído são objetos que aparecem no domínio do problema; 9 | - Uma classe descreve de maneira **abstrata** todos os objetos de um tipo em particular. 10 | 11 | > **Abstrato:** que não é concreto; que resulta da abstração, que opera unicamente com ideias, com associações de ideias, não diretamente com a realidade sensível, que possui alto grau de generalização. 12 | 13 | Em nosso Projeto Guia (Conta), Conta é uma Classe, entretanto observamos que quando definimos o conceito de **“uma Conta”**, estamos generalizando o conceito de uma Conta Bancária, sem definir maiores detalhes, apenas o que é comum para toda e qualquer conta. 14 | 15 | Quando definimos os conceitos de **Conta Corrente** e **Conta Poupança**, estamos definindo um tipo específico de conta, que terá as suas especificidades. 16 | 17 | > **Especificidades:** Em nosso exemplo são as características que são exclusivas de cada tipo de conta. 18 | 19 | Nenhum banco possui uma conta genérica, toda e qualquer conta possui um propósito e especificidades, logo não será necessário criar um Objeto do tipo Conta, pois é uma definição muito genérica de Conta Bancária. 20 | 21 | Para definirmos uma Classe Genérica, **que não necessita ser instanciada**, que servirá apenas como uma **Superclasse** para geração de outras Classes derivadas, implementaremos a Classe Conta como uma **Classe Abstrata**. 22 | 23 | **Classes abstratas** são classes que não podem ser instanciadas, porém podem ser derivadas (herdadas). Geralmente são utilizadas apenas para permitir a derivação de novas classes. Identificamos uma Classe como Abstrata pelo modificador **abstract** na sua assinatura. 24 | 25 | **Classe Concreta** é uma classe que pode ser instanciada. 26 | 27 |
28 | 29 | Utilizamos Classes Abstratas porquê em uma hierarquia de classes, quanto mais alta a classe, mais abstrata é a sua definição. Uma classe no topo da hierarquia pode definir apenas o comportamento e os atributos que são comuns a todas as classes. Na maioria dos casos, a classe não precisa ser instanciada diretamente e cumpre apenas o papel de ser um repositório de comportamentos e atributos em comuns a todas as classes estendidas (herdadas). 30 | 31 |
32 | 33 |

Métodos Abstratos

34 | 35 | A Classe Abstrata também pode ter em sua implementação **Métodos Abstratos**. Métodos abstratos são métodos sem código. Eles são prefixados pelo modificador **abstract**, não apresentam um corpo e sua declaração termina com “**;**” após a declaração dos parâmetros. 36 | 37 | Um Método Abstrato indica que a classe não implementa aquele método e que ele deve ser obrigatoriamente implementado nas Classes derivadas, pois é um comportamento comum das subclasses. **Eles são utilizados somente em classes abstratas.** 38 | 39 | **Sintaxe - Método Abstrato dentro da Classe Abstrata** 40 | 41 |
42 | 43 | **Sintaxe - Subclasse (Classe estendida ou herdada)** 44 | 45 |
46 | 47 |
48 | 49 |
Documentação: Classe Abstrata
50 | 51 |
52 | 53 | Veja o Exemplo abaixo: 54 | 55 |
56 | 57 | A **Classe Pet** é uma Generalização de animais de estimação, logo ela será a Super Classe e do tipo Abstrata (abstract). A Classe Pet terá um Atributo (nome) e um Método Abstrato chamado **Som()**. As Classes **Gato e Cachorro** serão Sub Classes da **Classe Pet**, ou seja, são tipos de Pet. As Classes **Gato e Cachorro** deverão implementar o Método **Som()**, independente dele ser ou não utilizado. Veja o Diagrama de Classes abaixo: 58 | 59 | ```mermaid 60 | classDiagram 61 | class Pet { 62 | <> 63 | - nome: string 64 | + string GetNome() 65 | + void SetNome(string nome) 66 | + abstract void Som()* 67 | } 68 | class Gato { 69 | + void Som() 70 | } 71 | class Cachorro { 72 | + void Som() 73 | } 74 | Pet <|-- Gato: << extends >> 75 | Pet <|-- Cachorro: << extends >> 76 | 77 | ``` 78 | 79 |
80 | 81 | **Exemplo 01 - Implementação em C#:** 82 | 83 | **Classe Pet** 84 | 85 | ```c# 86 | using System; 87 | using System.Collections.Generic; 88 | using System.Linq; 89 | using System.Runtime.Serialization; 90 | using System.Text; 91 | using System.Threading.Tasks; 92 | 93 | namespace Pets 94 | { 95 | public abstract class Pet 96 | { 97 | private string nome; 98 | 99 | public Pet (string nome) 100 | { 101 | this.nome = nome; 102 | } 103 | 104 | public string GetNome() 105 | { 106 | return nome; 107 | } 108 | 109 | public void SetNome(string nome) 110 | { 111 | this.nome = nome; 112 | } 113 | 114 | public abstract void Som(); 115 | } 116 | } 117 | ``` 118 | 119 | A Classe Pet (Superclasse), foi criada com apenas um Atributo (nome), conforme o Diagrama de Classes acima. Também foi criado o Método Construtor, os Métodos Get e Set do Atributo e o Método abstrato Som(), que será implementado por todas as Sub Classes que herdarem a Classe Pet. 120 | 121 | **Classe Gato** 122 | 123 | 124 | ```c# 125 | using System; 126 | using System.Collections.Generic; 127 | using System.Linq; 128 | using System.Text; 129 | using System.Threading.Tasks; 130 | 131 | namespace Pets 132 | { 133 | public class Gato : Pet 134 | { 135 | public Gato(string nome) : base(nome) 136 | { 137 | } 138 | 139 | public override void Som() 140 | { 141 | Console.WriteLine("Miau!"); 142 | } 143 | } 144 | } 145 | ``` 146 | 147 | A Classe Gato herda a Classe Pet e obrigatoriamente implementa o Método abstrato Som(). 148 | 149 | **Classe Cachorro** 150 | 151 | 152 | ```c# 153 | using System; 154 | using System.Collections.Generic; 155 | using System.Linq; 156 | using System.Text; 157 | using System.Threading.Tasks; 158 | 159 | namespace Pets 160 | { 161 | public class Cachorro : Pet 162 | { 163 | public Cachorro(string nome) : base(nome) 164 | { 165 | } 166 | 167 | public override void Som() 168 | { 169 | Console.WriteLine("Au Au!"); 170 | } 171 | } 172 | } 173 | ``` 174 | 175 | A Classe Cachorro herda a Classe Pet e obrigatoriamente implementa o Método abstrato Som(). 176 | 177 | **Classe Program** 178 | 179 | ```java 180 | namespace Pets 181 | { 182 | public class Program 183 | { 184 | static void Main(string[] args) 185 | { 186 | Gato g1 = new Gato("Melvin"); 187 | 188 | g1.Som(); 189 | 190 | Cachorro c1 = new Cachorro("Ruffus"); 191 | 192 | c1.Som(); 193 | } 194 | } 195 | } 196 | ``` 197 | 198 | Na Classe Program, foi instanciado um Objeto da Classe Gato e um Objeto da Classe Cachorro. Observe que caso você tente criar um Objeto da Classe Pet o C# não irá permitir porque uma Classe Abstrata não pode ser instanciada. As Classes Gato e Cachorro possuem a sua implementação própria do Método Som() e graças ao Polimorfismo, a assinatura do Método é a mesma em ambas as Classes. Abaixo, você confere o resultado do código no Console: 199 | 200 | **Resultado do Algoritmo:** 201 | 202 | ```bash 203 | Miau! 204 | Au Au! 205 | ``` 206 | 207 |
208 | 209 | ------ 210 | 211 | ## 🔑**Pontos chave:** 212 | 213 | 1. **Classes Abstratas** são classes que não podem ser instanciadas, porém podem ser derivadas (herdadas). Geralmente são utilizadas apenas para permitir a derivação de novas classes. 214 | 2. Identificamos uma Classe como Abstrata pelo modificador **abstract** na sua assinatura. 215 | 3. Abstract é um modificador que é aplicável para Classes, Interfaces e Métodos. 216 | 4. Classe Abstrata representa uma classe incompleta, que depende de subclasses para sua implementação, ou seja, a criação de pelo menos uma subclasse é obrigatória para a classe abstrata. 217 | 5. A Classe Abstrata também pode ter em sua implementação **Métodos Abstratos**. 218 | 6. **Métodos abstratos** são métodos sem código. Eles são prefixados pelo modificador **abstract**, não apresentam um corpo e sua declaração termina com “**;**” após a declaração dos parâmetros. 219 | 7. Métodos Abstratos **são utilizados somente em classes abstratas.** 220 | 221 |

222 | 223 |
Voltar
224 | -------------------------------------------------------------------------------- /01_csharp/17.md: -------------------------------------------------------------------------------- 1 |

O uso do VAR no C#

2 | 3 | 4 | 5 | C# é uma linguagem fortemente tipada, o que significa que você deve declarar um tipo de variável antes de poder usá-lo. Mas e se você não souber o tipo da variável? 6 | 7 | C# permite que você declare variáveis locais sem dar a elas tipos explícitos. Isso é possível com a ajuda da variável do tipo “var”. A palavra-chave “var” é usada para declarar uma variável do tipo implícito, ou seja, o tipo será definido de acordo com o valor de inicialização da variável. A variável de tipo var pode ser usada para armazenar um tipo de dados .NET simples, um tipo complexo, um tipo anônimo ou um tipo definido pelo usuário. 8 | 9 | **Sintaxe:** 10 | 11 | ```c# 12 | var nome_da_variável = valor; 13 | ``` 14 | 15 |
16 | 17 | **Exemplo 01 - Definindo variáveis com o VAR:** 18 | 19 | ```c# 20 | namespace var_01 21 | { 22 | internal class Program 23 | { 24 | static void Main(string[] args) 25 | { 26 | var v1 = 120.23F; 27 | var v2 = 150.23M; 28 | var v3 = 'G'; 29 | var v4 = "Generation"; 30 | 31 | // Exibe o tipo das variáveis 32 | Console.WriteLine("Valor da variável 01 {0}, type {1}", v1, v1.GetType()); 33 | Console.WriteLine("Valor da variável 02 {0}, type {1}", v2, v2.GetType()); 34 | Console.WriteLine("Valor da variável 03 {0}, type {1}", v3, v3.GetType()); 35 | Console.WriteLine("Valor da variável 04 {0}, type {1}", v4, v4.GetType()); 36 | 37 | } 38 | } 39 | } 40 | ``` 41 | 42 |
43 | 44 | **Resultado do Algoritmo:** 45 | 46 | ```bash 47 | Valor da variável 01 120,23, type System.Single 48 | Valor da variável 02 150,23, type System.Decimal 49 | Valor da variável 03 G, type System.Char 50 | Valor da variável 04 Generation, type System.String 51 | ``` 52 | 53 | Observe que através do Método **GetType()**, conseguimos identificar o tipo de cada uma variável e o tipo corresponde exatamente ao valor atribuído na inicialização de cada variável. 54 | 55 |
56 | 57 |

1. Restrições em variáveis de tipo implícito

58 | 59 | 60 | 61 | As seguintes restrições se aplicam a declarações de variáveis de tipo implícito: 62 | 63 | - O var só pode ser usado quando uma variável local é declarada e inicializada na mesma instrução; 64 | - A variável não pode ser inicializada como NULL; 65 | - O var não pode ser usado em atributos da classe; 66 | - Variáveis declaradas usando var não podem ser usadas na expressão de inicialização; 67 | - Várias variáveis de tipo implícito não podem ser inicializadas na mesma instrução; 68 | - Se um tipo denominado var estiver no escopo, a palavra-chave var resolverá para esse nome de tipo e não será tratada como parte de uma declaração de variável local digitada implicitamente. 69 | 70 |
71 | 72 |

2. Quando é recomendado usar o var?

73 | 74 | 75 | 76 | O uso do VAR não é recomendado em todos os lugares. Ele foi criado para lidar com declarações quando o tipo não é conhecido, como tipos genéricos, lambdas e expressões de consulta. Se você já conhece o tipo de uma variável, esta deve ser declarada explicitamente. Lembre-se, se você não declarar uma variável explicitamente, o compilador deverá fazer um trabalho extra para determinar o tipo. Além disso, é fortemente recomendado utilizar o var: 77 | 78 | - Quando você não tem certeza de que tipo de dado será armazenado em uma variável; 79 | - Em tipos anônimos e coleções anônimas; 80 | - Quando os nomes de classes forem extremamente longos; 81 | - Com tipos de código não gerenciados, importados que não seguem as convenções de nomenclatura padrão do C#. 82 | 83 |
84 | 85 |
Documentação: VAR
86 | 87 |
88 | 89 |
Código Fonte dos Exemplos
90 | 91 |
92 | 93 | ------ 94 | 95 | ## 🔑**Pontos chave:** 96 | 97 | 1. O **VAR** é uma classe que foi implementada no **C#**, que tem o objetivo de simplificar os códigos, facilitando a vida dos desenvolvedores, ao criar variáveis com tipos implícitos. 98 | 1. O uso do **VAR** não é recomendado em todos os lugares. Ele foi criado para lidar com declarações quando o tipo não é conhecido, como tipos genéricos, lambdas e expressões de consulta. 99 | 100 |

101 | 102 |
Voltar
-------------------------------------------------------------------------------- /01_csharp/18.md: -------------------------------------------------------------------------------- 1 |

Expressões Lambda

2 | 3 | 4 | 5 | Antes de falarmos sobre Expressões Lambdas, precisamos definir o conceito de Programação Funcional. 6 | 7 |

1. Programação Funcional

8 | 9 | 10 | 11 | A **Programação Funcional** é um paradigma da programação, que te permite criar códigos confiáveis e fáceis de testar. 12 | 13 | > Em computação, **Paradigma** nada mais é que a forma de fazer algo, ou seja, é a orientação que os códigos vão ter. 14 | 15 | O Paradigma da Programação Funcional é baseado num modelo Computacional bem antigo, chamado de **Cálculo Lambda**, por isso o nome de Expressões Lambda. Para entender o que é programação funcional, entretanto, é importante entender outros paradigmas de programação famosos: **Programação Imperativa** e **Programação Orientada a Objetos** (POO). 16 | 17 |
18 | 19 |

1.1. Programação Imperativa

20 | 21 | É o paradigma de programação mais famoso. Nas linguagens imperativas – como C e PHP –, os códigos são escritos como uma lista de instruções que o computador lê e executa. É como se fossem comandos para a máquina, por isso programação imperativa. 22 | 23 |

1.2. Programação Orientada a Objetos

24 | 25 | Já na Programação Orientada a Objetos, em vez de descrever um código, o programador cria um objeto e adiciona comportamentos a ele. Alguns exemplos de linguagens de programação orientadas a objetos são C#, Python e Ruby. Outras, como C#Script e PHP, são linguagens com suporte à orientação de objetos. 26 | 27 |

1.3. E a Programação Funcional?

28 | 29 | Diferentemente das programações Imperativa e Orientada a Objetos, a Funcional parte do princípio de que tudo são funções. Não existe uma lista de instruções ou objetos para o computador realizar, mas uma sequência de **funções matemáticas** que, juntas, vão resolver um problema. 30 | 31 | Isso significa que, no paradigma funcional, você tem uma função, coloca um dado de entrada, aplica várias operações e obtém uma saída. É possível alterar as operações e, consequentemente, a saída, mas a entrada sempre permanecerá a mesma. 32 | 33 | Além disso, no Paradigma da Programação Funcional não existem variáveis, mas constantes. Isso se traduz em códigos mais objetivos com constantes que, de forma geral, não mudam. Alguns exemplos de linguagens 100% funcionais são Clojure, Haskell e Elixir. 34 | 35 |
36 | 37 |
38 | 39 |

2. Expressões Lambda

40 | 41 | 42 | 43 | Uma **Expressão Lambda** é um pequeno bloco de código que recebe parâmetros e retorna um valor. Uma expressão lambda também pode ser vista como uma função anônima. Uma função que não tem nome e não pertence a nenhuma classe. As Expressões Lambda são semelhantes aos métodos, mas não precisam de um nome e podem ser implementadas diretamente no corpo de um método. Através das Expressões Lambda o C# adicionou novas Classes, que implementam os conceitos da Programação Funcional, tornando a Linguagem C# mais flexível, servindo como um complemento para a construção de códigos mais limpos e enxutos. 44 | 45 | As Expressões Lambda no C# são classificadas como **Expressions (Expressão)** e **Statement (Declaração)**. 46 | 47 | **Sintaxe - Statement (Declaração):** 48 | 49 | ```c# 50 | (lista de parâmetros) => { corpo da função } 51 | ``` 52 | 53 | **Exemplo 01 - Declaração Lambda:** 54 | 55 | ```c# 56 | var soma = (int a, int b) => 57 | { 58 | int calculoSoma = a + b; 59 | return calculoSoma; 60 | }; 61 | ``` 62 | 63 |
64 | 65 | **Sintaxe - Expression (Expressão):** 66 | 67 | ```c# 68 | (lista de parâmetros) => expressão 69 | ``` 70 | 71 | **Exemplo 02 - Expressão Lambda:** 72 | 73 | ```c# 74 | var area = (int num) => num * num; 75 | ``` 76 | 77 |
78 | 79 | Observe que a única diferença entre uma Declaração Lambda e uma Expressão Lambda é que a Declaração utiliza chaves { } no corpo, enquanto as Expressões não utilizam. 80 | 81 | Uma Expressão Lambda consiste em três componentes, um conjunto de parâmetros, um operador Lambda e um corpo de função. Aqui estão os três componentes: 82 | 83 | - **Lista de Parâmetros:** Aqui vem o argumento que pode ser vazio ou não vazio também. 84 | - **Expressão Lambda:** Expressão Lambda ou seta (=>) é usada para separar a lista de parâmetros e o corpo da função. 85 | - **Corpo da função:** contém a instrução, que pode ser uma expressão ou uma declaração. 86 | 87 | Os parâmetros de entrada estão no lado esquerdo do Operador Lambda e o corpo da função no lado direito do Operador Lambda. Essa sintaxe do Lambda Expression reduz o volume do código, que é de cinco linhas de código em uma linha. 88 | 89 |
90 | 91 |

2.1. Características

92 | 93 | Aqui estão algumas características importantes da Expressão Lambda. 94 | 95 | - **Declaração de tipo:** a declaração de tipo é opcional. Depende de você, se você não declarar o tipo de parâmetro, o compilador pode adivinhar o valor do parâmetro. Por exemplo, você pode escrever como: 96 | 97 | ```c# 98 | (5,4) => corpo da função 99 | ``` 100 | 101 | - **Parênteses ao redor do parâmetro:** O parêntese ao redor do parâmetro também é opcional. Você pode colocar parênteses se quiser, caso contrário, deixe como está. Se houver vários parâmetros em uma Expressão Lambda, os parênteses serão necessários, conforme mostrado no exemplo acima. Para apenas um parâmetro, você pode escrever como: 102 | 103 | ```c# 104 | 5 => corpo da função 105 | ``` 106 | 107 | - **Chaves:** As chaves ao redor do corpo da função também são opcionais se houver apenas uma instrução. Para várias declarações, chaves em torno do corpo da função são necessárias. Por exemplo: 108 | 109 | ```c# 110 | (int a, int b) => 111 | { 112 | var sum = a + b; 113 | return sum; 114 | }; 115 | ``` 116 | 117 | - **Instrução de retorno:** A instrução de retorno também é opcional em Expressões Lambda. O compilador C# retorna automaticamente o valor se o corpo tiver uma única expressão. 118 | 119 |
120 | 121 | **Exemplo 03 - Expressões Lambda e Collections:** 122 | 123 | Nesta primeira versão do código, não foram utilizadas as Expressões Lambdas: 124 | 125 | ```c# 126 | namespace lambda_01 127 | { 128 | internal class Program 129 | { 130 | static void Main(string[] args) 131 | { 132 | List numeros = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 133 | 134 | Console.WriteLine("Exibir os itens\n"); 135 | 136 | // Exibir os itens da Lista sem Expressão Lambda 137 | foreach (var n in numeros) 138 | { 139 | Console.WriteLine(n); 140 | } 141 | 142 | Console.WriteLine("\nExibir os itens somados com eles mesmos\n"); 143 | 144 | // Exibir os itens da Lista dobrados sem Expressão Lambda 145 | foreach (var n in numeros) 146 | { 147 | Console.WriteLine(n + n); 148 | } 149 | 150 | Console.WriteLine("\nExibir os itens pares da lista\n"); 151 | 152 | // Exibir apenas os elementos pares da Lista sem Expressão Lambda 153 | foreach (var n in numeros) 154 | { 155 | if (n % 2 == 0) 156 | Console.WriteLine(n); 157 | } 158 | } 159 | } 160 | } 161 | ``` 162 | 163 |
164 | 165 | Na segunda versão do código, foram utilizadas as Expressões Lambdas: 166 | 167 | ```c# 168 | namespace lambda_02 169 | { 170 | internal class Program 171 | { 172 | static void Main(string[] args) 173 | { 174 | 175 | List numeros = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 176 | 177 | Console.WriteLine("Exibir os itens\n"); 178 | 179 | // Exibir os itens da Lista com Expressão Lambda 180 | numeros.ForEach(n => Console.WriteLine(n)); 181 | 182 | Console.WriteLine("\nExibir os itens somados com eles mesmos\n"); 183 | 184 | // Exibir os itens da Lista dobrados com Expressão Lambda 185 | numeros.ForEach(n => Console.WriteLine(n + n)); 186 | 187 | Console.WriteLine("\nExibir os itens pares da lista\n"); 188 | 189 | // Exibir apenas os elementos pares da Lista com Declaração Lambda 190 | numeros.ForEach(n => 191 | { 192 | if (n % 2 == 0) 193 | Console.WriteLine(n); 194 | }); 195 | } 196 | } 197 | } 198 | ``` 199 | 200 | Observe que ao comparar a primeira versão sem Lambdas, com a segunda versão com Lambdas, o código da segunda versão fica muito menos verboso, mais direto e limpo. Abaixo, vemos o resultado da execução de ambos os códigos. 201 | 202 | **Resultado do Algoritmo:** 203 | 204 | ```bash 205 | Exibir os itens 206 | 207 | 1 208 | 2 209 | 3 210 | 4 211 | 5 212 | 6 213 | 7 214 | 8 215 | 9 216 | 217 | Exibir os itens somados com eles mesmos 218 | 219 | 2 220 | 4 221 | 6 222 | 8 223 | 10 224 | 12 225 | 14 226 | 16 227 | 18 228 | 229 | Exibir os itens pares da lista 230 | 231 | 2 232 | 4 233 | 6 234 | 8 235 | ``` 236 | 237 |
238 | 239 | 240 | 241 |
242 | 243 | 244 | 245 |
246 | 247 | ------ 248 | 249 | ## 🔑**Pontos chave:** 250 | 251 | 1. A **Programação Funcional** é um paradigma da programação, que te permite criar códigos confiáveis e fáceis de testar. 252 | 2. Uma **Expressão Lambda** é um pequeno bloco de código que recebe parâmetros e retorna um valor. 253 | 3. Uma **Expressão Lambda** também pode ser vista como uma função anônima, ou seja, uma função que não tem nome e não pertence a nenhuma classe. 254 | 4. As **Expressões Lambda** são semelhantes aos métodos, mas não precisam de um nome e podem ser implementadas diretamente no corpo de um método. 255 | 5. As **Expressões Lambda** no C# são classificadas como **Expressions (Expressão)** e **Statement (Declaração)**. A principal diferença é que a Declaração utiliza chaves { } no corpo da expressão, enquanto as Expressões não utilizam. 256 | 257 |
258 | 259 |
260 | 261 | 262 | -------------------------------------------------------------------------------- /01_csharp/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Bootcamp - C# Full Stack

5 | 6 |

Introdução ao C#

7 | 8 | 1. Introdução ao C# 9 | 2. Visual Studio 2022 10 | 3. Variáveis e Constantes 11 | 4. Entrada e Saída de dados 12 | 5. Operadores 13 | 6. Laços Condicionais 14 | 7. Laços de Repetição 15 | 8. Vetores e Matrizes 16 | 9. Collections 17 | 10. Estrutura de dados 18 | 11. Métodos 19 | 12. Introdução a Programação Orientada a Objetos - Parte 01 20 | 13. Introdução a Programação Orientada a Objetos - Parte 02 21 | 14. Classes Abstratas 22 | 15. Interfaces 23 | 16. Exceptions 24 | 17. VAR 25 | 18. Lambda 26 | 19. LINQ 27 | 28 |

Projeto Conta Bancária

29 | 30 | 1. Projeto Conta Bancária - Classe Menu 31 | 2. Projeto Conta Bancária - Classe Menu - Colorido 32 | 3. Projeto Conta Bancária - Classe Conta 33 | 4. Projeto Conta Bancária - Classes ContaCorrente e ContaPoupanca 34 | 5. Projeto Conta Bancária - Classe Conta - Abstrata 35 | 6. Projeto Conta Bancária - Interface ContaRepository 36 | 7. Projeto Conta Bancária - Classe Menu - Exceptions 37 | 8. Projeto Conta Bancária - Classe ContaController - Métodos do CRUD - Parte I 38 | 9. Projeto Conta Bancária - Classe ContaController - Métodos do CRUD - Parte II 39 | 10. Projeto Conta Bancária - Classe ContaController - Métodos Bancários 40 | 41 |

Conteúdo Auxiliar

42 | 43 | 1. Classe Math 44 | 2. Classe String 45 | 3. Classe DateTime 46 | 47 |

48 | 49 | 50 |
51 |
Home
52 | -------------------------------------------------------------------------------- /01_csharp/b01.md: -------------------------------------------------------------------------------- 1 |

Classe Math

2 | 3 | A Classe Math oferece uma série de Métodos para efetuar cálculos matemáticos doa mais variados. Abaixo você confere os principais Métodos desta Classe: 4 | 5 | | Método / Propriedade | Descrição | Exemplo | 6 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | 7 | | **Math.Abs(numero)** | Retorna o valor absoluto de um argumento (numero). Este numero pode ser do tipo byte, short, int, long, float, double ou decimal. | Se numero > 0, `Math.Abs(9)` = 9
Se numero = 0, `Math.Abs(0)` = 0
Se numero < 0, `Math.Abs(-9)` = 9 | 8 | | **Math.Ceiling(numero)** | Retorna o menor valor inteiro maior ou igual ao número especificado. O numero deve ser double ou decimal. | `Math.Ceiling(9.2)` = 10
`Math.Ceiling(-9.8)` = -9 | 9 | | **Math.Floor(numero)** | Retorna o maior valor inteiro menor ou igual ao número especificado. O numero deve ser double ou decimal. | `Math.Floor(9.2)` = 9
`Math.Floor(-9.8)` = -10 | 10 | | **Math.Round(numero)**
**Math.Round(numero, casas_decimais)** | Arredonda um valor para o inteiro mais próximo ou para o número especificado de casas decimais. O numero deve ser double ou decimal. O numero de casas decimais (casas_decimais) deve ser um numero inteiro. | `Math.Round(9.1560)` = 9
`Math.Round(-9.1560, 2)` = -9,16 | 11 | | **Math.Sin(angulo)** | Retorna o seno de um ângulo. O argumento angulo deve ser do tipo double, expresso em radianos. | `Math.Sin(15)` = 0,6502878401571168 | 12 | | **Math.Cos(angulo)** | Retorna o cosseno de um ângulo. O argumento angulo deve ser do tipo double, expresso em radianos. | `Math.Cos(15)` = -0,7596879128588213 | 13 | | **Math.Tan(angulo)** | Retorna a tangente de um ângulo. O argumento angulo deve ser double, expresso em radianos. | `Math.Tan(15)` = -0,8559934009085188 | 14 | | **Math.Log(numero)**
**Math.Log(numero, base)** | Retorna o logaritmo de um número. O argumento numero deve ser double. O argumento base (base de cálculo do logaritmo) deve ser double. | `Math.Log(2.718282)` = 1,0000000631063886
`Math.Log(2.718282, 10)` = 0,4342945093100081 | 15 | | **Math.Max(x, y)** | Retorna o maior valor entre dois números (x e y). Os argumentos x e y podem ser byte, short, int, long, float, double ou decimal. | `Math.Max(2.3, 12.7)` = 12,7
`Math.Max(-2.3, -12.7)` = -2,3 | 16 | | **Math.Min(x, y)** | Retorna o menor valor entre dois números (x e y). Os argumentos x e y podem ser byte, short, int, long, float, double ou decimal. | `Math.Min(2.3, 12.7)` = 2,3
`Math.Min(-2.3, -12.7)` = -12,7 | 17 | | **Math.Sqrt(numero)** | Calcula a raiz quadrada do numero. O argumento numero deve ser double. | `Math.Sqrt(900.0)` = 30
`Math.Sqrt(9.0)` = 3 | 18 | | **Math.Cbrt(numero)** | Calcula a raiz cúbica do numero. O argumento numero deve ser double. | `Math.Sqrt(8.0)` = 2 | 19 | | **Math.Pow(radical, radicando)** | Retorna a Potência do radical elevado ao radicando. Os argumentos radical e radicando devem ser double.
Para calcular raízes superiores a raiz cúbica, podemos utilizar a função Pow, passando como radicando a fração `1/raiz`.

**Exemplos:**
**Raiz quarta** -> Radicando 1/4 = 0.25
**Raiz quinta** -> Radicando 1/5 = 0.20 | `Math.Pow(2.0, 7.0)` = 128
`Math.Pow(9.0, 0.5)` = 3
`Math.Pow(16.0, 0.25)` = 3 | 20 | | **Math.PI** | Retorna a constante PI. | `Math.PI` = 3.1415 | 21 | 22 | > **Radianos:** É a razão entre o comprimento de um arco e o seu raio. Ele é a unidade padrão de medida angular utilizada em muitas áreas da matemática. 23 | 24 |
25 | 26 | 27 | 28 |

29 | 30 | 31 | -------------------------------------------------------------------------------- /01_csharp/b02.md: -------------------------------------------------------------------------------- 1 |

Classe String

2 | 3 | Cadeias de caracteres ou Strings são objetos, ou seja, instâncias da Classe String, do Namespace System e assim como a classe Math, existem vários métodos para manipularmos strings. Vamos conhecer os principais Métodos da Classe String: 4 | 5 | | Método / Propriedade | Descrição | Exemplo | 6 | | -------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | 7 | | **String.Length** | Retorna o tamanho da string. | string texto = "Teste"
`texto.Length` = 5 | 8 | | **String.Substring(inicio)** | Retorna uma cópia de caracteres a partir do índice inicio até o final da String. | string texto = "Teste"
`texto.Substring(2)` = "ste" | 9 | | **String.Substring(inicio, fim)** | Retorna uma cópia de caracteres a partir de 2 índices inteiros: índice inicio até o índice final. | string texto = "Teste"
`texto.Substring(0, 2)`= "Te" | 10 | | **String.Trim()** | Retorna a string sem todos os espaços em branco que aparecem no inicio e no final da String. | string frase = " Generation Brasil "
`frase.Trim()` = "Generation Brasil" | 11 | | **String.TrimEnd()** | Retorna a string sem todos os espaços em branco que aparecem no final da string. | string frase = " Generation Brasil "
`frase.TrimEnd()` = " Generation Brasil" | 12 | | **String.TrimStart()** | Retorna a string sem todos os espaços em branco que aparecem no inicio da string. | string frase = " Generation Brasil "
`frase.TrimStart()` = "Generation Brasil " | 13 | | **String.Replace(trocar, substituta)** | Retorna uma nova cadeia de caracteres na qual todas as ocorrências de uma cadeia de caracteres especificada (trocar) na instância atual são substituídas por outra cadeia de caracteres especificada (substituta). | string frase = " Generation Brasil "
`frase.Replace(" ", "")` = "GenerationBrasil" | 14 | | **String.CompareTo(string)** | Compara 2 strings retornando 0 se forem iguais e -1 se forem diferentes. | string texto1 = "teste"
string texto2 = "teste"
string texto3 = "TESTE"
`texto1.CompareTo(texto2)` = 0
`texto1.CompareTo(texto3)` = -1 | 15 | | **String.Equals(string)** | Compara 2 strings verificando se são iguais considerando inclusive se as letras são maiúsculas ou minúsculas. Se as strings forem iguais, retornará true, caso contrário retornará false. | string texto1 = "teste"
string texto2 = "teste"
string texto3 = "TESTE"
`texto1.Equals(texto2)` = `true`
`texto1.Equals(texto3)` = `false` | 16 | | **String.ToUpper()** | Transforma todas as letras de uma string em letras maiúsculas. | string texto = "Teste"
`texto.ToUpper()` = "TESTE" | 17 | | **String.ToLower()** | Transforma todas as letras de uma string em letras minúsculas. | string texto = "Teste"
`texto.ToLower()` = "teste" | 18 | | **String.StartsWith(String)** | Verifica se uma string inicia com a string passada como parâmetro. | string texto = "Teste"
`texto.StartsWith(T)` = `true` | 19 | | **String.EndsWith(String)** | Verifica se uma string termina com a string passada como parâmetro. | string texto = "Teste"
`texto.EndsWith(T)` = `false` | 20 | | **String.Contains(String)** | Verifica se uma string contém a string passada como parâmetro. | string texto = "Teste"
`texto.Contains("es")` = `true` | 21 | 22 |
23 | 24 | 25 | 26 |

27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /01_csharp/pr06.md: -------------------------------------------------------------------------------- 1 |

Projeto 01 - Conta Bancária - Interface - Interface IContaRepository

2 | 3 | Na etapa anterior, implementamos a Classe **Conta** como uma Classe **Abstrata**. 4 | 5 | Nesta etapa, vamos criar a Interface **IContaRepository**, que fornecerá a assinatura dos Métodos necessários para manipular os Objetos das Classes **ContaCorrente** e **ContaPoupanca**, que posteriormente serão armazenados em uma Collection. 6 | 7 | Os Métodos da Interface IContaRepository, posteriormente, serão implementados em uma Classe, de modo a manter os detalhes da implementação (Métodos Construtores, Get e Set, por exemplo), encapsulados na nova Classe. A Interface fornece apenas as assinaturas dos Métodos. O Diagrama de Classes do nosso Projeto ficará da seguinte forma: 8 | 9 | ```mermaid 10 | classDiagram 11 | class Conta { 12 | <> 13 | - numero : int 14 | - agencia : int 15 | - tipo : int 16 | - titular : string 17 | - saldo : decimal 18 | + int GetNumero() 19 | + int GetAgencia() 20 | + int GetTipo() 21 | + string GetTitular() 22 | + decimal GetSaldo() 23 | + void SetNumero(int numero) 24 | + void SetAgencia(int agencia) 25 | + void SetTipo(int tipo) 26 | + void SetTitular(string titular) 27 | + void SetSaldo(decimal saldo) 28 | + bool Sacar(decimal valor) 29 | + void Depositar(decimal valor) 30 | + void Visualizar() 31 | } 32 | class ContaCorrente { 33 | - limite : decimal 34 | + decimal GetLimite() 35 | + void SetLimite(decimal limite) 36 | + bool Sacar(decimal valor) 37 | + void Visualizar() 38 | } 39 | class ContaPoupanca { 40 | - aniversario : int 41 | + int GetAniversario() 42 | + void SetAniversario(int aniversario) 43 | + void Visualizar() 44 | } 45 | class IContaRepository{ 46 | << Interface >> 47 | + void ProcurarPorNumero(int numero) 48 | + void ListarTodas() 49 | + void Cadastrar(Conta conta) 50 | + void Atualizar(Conta conta) 51 | + void Deletar(int numero) 52 | + void Sacar(int numero, decimal valor) 53 | + void Depositar(int numero, decimal valor) 54 | + void Transferir(int numeroOrigem, int numeroDestino, decimal valor) 55 | } 56 | Conta <|-- ContaCorrente 57 | Conta <|-- ContaPoupanca 58 | Conta <.. IContaRepository 59 | ``` 60 | 61 |
62 | 63 |

👣 Passo 01 - Criar a pasta Repository

64 | 65 | Dentro do projeto **contabancaria**, vamos criar a pasta **Repository** (Namespace **Repository**): 66 | 67 | 1. No lado direito superior, na Guia **Gerenciador de Soluções**, clique com o botão direito do mouse sobre o projeto **contabancaria** e clique na opção **Adicionar 🡪 Nova Pasta**, como mostra a animação abaixo: 68 | 69 |
70 | 71 | 2. Digite o nome da pasta (**Repository**), com a primeira letra maiúscula, seguindo o padrão do C# e pressione **enter** para concluir. O Gerenciador de Soluções da aplicação ficará semelhante a imagem abaixo: 72 | 73 |
74 | 75 |
76 | 77 |

👣 Passo 02 - Criar a Interface IContaRepository

78 | 79 | 80 | 81 | Agora vamos criar a **Classe Conta** no **Namespace Repository**. 82 | 83 | 1. Clique com o botão direito do mouse sobre a **pasta Repository** e na sequência, clique na opção **Adicionar 🡪 Novo Item...**, como mostra a animação abaixo: 84 | 85 |
86 | 87 | 3. Na janela **Adicionar Novo item**, selecione a opção **Interface**, como mostra a figura abaixo: 88 | 89 |
90 | 91 | 4. No item **Nome**, digite o nome da Interface (**IContaRepository**), como mostra a figura abaixo: 92 | 93 |
94 | 95 | 5. Clique no botão **Adicionar** para concluir. 96 | 6. O Gerenciador de Soluções da aplicação ficará semelhante a imagem abaixo: 97 | 98 |
99 | 100 | 7. Na imagem abaixo, vemos o código inicial da **Interface IContaRepository**: 101 | 102 |
103 | 104 | 105 | Vamos implementar e analisar o código da **Interface IContaRepository**: 106 | 107 |
108 | 109 | **Linhas 8 a 12:** Criamos as assinaturas dos 5 Métodos do CRUD (Criar, Listar todas, Consultar pelo numero, Atualizar e Deletar), da Classe Conta. Estes Métodos serão implementados na **Classe ContaController**, que será implementada nas próximas Tarefas do Projeto Conta Bancária. 110 | 111 | **Linhas 15 a 17:** Criamos as assinaturas dos 3 Métodos de Operações Bancárias (Sacra, Depositar e Transferir), da Classe Conta. Estes Métodos também serão implementados na **Classe ContaController**, que será implementada nas próximas Tarefas do Projeto Conta Bancária. 112 | 113 | O Código completo da Interface **IContaRepository**, você confere abaixo: 114 | 115 | ```c# 116 | using conta_bancaria.Model; 117 | 118 | namespace conta_bancaria.Repository 119 | { 120 | public interface IContaRepository 121 | { 122 | // CRUD da Classe Conta 123 | public void ProcurarPorNumero(int numero); 124 | public void ListarTodas(); 125 | public void Cadastrar(Conta conta); 126 | public void Atualizar(Conta conta); 127 | public void Deletar(int numero); 128 | 129 | // Métodos Bancários 130 | public void Sacar(int numero, decimal valor); 131 | public void Depositar(int numero, decimal valor); 132 | public void Transferir(int numeroOrigem, int numeroDestino, decimal valor); 133 | } 134 | } 135 | ``` 136 | 137 | 6. Salve e execute o projeto clicando no botão **Run**. 138 | 139 | Observe que não houve nenhuma mudança visível no projeto. Nas próximas tarefas, os Métodos assinados na Interface IContaRepository serão implementados na Classe ContaController. 140 | 141 |
142 | 143 | 144 | 145 |
146 | 147 | 148 | 149 |

150 | 151 | -------------------------------------------------------------------------------- /01_csharp/pr07.md: -------------------------------------------------------------------------------- 1 |

Projeto 01 - Conta Bancária - Exceptions - Classe Program

2 | 3 | Nesta etapa, vamos implementar o tratamento de erros no menu do projeto, na Classe Program. 4 | 5 |

👣 Passo 01 - Atualizar a Classe Program

6 | 7 | 1. Abra a Classe Program; 8 | 2. Adicione a estrutura **Try...Catch** na variável **opcao**, como mostra a figura abaixo: 9 | 10 |
11 | 12 | A estrutura **Try...Catch** foi implementada na entrada de dados via teclado da variável **opcao** (recebe o numero do item do menu) para capturar eventuais erros de digitação. No nosso Menu, caso seja digitado um valor diferente de um número inteiro, será exibida a mensagem: **Digite valores inteiros!**. Na sequência, a variável **opcao** será reiniciada (valor zero) e será solicitado a digitação de um novo numero. 13 | 14 | 3. O código completo da Classe Program, você confere abaixo: 15 | 16 | ```c# 17 | using conta_bancaria.Model; 18 | 19 | namespace conta_bancaria 20 | { 21 | public class Program 22 | { 23 | private static ConsoleKeyInfo consoleKeyInfo; 24 | 25 | static void Main(string[] args) 26 | { 27 | 28 | // Teste da Classe Conta Corrente 29 | ContaCorrente cc1 = new(2, 123, 1, "Mariana", 15000.0M, 1000.0M); 30 | cc1.Visualizar(); 31 | cc1.Sacar(12000.0M); 32 | cc1.Visualizar(); 33 | cc1.Depositar(5000.0M); 34 | cc1.Visualizar(); 35 | 36 | // Teste da Classe Conta Poupança 37 | ContaPoupanca cp1 = new(3, 123, 2, "Victor", 100000.0M, 15); 38 | cp1.Visualizar(); 39 | cp1.Sacar(1000.0M); 40 | cp1.Visualizar(); 41 | cp1.Depositar(5000.0M); 42 | cp1.Visualizar(); 43 | 44 | int opcao; 45 | 46 | while (true) 47 | { 48 | Console.BackgroundColor = ConsoleColor.Black; 49 | Console.ForegroundColor = ConsoleColor.Yellow; 50 | Console.WriteLine("*****************************************************"); 51 | Console.WriteLine(" "); 52 | Console.WriteLine(" BANCO DO BRAZIL COM Z "); 53 | Console.WriteLine(" "); 54 | Console.WriteLine("*****************************************************"); 55 | Console.WriteLine(" "); 56 | Console.WriteLine(" 1 - Criar Conta "); 57 | Console.WriteLine(" 2 - Listar todas as Contas "); 58 | Console.WriteLine(" 3 - Buscar Conta por Numero "); 59 | Console.WriteLine(" 4 - Atualizar Dados da Conta "); 60 | Console.WriteLine(" 5 - Apagar Conta "); 61 | Console.WriteLine(" 6 - Sacar "); 62 | Console.WriteLine(" 7 - Depositar "); 63 | Console.WriteLine(" 8 - Transferir valores entre Contas "); 64 | Console.WriteLine(" 9 - Sair "); 65 | Console.WriteLine(" "); 66 | Console.WriteLine("*****************************************************"); 67 | Console.WriteLine("Entre com a opção desejada: "); 68 | Console.WriteLine(" "); 69 | Console.ResetColor(); 70 | 71 | try 72 | { 73 | opcao = Convert.ToInt32(Console.ReadLine()); 74 | } 75 | catch (FormatException) 76 | { 77 | Console.ForegroundColor = ConsoleColor.Red; 78 | Console.WriteLine("\nDigite valores inteiros!"); 79 | opcao = 0; 80 | Console.ResetColor(); 81 | } 82 | 83 | if (opcao == 9) 84 | { 85 | Console.BackgroundColor = ConsoleColor.Black; 86 | Console.ForegroundColor = ConsoleColor.Green; 87 | Console.WriteLine("\nBanco do Brazil com Z - O seu Futuro começa aqui!"); 88 | Sobre(); 89 | Console.ResetColor(); 90 | System.Environment.Exit(0); 91 | } 92 | 93 | switch (opcao) 94 | { 95 | case 1: 96 | Console.ForegroundColor = ConsoleColor.Green; 97 | Console.WriteLine("Criar Conta\n\n"); 98 | Console.ResetColor(); 99 | 100 | KeyPress(); 101 | break; 102 | case 2: 103 | Console.ForegroundColor = ConsoleColor.Green; 104 | Console.WriteLine("Listar todas as Contas\n\n"); 105 | Console.ResetColor(); 106 | 107 | KeyPress(); 108 | break; 109 | case 3: 110 | Console.ForegroundColor = ConsoleColor.Green; 111 | Console.WriteLine("Consultar dados da Conta - por número\n\n"); 112 | Console.ResetColor(); 113 | 114 | KeyPress(); 115 | break; 116 | case 4: 117 | Console.ForegroundColor = ConsoleColor.Green; 118 | Console.WriteLine("Atualizar dados da Conta\n\n"); 119 | Console.ResetColor(); 120 | 121 | KeyPress(); 122 | break; 123 | case 5: 124 | Console.ForegroundColor = ConsoleColor.Green; 125 | Console.WriteLine("Apagar a Conta\n\n"); 126 | Console.ResetColor(); 127 | 128 | KeyPress(); 129 | break; 130 | case 6: 131 | Console.ForegroundColor = ConsoleColor.Green; 132 | Console.WriteLine("Saque\n\n"); 133 | Console.ResetColor(); 134 | 135 | KeyPress(); 136 | break; 137 | case 7: 138 | Console.ForegroundColor = ConsoleColor.Green; 139 | Console.WriteLine("Depósito\n\n"); 140 | Console.ResetColor(); 141 | 142 | KeyPress(); 143 | break; 144 | case 8: 145 | Console.ForegroundColor = ConsoleColor.Green; 146 | Console.WriteLine("Transferência entre Contas\n\n"); 147 | Console.ResetColor(); 148 | 149 | KeyPress(); 150 | break; 151 | default: 152 | Console.ForegroundColor = ConsoleColor.Red; 153 | Console.WriteLine("\nOpção Inválida!\n"); 154 | Console.ResetColor(); 155 | 156 | KeyPress(); 157 | break; 158 | } 159 | } 160 | } 161 | 162 | static void Sobre() 163 | { 164 | Console.WriteLine("\n*********************************************************"); 165 | Console.WriteLine("Projeto Desenvolvido por: "); 166 | Console.WriteLine("Generation Brasil - generation@generation.org"); 167 | Console.WriteLine("github.com/conteudoGeneration"); 168 | Console.WriteLine("*********************************************************"); 169 | 170 | } 171 | 172 | static void KeyPress() 173 | { 174 | do 175 | { 176 | Console.Write("\nPressione Enter para Continuar...\""); 177 | consoleKeyInfo = Console.ReadKey(); 178 | } while (consoleKeyInfo.Key != ConsoleKey.Enter); 179 | } 180 | 181 | } 182 | 183 | } 184 | 185 | 186 | ``` 187 | 188 | 6. Salve e execute o projeto clicando no botão **Run**. 189 | 7. O resultado você confere na animação abaixo: 190 | 191 |
192 | 193 | Observe que caso seja digitado um valor diferente de um numero inteiro na escolha da opção do menu, a mensagem de erro é exibida e o menu é reiniciado. Se pressionar o numero 9, o sistema é finalizado. 194 | 195 |
196 | 197 |
Código fonte: Program 198 | 199 |
200 | 201 |
Código fonte: Projeto Conta Bancária 202 | 203 |

204 | 205 | -------------------------------------------------------------------------------- /03_mssql/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Bootcamp - C# Full Stack

5 | 6 |

Banco de Dados - SQL Server

7 | 8 | 1. Introdução a Banco de Dados com SQL Server 9 | 2. Banco de Dados com SQL Server - parte 01 10 | 3. Banco de Dados com SQL Server - parte 02 11 | 4. Diagrama Entidade Relacionamento (DER) no DB Designer 12 | 13 |

14 | 15 | 16 |
17 |
Home
18 | -------------------------------------------------------------------------------- /04_aspnet/03.md: -------------------------------------------------------------------------------- 1 | 

Introdução ao Entity Framework

2 | 3 | 4 | 5 | Dentro de qualquer aplicação Orientada a Objetos que lida com uma Base de Dados Relacional, existe um problema de distanciamento de paradigmas entre as duas frentes diferentes. Isso em grande escala torna a aplicação suscetível a inconsistências (erros nos dados) em relação ao Banco de dados, ou vice e versa. 6 | 7 | Devido a esse distanciamento de paradigmas entre a Aplicação POO e a Base de Dados Relacional, surgiu conceito de ORM, Object Relational Mapping, que atua como um intermediador entre as duas frentes, mapeando os objetos e entidades da Aplicação para a Base de Dados, e vice e versa. 8 | 9 |
10 | 11 |

1. Mapeamento Objeto Relacional

12 | 13 | 14 | **Mapeamento Objeto Relacional** é a representação de uma Tabela de um Banco de dados Relacional (MySQL, PostgreSQL, Oracle, SQL Server e etc), através de Classes JavaScript/Typescript, que dentro do contexto da POO e seguindo o Modelo MVC, são implementadas na Camada Model (Entity). 15 | 16 | O ORM define uma técnica para realizar a conciliação entre os 2 modelos. Uma das partes centrais é através do mapeamento de linhas para objetos, ou seja, o ORM define o modo como os dados serão mapeados entre os ambientes, como serão acessados e gravados (persistidos). Isso diminui o tempo de desenvolvimento, uma vez que não é necessário perder tempo fazendo essa configuração. 17 | 18 | Na prática, o Mapeamento cria a Relação de equivalência abaixo: 19 | 20 | | Banco de dados | | Linguagem Orientada a Objetos | 21 | | -------------- | ----- | ----------------------------- | 22 | | Tabela | **🡪** | Classe | 23 | | Coluna | **🡪** | Atributo | 24 | | Registro | **🡪** | Objeto | 25 | 26 | Enquanto que no banco de dados temos Tabelas, Colunas e Registros, em uma linguagem Orientada a Objetos, como o C#, temos o equivalente com Classes, Atributos e Objetos. 27 | 28 |
29 | 30 |

2. Entity Framework

31 | 32 | 33 | 34 | **Entity Framework** é uma estrutura ORM de código aberto para aplicativos .NET com suporte da Microsoft. Ele permite que as pessoas desenvolvedoras trabalhem com dados usando objetos de classes específicas de domínio sem se concentrar nas tabelas e colunas subjacentes do banco de dados onde esses dados são armazenados. Com o Entity Framework, as pessoas desenvolvedoras podem trabalhar em um nível mais alto de abstração quando lidam com dados e podem criar e manter aplicativos orientados a dados com menos código em comparação com os aplicativos tradicionais. 35 | 36 | ***"O Entity Framework é um mapeador objeto-relacional (ORM) que permite que pessoas desenvolvedoras .NET trabalhem com um Banco de dados usando Objetos .NET, eliminando a necessidade da maior parte do código de acesso a dados que as pessoas desenvolvedoras geralmente precisam escrever.”*** 37 | 38 | A imagem a seguir ilustra onde o Entity Framework se encaixa no seu aplicativo: 39 | 40 |
41 | 42 | Conforme a imagem acima, o Entity Framework se encaixa entre as entidades de negócios (classes de domínio) e o banco de dados. Ele persiste os dados armazenados nas propriedades de entidades de negócios e também recupera os dados do banco de dados e os converte em objetos de entidades de negócios automaticamente, fazendo o papel da Camada Repository. 43 | 44 |
45 | 46 |

2.1. Recursos do Entity Framework

47 | 48 | 49 | 50 | - **Plataforma cruzada:** O Entity Framework Core é uma estrutura de plataforma cruzada que pode ser executada em Windows, Linux e Mac. 51 | - **Modelagem:** O Entity Framework cria um EDM (Entity Data Model) baseado em entidades do C#, com Atributos de diferentes tipos de dados e seus respectivos Métodos Get e Set. Ele usa esse modelo ao consultar ou persistir Objetos no Banco de dados. 52 | - **Consulta:** O Entity Framework nos permite usar consultas LINQ (Language Integrated Query) para recuperar os dados do Banco de dados. O provedor de banco de dados traduzirá essas consultas LINQ para a linguagem de consulta específica do banco de dados (por exemplo, SQL para um banco de dados relacional). 53 | - **Rastreamento de alterações:** O Entity Framework acompanha as alterações ocorridas nas instâncias de suas entidades (valores de propriedade) que precisam ser enviadas ao banco de dados. 54 | - **Salvamento (Persistência) dos dados:** O Entity Framework executa comandos INSERT, UPDATE e DELETE no Banco de dados com base nas alterações ocorridas em suas entidades quando você chama o Método **SaveChanges()**. O Entity Framework também fornece o Método **SaveChangesAsync()** para trabalhar com programação assíncrona. 55 | - **Simultaneidade:** O Entity Framework usa a Simultaneidade otimista por padrão para proteger as alterações de substituição feitas por outro usuário desde que os dados foram consultados no Banco de dados. 56 | - **Configurações do Banco de dados:** O Entity Framework nos permite configurar o modelo usando atributos de anotação de dados ou a **Fluent API** para substituir as convenções padrão. Através da Fluent API, por exemplo, podemos criar os Relacionamentos entre as Entidades, definir o nome das tabelas e dos atributos, entre outras configurações. 57 | - **Migrações:** O Entity Framework fornece um conjunto de comandos de migração (Migrations), que podem ser executados no Console do Gerenciador de Pacotes NuGet ou na interface de linha de comando para criar ou gerenciar o esquema de Banco de dados da aplicação. 58 | 59 | > **Fluent API** é uma API do Entity Framework, utilizada para configurar classes de domínio, Entre estas configurações podemos definir o nome da tabela, os Relacionamentos entre as tabelas, entre outras configurações. 60 | > 61 | > **Migrations** são uma forma de gerenciar as mudanças na estrutura do banco de dados de uma aplicação. Eles permitem que você crie, altere ou exclua tabelas, colunas, índices e outros elementos do banco de dados de forma consistente e controlada (semelhante ao GIT). 62 | 63 |
64 | 65 |

2.2. A Classe DbContext

66 | 67 | 68 | 69 | A Classe **DbContext** (Database Context ou simplesmente Context) é uma classe muito importante ao trabalhar com Entity Framework. O Contexto representa uma sessão com o Banco de dados da aplicação, onde serão executadas as operações do CRUD (Criar, Ler, Atualizar, Excluir). 70 | 71 | A Classe de Contexto no Entity Framework faz parte do Namespace `System.Data.Entity.DbContext` no Entity Framework. Uma instância da classe de contexto representa a Camada Repository (Repositório), em que pode combinar várias alterações em uma única transação no Banco de dados. 72 | 73 | A Classe de Contexto também é usada para Definir o Modelo de dados, Mapear os Relacionamentos entre as Tabelas do Banco de dados, entre outras tarefas. 74 | 75 |
76 | 77 |

2.3. O que é uma entidade no Entity Framework?

78 | 79 | 80 | 81 | Uma entidade no Entity Framework é uma Classe que mapeia uma Tabela no Banco de dados. Essa classe deve ser incluída como uma `DbSet` na Classe **DbContext** da aplicação. A API do Entity Framework mapeia cada entidade para uma tabela e cada propriedade de uma entidade para uma coluna no Banco de dados. Veja a imagem abaixo: 82 | 83 |
84 | 85 | Observe que a Classe Tema, foi convertida em uma Tabela chamada Tema. 86 | 87 |
88 | 89 |

2.4. O Fluxo de trabalho do Entity Framework

90 | 91 | 92 | 93 | Vamos compreender o Fluxo de Trabalho básico de cada operação do CRUD, criado com o Entity Framework: 94 | 95 | **Criar o Modelo** 96 | 97 |
98 | 99 | Ante de criar qualquer Query na sus aplicação, você precisa definir seu modelo de dados através das Classes do tipo Model. Na sequência, precisamos definir a Classe de Contexto, como uma Herança da Classe **DbContext**, que será responsável por criar o Modelo (Banco de dados e as Tabelas), Conectar com o Banco de dados e executar as Queries SQL (Interagir com o Banco de dados e o Modelo). Para finalizar, precisamos Criar o Banco e as Tabelas, que podem ser feitos de 2 formas: 100 | 101 | 1. Criar o Banco e as Tabelas a partir do próprio modelo; 102 | 2. Criar o Banco e as Tabelas utilizando Migrations. 103 | 104 | Uma vez o Banco e as Tabelas criadas, agora poderemos executar Queries SQL. 105 | 106 |
107 | 108 | **Persistir Dados (INSERT)** 109 | 110 |
111 | 112 | Para Inserir dados (persistir um Objeto no Banco de dados), adicione o Objeto de domínio ao contexto e chame o método **SaveChangesAsync()**. A API do Entity Framework criará a instrução SQL INSERT apropriada e o executará no Banco de dados. 113 | 114 |
115 | 116 | **Consultar Dados (SELECT)** 117 | 118 |
119 | 120 | Para Consultar dados, crie e execute uma consulta **LinQ**. A API do Entity Framework converterá essa consulta em uma instrução SQL SELECT e a executará. O resultado será transformado em Objetos da Entidade pesquisada, no formato JSON. 121 | 122 |
123 | 124 | **Atualizar e Deletar Dados (UPDATE e DELETE)** 125 | 126 |
127 | 128 | Para Atualizar ou Excluir dados, Atualize ou Remova o Objeto do Contexto e chame o método **SaveChangesAsync()** para efetivar a operação. A API do Entity Framework criará a instrução SQL UPDATE ou DELETE apropriada e a executará no Banco de dados. 129 | 130 |
131 | 132 | 133 | 134 |

135 | 136 | 137 | -------------------------------------------------------------------------------- /04_aspnet/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Bootcamp - C# Full Stack

5 | 6 |
7 | 8 |

Backend - ASP.NET

9 | 10 | 1. Introdução ao ASP.NET 11 | 2. Primeiros passos com ASP.NET 12 | 3. Introdução ao Entity Framework 13 | 4. Projeto Blog Pessoal - Projeto ASP.NET 14 | 5. Projeto Blog Pessoal - Database Context 15 | 6. Projeto Blog Pessoal - Classe Postagem Model 16 | 7. Projeto Blog Pessoal - Interface e Classe Postagem Service 17 | 8. Projeto Blog Pessoal - Classe Postagem Controller - Método Listar tudo 18 | 9. Projeto Blog Pessoal - Classe Postagem Controller - Método Buscar por id 19 | 10. Projeto Blog Pessoal - Classe Postagem Controller - Método Buscar por título 20 | 11. Projeto Blog Pessoal - Classe Postagem Controller - Método Cadastrar 21 | 12. Projeto Blog Pessoal - Classe Postagem Controller - Método Atualizar 22 | 13. Projeto Blog Pessoal - Classe Postagem Controller - Método Apagar 23 | 14. Projeto Blog Pessoal - Relacionamento entre Classes - Recurso Tema - Parte 01 24 | 15. Projeto Blog Pessoal - Relacionamento entre Classes - Recurso Tema - Parte 02 25 | 16. Introdução a ASP.NET - Security 26 | 17. Projeto Blog Pessoal - ASP.NET Security - Ecossistema do Usuário - Parte 01 27 | 18. Projeto Blog Pessoal - ASP.NET Security - Ecossistema do Usuário - Parte 02 28 | 19. Projeto Blog Pessoal - ASP.NET Security - Ecossistema da Segurança 29 | 20. Introdução ao xUnit 30 | 21. Projeto Blog Pessoal - Testes E2E - Criando e Configurando o Projeto xUnit 31 | 22. Projeto Blog Pessoal - Testes E2E - Testes na Camada Controller 32 | 23. Projeto Blog Pessoal - Personalizando o Swagger 33 | 24. Projeto Blog Pessoal - Deploy no Render via Github 34 | 35 |
36 | 37 |

Anexos

38 | 39 | 1. Diagrama de Classes✔ 40 | 41 |

42 | 43 | 44 |
45 |
Home
46 | -------------------------------------------------------------------------------- /04_aspnet/uml.md: -------------------------------------------------------------------------------- 1 |

Diagrama de Classes

2 | 3 | A **Programação Orienteda à Objetos (POO)** é um paradigma baseado no conceito de envolver dados (**Atributos**), e comportamentos (**Métodos**), relacionados aqueles dados, em uma coleção chamada Objetos, que são construídos de um conjunto de “planos de construção” (**Métodos Construtores**), definidos por uma pessoa Desenvolvedora ou por um Analista de Sistemas, chamados de **Classes**. Uma Classe é como uma planta de construção que define a estrutura para objetos, que são instâncias concretas daquela Classe. 4 | 5 | Da mesma forma que o **DER**, Diagrama de Entidades e Relacionamentos apresentam o nosso Modelo de dados Relacional de forma gráfica, o **Diagrama de Classes** representam de forma gráfica as nossas Classes e as suas relações. A **UML** (Unified Modeling Language), que **significa** Linguagem Unificada de Modelagem, é a linguagem padrão para modelagem de sistemas que seguem o paradigma da Orientação a Objetos. A UML é utilizada na construção dos Diagramas de Classes e outros tipos de Diagramas como o Diagrama de Casos de Uso, Diagrama de Sequência e etc. Neste material vamos focar no Diagrama de Classes. 6 | 7 |
8 | 9 | Observe no Diagrama de Classe acima que podemos visualizar todos os Métodos e Atributos que compõem a Classe Cat, inclusive a visibilidade, simplificando processo de implementação. 10 | 11 |

Relações entre objetos

12 | 13 | Quando falamos de uma única Classe, tudo fica muito simples, entretanto, nenhuma aplicação Orientada a Objetos se resume em apenas uma Classe, e além disso, os Objetos gerados por estas Classes possuem relações entre si, de acordo com o planejamento do projeto. Para simplificar o entendimento destas relações, construímos os Diagramas de Classes com as suas respectivas Relações. Vamos conhecer os tipos de relação entre os Objetos: 14 | 15 |

Herança

16 | 17 | A Herança é a habilidade de construir novas Classes em cima de Classes já existentes. O maior benefício da herança é a reutilização de código. Se você quer criar uma Classe que é apenas um pouco diferente de uma já existente, não há necessidade de duplicar o código. Ao invés disso, você estende a Classe existente e coloca a funcionalidade adicional dentro de uma subClasse resultante, que herdará todos os campos de Métodos da superClasse. 18 | 19 |
20 | 21 | No exemplo acima, Gato é um animal, logo ele herda todas características da Classe Animal. 22 | 23 |

Implementação

24 | 25 | Interfaces são um conceito da programação orientada a objetos que tem a ver com o comportamento esperado para uma ou um conjunto de Classes. Interfaces definem o que uma Classe deve fazer e não como. Assim, interfaces não possuem a implementação de Métodos pois apenas declaram o conjunto de Métodos. 26 | 27 | Na interface, todos os Métodos são portanto abstratos e públicos, já que são apenas declarados na interface sendo obrigatoriamente implementados pelas Classes que implementam a interface. Uma vez definida uma interface é implementada pelas Classes de devem ter o comportamento descrito na interface, ou seja, devem ter os mesmos Métodos definidos na interface. Dizemos que as Classes implementam a interface pois de fato uma Classe ao implementar uma interface deve prover a implementação de todos os Métodos definidos na interface. 28 | 29 | Em diagramas UML, o relacionamento de Implementação é mostrado por uma seta igual a da Herança, com a linha tracejada, desenhada de um objeto e apontada para outro que ele implementa. 30 | 31 |
32 | 33 | No exemplo acima, a Classe Cat está implementando os Métodos das Interfaces Quatro Patas e Respira Oxigênio 34 | 35 |

Associação

36 | 37 | A associação é um relacionamento no qual um objeto usa ou interage com outro. Em diagramas UML, o relacionamento de 38 | associação é mostrado por uma seta simples desenhada de um objeto e apontada para outro que ele utiliza. A propósito, 39 | ter uma associação bi-direcional é uma coisa completamente normal. Neste caso, a flecha precisa apontar para ambos. A 40 | associação pode ser vista como um tipo especializado de dependência, onde um objeto sempre tem acesso aos objetos os quais ele interage, enquanto que a dependência simples não estabelece uma ligação permanente entre os objetos. 41 | 42 |
43 | 44 | No exemplo acima, Professor interage com aluno. 45 | 46 |

Agregação

47 | 48 | A agregação é um tipo especializado de associação que representa relações individuais, múltiplas, e totais entre múltiplos objetos, enquanto que uma associação simples descreve relações entre pares de objetos. 49 | Geralmente, sob agregação, um objeto “tem” um conjunto de outros objetos e serve como um contêiner ou coleção. O componente pode existir sem o contêiner e pode ser ligado através de vários contêineres ao mesmo tempo. 50 | 51 | Em Diagramas UML a relação de agregação é mostrada como uma linha e um diamante vazio na ponta do contêiner e uma flecha apontando para o componente. 52 | 53 |
54 | 55 | No exemplo acima, um objeto Departamento contém diversos professores e os objetos professores continuam existindo mesmo sem o objeto departamento. 56 | 57 |

Composição

58 | 59 | A composição é um tipo específico de agregação, onde um objeto é composto de um ou mais instâncias de outro. A distinção entre esta relação e as outras é que o componente só pode existir como parte de um contêiner. No UML a relação de composição é desenhada do mesmo modo que para a agregação, mas com um diamante preenchido na base da flecha. 60 | 61 |
62 | 63 | No exemplo acima, a universidade consiste de departamentos e os departamentos só existem enquanto o objeto universidade existir. 64 | 65 |

66 | 67 | 68 | -------------------------------------------------------------------------------- /05_react/02.md: -------------------------------------------------------------------------------- 1 |

Preparando o ambiente para trabalhar com o React

2 | 3 | 4 | 5 |

1. Como configurar um projeto React com o Vite?

6 | 7 | 8 | 9 |

1.1 👣 Introdução

10 | 11 | Normalmente, você pode criar um novo projeto usando [Create React App](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-react-project-with-create-react-app) , mas pode levar muito tempo para instalar mais de 140 MB de dependências. [O Vite](https://vitejs.dev/) é uma ferramenta leve que ocupa 31 MB de dependências, o que economizará tempo ao iniciar um novo projeto. [O Vite também usa os módulos ES ( ECMAScript](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/) ) nativos do navegador para vincular a arquivos JavaScript, que não reconstrói o pacote inteiro após cada alteração de arquivo. Essas diferenças resultam em uma experiência mais rápida ao criar, atualizar e construir um aplicativo React com o Vite. 12 | 13 | Este tutorial criará um novo aplicativo React usando a ferramenta Vite. Você criará um aplicativo básico com um novo componente, CSS e um arquivo de imagem e preparará um pacote otimizado para implantação. 14 | 15 |

1.2 👣 Pré-requisitos

16 | 17 | Para seguir este tutorial, você precisará do seguinte: 18 | 19 | - [Node.js](https://nodejs.org/en/) versão 12.2.0 ou superior instalado em sua máquina. Você pode instalar a versão mais recente do Node.js com nosso tutorial [Como instalar o Node.js](https://www.digitalocean.com/community/tutorial_series/how-to-install-node-js-and-create-a-local-development-environment) . 20 | - [VScode](https://code.visualstudio.com/) Você pode instalar a versão mais recente do VSCode 21 | - Gerenciador de pacotes Yarn versão 1.22.0 ou superior instalado em sua máquina. Você pode instalar o Yarn com a Etapa 1 em [Como instalar e usar o Yarn Package Manager para Node.js](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-the-yarn-package-manager-for-node-js) . 22 | 23 |

1.3 👣 Instalando Yarn

24 | 25 | Para instalar o Yarn, você pode seguir as seguintes etapas: 26 | 27 | 1. Verifique se você tem o Node.js instalado em seu sistema, pois o Yarn requer o Node.js para funcionar. Você pode verificar isso digitando `node -v` no terminal. Se você não tiver o Node.js instalado, baixe e instale-o em seu sistema. 28 | 2. Baixe e instale o Yarn em seu sistema operacional. Você pode fazer isso de várias maneiras, dependendo do seu sistema operacional. A seguir, mostramos alguns exemplos: 29 | 30 | - No MacOS, você pode instalar o Yarn usando o Homebrew executando o seguinte comando no terminal: 31 | 32 | ``` 33 | npm install yarn 34 | ``` 35 | 36 | - No Ubuntu ou Debian, você pode instalar o Yarn usando o gerenciador de pacotes apt com o seguinte comando no terminal: 37 | 38 | ``` 39 | sudo apt-get update && sudo apt-get install yarn 40 | ``` 41 | 42 | - No Windows, você pode baixar o instalador do Yarn via npm 43 | 44 | você pode executar o seguinte para comando para **instalar** Yarn: 45 | 46 | ``` 47 | npm install --global yarn 48 | ``` 49 | 50 | Verifique se o Yarn está instalado executando: 51 | 52 | ``` 53 | yarn --version 54 | ``` 55 | 56 | 3. Verifique se o Yarn está instalado em seu sistema digitando `yarn -v` no terminal. Se o Yarn estiver instalado corretamente, ele retornará a versão do Yarn instalada em seu sistema. 57 | 58 | Pronto! Agora você pode usar o Yarn em seu projeto JavaScript. 59 | 60 |
61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 |
69 | 70 |

1.4 👣 Instalando Vite

71 | 72 | - Para instalar o Vite no seu computador, siga os seguintes passos: 73 | 74 | 1. Abra o terminal (no macOS e Linux) ou o prompt de comando (no Windows). 75 | 2. Digite o seguinte comando para instalar o Vite globalmente usando o gerenciador de pacotes NPM: 76 | 77 | ``` 78 | npm install -g vite 79 | ``` 80 | 81 | 3. Aguarde o término da instalação. Quando finalizar, o Vite estará pronto para ser usado. 82 | 83 |
84 | 85 | 86 | 87 | 88 | 89 |
90 | 91 |
92 | 93 | 94 | -------------------------------------------------------------------------------- /05_react/04.md: -------------------------------------------------------------------------------- 1 | 

Estilizando componentes React com CSS

2 | 3 | O React é uma biblioteca JavaScript usada para construir interfaces de usuário. Uma das vantagens do React é sua capacidade de modularizar componentes e permitir a reutilização de código. No entanto, para que as interfaces de usuário criadas com React sejam visualmente atraentes e coerentes, é importante aplicar estilos consistentes em todos os componentes. 4 | 5 | O CSS é uma linguagem de estilo usada para definir a aparência de uma página da web. Em conjunto com o React, o CSS pode ser usado para definir estilos para cada componente individualmente ou para vários componentes em conjunto. 6 | 7 | Estilizar componentes com CSS em React pode ajudar a tornar a interface de usuário mais coesa e consistente. Além disso, o CSS permite que as interfaces sejam adaptadas a diferentes tamanhos de tela e dispositivos, tornando-as responsivas. 8 | 9 | Usar o CSS em conjunto com o React também pode ajudar a melhorar a manutenção do código. Por exemplo, se um estilo precisa ser alterado, ele pode ser atualizado em um único arquivo CSS em vez de precisar ser alterado em vários arquivos JavaScript que definem os componentes. 10 | 11 |

1.1 👣 Formas de utilizar css em React.

12 | 13 | Existem diversas formas de utilizar CSS em React. Algumas das mais comuns são: 14 | 15 | 1. CSS tradicional: É possível utilizar as regras CSS tradicionais em um arquivo separado e importá-lo para o componente React. Por exemplo: 16 | 17 | ``` 18 | import React from 'react'; 19 | import './MeuComponente.css'; 20 | 21 | function MeuComponente() { 22 | return ( 23 |
24 | Conteúdo do componente 25 |
26 | ); 27 | } 28 | ``` 29 | 30 | No exemplo acima, a classe CSS `meu-componente` é definida no arquivo `MeuComponente.css`, que é importado para o componente React. 31 | 32 | 1. CSS inline: É possível definir estilos diretamente nos elementos HTML utilizando a propriedade `style`. Por exemplo: 33 | 34 | ``` 35 | codefunction MeuComponente() { 36 | return ( 37 |
38 | Conteúdo do componente 39 |
40 | ); 41 | } 42 | ``` 43 | 44 | No exemplo acima, o estilo é definido diretamente na tag `div` utilizando a propriedade `style`. A propriedade `style` espera um objeto JavaScript com as propriedades CSS que se deseja aplicar. 45 | 46 | 1. Styled components: Os styled components são uma abordagem de estilização que permite escrever CSS dentro dos próprios componentes React, utilizando uma sintaxe semelhante ao CSS tradicional. Por exemplo: 47 | 48 | ``` 49 | import React from 'react'; 50 | import styled from 'styled-components'; 51 | 52 | const MeuComponenteWrapper = styled.div` 53 | background-color: blue; 54 | color: white; 55 | `; 56 | 57 | function MeuComponente() { 58 | return ( 59 | 60 | Conteúdo do componente 61 | 62 | ); 63 | } 64 | ``` 65 | 66 | No exemplo acima, o componente `MeuComponenteWrapper` é criado utilizando a função `styled` do pacote `styled-components`. Dentro da string template do styled component é possível escrever regras CSS como em um arquivo externo. 67 | 68 | No curso utilizaremos css externo com ClassName. 69 | 70 | Em React, `className` é uma propriedade utilizada para definir uma ou mais classes CSS a serem aplicadas a um componente. Essa propriedade é semelhante à propriedade `class` utilizada em HTML, mas em React utiliza-se `className` para evitar conflitos com a palavra-chave `class` da linguagem JavaScript. 71 | 72 | Ao utilizar a propriedade `className` em um componente React, é possível definir uma ou mais classes CSS para o mesmo. Por exemplo, se quisermos definir uma classe `my-class` para um componente `div` em React, podemos fazer o seguinte: 73 | 74 | ``` 75 |
Conteúdo do elemento div
76 | ``` 77 | 78 | Dessa forma, a classe `my-class` será aplicada ao elemento `div`. 79 | 80 |

1.2 👣 Estilizando o componente home.

81 | 82 | Agora vamos estilizar o nosso componente Home. 83 | 84 |
85 | 86 | 1. No arquivo Home.css crie uma classe titulo e coloque um atributo color blue, e alinhe o texto ao centro com o atributo text-align: center. 87 | 88 | 2. No arquivo Home.css crie uma classe img e coloque um atributo width: 500px; height: 500px; display: block; margin: 0 auto; 89 | 90 | 3. utilize o codigo do codigo do github abaixo. 91 | 92 |
Código fonte do componente Home.css 93 | 94 | 5. No arquivo Home.tsx indique className titulo no titulo h1 com a descrição Home. 95 | 96 | 5. Crie uma tag de img como descrito no codigo do codigo do github abaixo. 97 | 98 |
Código fonte do Componente Home.tsx 99 | 100 | 8. Salve o projeto e execute o projeto novamente com o comando: 101 | 102 | ``` 103 | yarn run dev 104 | ``` 105 | 106 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 107 | 108 |
109 | 110 | E pronto seu projeto possui um componente de home. 111 | 112 | 113 | 114 | 115 | 116 | 117 |

118 | 119 |
120 | 121 | -------------------------------------------------------------------------------- /05_react/07.md: -------------------------------------------------------------------------------- 1 | 

React: Estilização com Flexbox, Grid e Tailwind

2 | 3 | React é uma biblioteca JavaScript utilizada para construir interfaces de usuário (UI). O Grid e Flexbox são duas técnicas de layout do CSS que são frequentemente utilizadas em conjunto com React para criar interfaces responsivas e dinâmicas. 4 | 5 | Ao utilizar o Grid e o Flexbox em conjunto com React, é possível criar interfaces de usuário mais flexíveis e responsivas, que se adaptam a diferentes tamanhos de tela e dispositivos. Além disso, essas técnicas de layout também tornam mais fácil para os desenvolvedores criar layouts complexos de maneira mais eficiente, reduzindo a quantidade de código necessário para implementar esses layouts. 6 | 7 |

1.1 👣 Flex box em Tailwind CSS com React

8 | 9 | A classe `flex` em Tailwind CSS é utilizada para tornar um elemento HTML um contêiner flexível. Isso significa que os filhos desse contêiner poderão ser organizados em uma única linha ou em uma única coluna, dependendo da direção definida pelo desenvolvedor. 10 | 11 | Por padrão, a direção do contêiner flexível é definida como "row", o que significa que os filhos são organizados em uma única linha. No entanto, é possível alterar a direção para "column", fazendo com que os filhos sejam organizados em uma única coluna. 12 | 13 | A classe `flex` é muito útil para criar layouts responsivos e dinâmicos, pois permite que os filhos sejam organizados de maneira flexível, adaptando-se a diferentes tamanhos de tela e dispositivos. Além disso, o Tailwind CSS oferece diversas outras classes que podem ser combinadas com a classe `flex` para definir o alinhamento, o tamanho e a ordem dos filhos. 14 | 15 | Algumas classes relacionadas ao `flex` em Tailwind CSS incluem: 16 | 17 | - `flex-row` e `flex-col`: utilizadas para definir a direção do contêiner flexível como "row" ou "column". 18 | 19 | - `justify-start`, `justify-end`, `justify-center`, `justify-between` e `justify-around`: utilizadas para definir o alinhamento horizontal dos filhos dentro do contêiner flexível. 20 | 21 | - `items-start`, `items-end`, `items-center`, `items-baseline` e `items-stretch`: utilizadas para definir o alinhamento vertical dos filhos dentro do contêiner flexível. 22 | 23 | - `flex-wrap`, `flex-nowrap` e `flex-wrap-reverse`: utilizadas para definir o comportamento de quebra de linha dos filhos dentro do contêiner flexível. 24 | 25 | - `order-1`, `order-2`, `order-3`, etc.: utilizadas para definir a ordem dos filhos dentro do contêiner flexível. 26 | 27 | Veja alguns exemplos pela documentaçao Tailwind CSS: 28 | 29 |
30 | 31 | 32 | 33 | 34 | 35 |
36 | 37 | 38 |

1.2 👣 Codificando Flex-Box no Tailwind CSS em React

39 | 40 | Configurando Flex box Tailwind CSS em um projeto React App. 41 | 42 | 1. Construa o exemplo de codigo do componente Home.tsx 43 | 44 |
Código fonte do componente Home.tsx 45 | 46 | 2. Construa o exemplo de codigo do componente App.tsx 47 | 48 |
Código fonte do componente App.tsx 49 | 50 | 3. Execute seu processo de compilação com `npm run start`. 51 | 52 | ``` 53 | yarn run dev 54 | ``` 55 | 56 | 57 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 58 | 59 |
60 | 61 |
62 | 63 |
64 | 65 | E pronto seu projeto possui um componente de home. 66 | 67 | 68 | 69 |
70 | 71 | 72 |

1.3 👣 Grid em Tailwind CSS com React

73 | 74 | - Tailwind CSS é uma biblioteca de classes utilitárias que permite estilizar rapidamente elementos de interface do usuário. Uma das características do Tailwind CSS é sua abordagem baseada em grid, que permite criar layouts complexos de maneira eficiente. 75 | 76 | O grid do Tailwind é baseado em um sistema de grade responsivo de 12 colunas, que é facilmente personalizável para se adaptar às necessidades do projeto. Ele permite definir o tamanho das colunas, o espaçamento entre as colunas, o alinhamento de conteúdo e outras propriedades relacionadas ao layout. 77 | 78 | Por outro lado, o "Grid no Tailwind CSS" pode se referir ao uso específico de classes de grid no Tailwind CSS, que permitem definir as propriedades de layout do grid diretamente no HTML. Por exemplo, você pode usar as classes "grid-cols-2" e "gap-4" para definir um grid de duas colunas com um espaçamento de 4 pixels entre as colunas. 79 | 80 | No geral, a abordagem de grid no Tailwind CSS é projetada para tornar a criação de layouts mais fácil e eficiente, permitindo que você defina o layout de uma página com menos código e em menos tempo do que seria necessário com outras abordagens de layout. 81 | 82 | **O uso de grid no Tailwind CSS tem várias vantagens ao ser usado com o React, algumas delas incluem:** 83 | 84 | 1. Facilidade de uso: O Tailwind CSS oferece uma sintaxe simples e intuitiva para definir layouts de grade. Combinado com o React, isso torna a criação de layouts mais fácil e eficiente, permitindo que você defina o layout de uma página com menos código e em menos tempo. 85 | 86 | 2. Responsividade: O Tailwind CSS permite que você crie layouts responsivos, que se adaptam automaticamente a diferentes tamanhos de tela. Com o React, isso significa que você pode criar layouts que funcionam bem em todos os dispositivos, sem precisar escrever código separado para cada tamanho de tela. 87 | 88 | 3. Flexibilidade: O Tailwind CSS oferece muitas opções para personalizar o layout de uma grade, como o número de colunas, o espaçamento entre as colunas e o alinhamento de conteúdo. Isso significa que você pode criar layouts que atendam às necessidades específicas do seu projeto. 89 | 90 | 4. Consistência: Ao usar uma biblioteca de classes utilitárias como o Tailwind CSS, você pode manter a consistência no estilo e na estrutura dos seus layouts em todo o seu projeto. Isso pode economizar tempo e reduzir erros, pois você não precisa recriar o mesmo código repetidamente. 91 | 92 | 5. Performance: O Tailwind CSS é projetado para ser leve e rápido, o que significa que os layouts que você cria serão rápidos e responsivos. Isso pode melhorar a experiência do usuário e também pode ajudar a melhorar o desempenho do seu site ou aplicativo. 93 | 94 | 95 | Veja alguns exemplos pela documentaçao Tailwind CSS: 96 | 97 |
98 | 99 | 100 | 101 | 102 | 103 |
104 | 105 | 106 |

1.4 👣 Codificando Grid no Tailwind CSS em React

107 | 108 | Configurando Grid Tailwind CSS em um projeto React App. 109 | 110 | 1. Construa o exemplo de codigo do componente Home.tsx 111 | 112 |
Código fonte do componente Home.tsx 113 | 114 | 2. Construa o exemplo de codigo do componente App.tsx 115 | 116 |
Código fonte do componente App.tsx 117 | 118 | 3. Execute seu processo de compilação com `npm run start`. 119 | 120 | ``` 121 | yarn run dev 122 | ``` 123 | 124 | 125 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 126 | 127 |
128 | 129 | E pronto seu projeto possui um componente de home. 130 | 131 |
Código fonte do projeto 132 | 133 |

134 | 135 | 136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /05_react/09.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Projeto Blog Pessoal: Componentes NavBar, Footer e Home

4 | 5 | O Navbar, o Footer e a Home são elementos importantes em uma aplicação web porque cada um desempenha uma função específica e ajuda a melhorar a usabilidade e a experiência do usuário. 6 | 7 | O Navbar é uma barra de navegação que geralmente fica no topo da página e permite que o usuário navegue pelos diferentes recursos e páginas da aplicação de forma fácil e intuitiva. Ele geralmente inclui links para as principais seções do site, bem como opções de pesquisa e login. O Navbar ajuda a melhorar a usabilidade, permitindo que os usuários naveguem rapidamente para as áreas da aplicação que desejam acessar. 8 | 9 | O Footer é a seção da parte inferior da página e geralmente contém informações importantes, como informações de contato, links para as políticas de privacidade e termos de serviço, créditos e outras informações relevantes. Ele também pode incluir links para recursos adicionais que os usuários possam achar úteis, como um blog ou uma seção de perguntas frequentes. O Footer ajuda a fornecer informações importantes ao usuário e a melhorar a credibilidade e transparência da aplicação. 10 | 11 | A Home é a página principal da aplicação e geralmente é a primeira página que os usuários veem. Ela deve ser projetada para fornecer uma visão geral clara dos recursos e funcionalidades da aplicação, além de apresentar as informações mais relevantes aos usuários. Uma boa Home deve ser fácil de navegar e ajudar os usuários a encontrar rapidamente o que estão procurando. 12 | 13 |

1.1 👣 Construindo o Footer

14 | 15 | Priemiro vamos construir o nosso para isso precisamos instalar a biblioteca phosphor-icons 16 | 17 | 1. digite em seu terminal: 18 | 19 | ``` 20 | npm install @phosphor-icons/react 21 | ``` 22 | 23 | 2. Construa uma pasta chamada components dentro da pasta src de seu projeto. 24 | 25 | 3. Contrua uma pasta chamada footer dentro pasta components de seu projeto. 26 | 27 | 4. Construa um componente chamado Footer dentro da pasta fotter de seu projeto. 28 | 29 | 5. Construa o código abaixo 30 | 31 |
Código fonte do componente Footer.tsx 32 | 33 |

1.2 👣 Construindo o NavBar

34 | 35 | 1. Contrua uma pasta chamada navBar dentro pasta components de seu projeto. 36 | 37 | 2. Construa um componente chamado NavBar dentro da pasta navBar de seu projeto. 38 | 39 | 3. Construa o código abaixo 40 | 41 |
Código fonte do componente NavBar.tsx 42 | 43 |

1.2 👣 Editando o Home

44 | 45 | 1. Edite o componente de Home.tsx dentro da pasta paginas como o codigo abaixo código abaixo 46 | 47 |
Código fonte do componente Home.tsx 48 | 49 |

1.2 👣 Editando o App.tsx

50 | 51 | 1. Edite o componente de App.tsx dentro da pasta paginas como o codigo abaixo código abaixo 52 | 53 |
Código fonte do componente App.tsx 54 | 55 | 1. Execute seu processo de compilação com `npm run start`. 56 | 57 | ``` 58 | yarn run dev 59 | ``` 60 | 61 | 62 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 63 | 64 |
65 | 66 | 67 | 68 |
69 | 70 |
71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /05_react/10.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Criando as Rotas

2 | 3 |

1.1 👣 Bibliotecas de roteamento em desenvolvimento front-end

4 | 5 | Bibliotecas de roteamento em desenvolvimento front-end são conjuntos de ferramentas e funções que permitem que um aplicativo de front-end gerencie as rotas do navegador de forma eficiente e confiável. Essas bibliotecas geralmente são usadas em aplicativos de página única (SPA), que usam JavaScript para renderizar o conteúdo no navegador. 6 | 7 |

1.2 👣 Instalando o React router dom

8 | 9 | Priemiro vamos construir o nosso para isso precisamos instalar a bibliotecareact 10 | 11 | 1. digite em seu terminal: 12 | 13 | ``` 14 | npm i react-router-dom 15 | ``` 16 | 17 | 2.

1.3 👣 Construindo o Login

18 | 19 | 1. Contrua uma pasta chama login dentro pasta paginas de seu projeto. 20 | 21 | 2. Construa um componente chamado Login dentro da pasta navBar de seu projeto. 22 | 23 | 3. Construa o código abaixo 24 | 25 |
Código fonte do componente Login.tsx 26 | 27 |

1.4 👣 Editando o App.tsx

28 | 29 | 1. Edite o componente de App.tsx como o codigo abaixo código abaixo 30 | 31 |
Código fonte do componente App.tsx 32 | 33 | O código acima é um exemplo de como usar o React Router DOM para criar rotas em um aplicativo React. A função `App()` é o componente principal do aplicativo e retorna o conteúdo que será renderizado na página. 34 | 35 | 1. `` - O componente `BrowserRouter` é importado da biblioteca React Router DOM e é usado para envolver todo o conteúdo que precisa de roteamento. 36 | 2. `` - O componente `Routes` é importado da biblioteca React Router DOM e é usado para definir as rotas do aplicativo. 37 | 3. `} />` - Uma rota que é definida usando o componente `Route`. O caminho da rota é definido como `'/'` (que representa a página inicial do aplicativo) e o elemento a ser renderizado é definido como `` (o componente que representa a página inicial). 38 | 4. `} />` - Uma rota que é definida usando o componente `Route`. O caminho da rota é definido como `'/login'` e o elemento a ser renderizado é definido como `` (o componente que representa a página de login). 39 | 5. `} />` - Uma rota que é definida usando o componente `Route`. O caminho da rota é definido como `'/home'` e o elemento a ser renderizado é definido como `` (o componente que representa a página inicial). 40 | 41 |

1.5 👣 Editando o NavBar.tsx

42 | 43 | 1. Edite o componente de NavBar.tsx como o codigo abaixo código abaixo. 44 | 45 |
Código fonte do componente App.tsx 46 | 47 | O elemento `Link` é um componente do React Router DOM que permite criar links clicáveis que levam a outras rotas dentro do seu aplicativo React. Em outras palavras, o `Link` é usado para criar links de navegação dentro do aplicativo sem precisar recarregar a página inteira. 48 | 49 | Quando o usuário clica em um link criado com o elemento `Link`, o React Router DOM atualiza a URL do navegador e renderiza o componente associado à nova rota. Isso significa que o `Link` é usado para criar uma experiência de navegação mais rápida e fluida para os usuários do seu aplicativo. 50 | 51 | O atributo `to` do elemento `Link` define a rota para a qual o link deve apontar. Nesse caso, o valor `'login' ou 'home'` indica que o link deve apontar para a rota `'/login'`. O `'/login'` é a URL que será adicionada ao histórico de navegação do navegador quando o link for clicado. 52 | 53 | 1. Execute seu processo de compilação com `npm run start`. 54 | 55 | ``` 56 | yarn run dev 57 | ``` 58 | 59 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 60 | 61 |
62 | 63 |
64 | 65 |
66 | 67 | 68 | 69 |
70 | 71 |
72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /05_react/11.md: -------------------------------------------------------------------------------- 1 |  2 | 3 |

Axios: Biblioteca de comunicação HTTP

4 | 5 | Bibliotecas de comunicação HTTP em React são bibliotecas que permitem que a aplicação React faça requisições HTTP para uma API e receba respostas. Essas bibliotecas são responsáveis por lidar com a comunicação entre o frontend e o backend da aplicação, permitindo que o usuário veja e interaja com os dados que são armazenados no servidor. 6 | 7 | As bibliotecas de comunicação HTTP mais comuns em React são o `Axios`, `Fetch` e `jQuery`. Cada uma dessas bibliotecas tem suas próprias vantagens e desvantagens e, em geral, são utilizadas para realizar operações de CRUD (Create, Read, Update, Delete) em um backend. 8 | 9 | Essas bibliotecas normalmente utilizam o conceito de `Promises` ou `Callbacks` para realizar as requisições HTTP de forma assíncrona e lidar com a resposta. Isso significa que a requisição é feita em segundo plano, enquanto a aplicação continua a funcionar normalmente, e quando a resposta é recebida, a biblioteca chama uma função de retorno para lidar com os dados. 10 | 11 | No React, essas bibliotecas podem ser utilizadas em conjunto com os `hooks`, como o `useState` e o `useEffect`, para armazenar e exibir os dados recebidos da API. Por exemplo, é possível fazer uma requisição para uma API no momento em que um componente é montado usando o `useEffect` e, em seguida, armazenar os dados recebidos no estado da aplicação com o `useState`, para que possam ser exibidos na tela. 12 | 13 | ao utilizar bibliotecas de comunicação HTTP em React, é possível: 14 | 15 | - Realizar operações de CRUD (Create, Read, Update, Delete) em um backend; 16 | - Enviar e receber dados de forma assíncrona, sem precisar recarregar a página; 17 | - Exibir dados dinamicamente na aplicação, sem precisar recarregar a página; 18 | - Manter a aplicação responsiva e fluida, mesmo enquanto espera pela resposta da API; 19 | - Lidar com erros de forma eficiente, exibindo mensagens de erro na interface do usuário. 20 | 21 |

1.1 👣 Axios em React

22 | 23 | `Axios` é uma biblioteca JavaScript utilizada para realizar requisições HTTP, tanto para recuperar dados quanto para enviar dados para uma API. É comumente utilizada em aplicações React para realizar operações de CRUD (Create, Read, Update, Delete) em um backend. 24 | 25 | A vantagem do `Axios` é que ele é fácil de usar e fornece uma série de recursos úteis para lidar com requisições HTTP, como o suporte a Promises, intercepção de requisições e respostas, cancelamento de requisições, entre outros. 26 | 27 | Alguns dos principais recursos do `Axios` são: 28 | 29 | - Suporte a Promises: o `Axios` retorna uma Promise, o que facilita o tratamento da resposta da requisição; 30 | - Intercepção de requisições e respostas: o `Axios` permite que as requisições e respostas sejam interceptadas para serem modificadas ou tratadas de forma específica antes de serem enviadas ou exibidas na aplicação; 31 | - Suporte a cancelamento de requisições: o `Axios` permite que as requisições sejam canceladas, caso necessário, o que pode melhorar a performance da aplicação; 32 | - Suporte a configurações globais: o `Axios` permite que configurações globais sejam definidas para todas as requisições feitas pela aplicação, como headers, por exemplo. 33 | 34 |

1.1 👣 Instalando Axios em react

35 | 36 | Primeiro vamos construir o nosso para isso precisamos instalar a bibliotecareact 37 | 38 | 1. digite em seu terminal: 39 | 40 | ```bash 41 | npm i axios@^1.3.4 42 | ``` 43 | 44 |
45 | 46 |

1.2 👣 Service em React

47 | 48 | Em React, um "service" é um módulo ou uma classe que encapsula uma funcionalidade específica da aplicação, como o acesso a uma API, a manipulação de dados, a autenticação de usuários, entre outros. Esses serviços geralmente contêm métodos que realizam operações assíncronas, como a realização de requisições HTTP, e retornam Promises com os resultados dessas operações. 49 | 50 | Um dos principais objetivos de utilizar serviços em React é separar as responsabilidades da aplicação, tornando o código mais organizado e fácil de manter. Além disso, o uso de serviços também permite reutilizar a lógica de negócio em diferentes partes da aplicação, sem precisar duplicar código. 51 | 52 | O serviço com Axios em React é uma forma de fazer requisições HTTP de forma assíncrona em aplicações web. Essas requisições são importantes para obter dados de APIs externas, enviar dados para o servidor, ou até mesmo para realizar atualizações em tempo real na interface do usuário. 53 | 54 | O Axios é uma biblioteca muito popular e fácil de usar que permite fazer requisições HTTP de forma simples e eficiente. Ele é muito utilizado em projetos React devido à sua simplicidade e recursos avançados, como a capacidade de cancelar requisições, configurações de tempo limite e interceptadores de requisição e resposta. 55 | 56 | Ao utilizar o serviço com Axios em React, você pode separar a lógica de acesso à API em um módulo separado, tornando seu código mais organizado e fácil de manter. Além disso, você pode usar o Axios para lidar com erros e exceções, bem como para realizar autenticação de usuários. 57 | 58 |

1.2 👣Exemplo de service com axios em React

59 | 60 | Esse é um exemplo de como utilizar a biblioteca Axios para realizar uma requisição GET a uma API. 61 | 62 | ```javascript 63 | import axios from 'axios'; 64 | 65 | axios.get('/user?ID=12345') 66 | .then(function (response) { 67 | console.log(response); 68 | }) 69 | .catch(function (error) { 70 | console.log(error); 71 | }); 72 | ``` 73 | 74 | Primeiro, é feito o import da biblioteca Axios através da sintaxe `import axios from 'axios'`. Em seguida, é utilizada a função `axios.get()` para fazer uma requisição do tipo GET para a URL `/user` passando como parâmetro um objeto que contém o ID `12345`. 75 | 76 | Ao utilizar a função `.then()` na resposta da requisição, estamos definindo uma função que será executada caso a requisição seja bem-sucedida, ou seja, quando a API retornar uma resposta. Nesse caso, estamos imprimindo no console a resposta da API utilizando a função `console.log(response)`. 77 | 78 | Caso ocorra algum erro na requisição, podemos utilizar a função `.catch()`. 79 | 80 |
81 | 82 |

1.3 👣 Trabalhando com axios em React com TypeScript

83 | 84 | 1. Instale o Axios em seu projeto React usando o gerenciador de pacotes npm. Para fazer isso, execute o seguinte comando no terminal: 85 | 86 | ```bash 87 | npm install axios 88 | ``` 89 | 90 | 2. no componente app.tsx 91 | 92 | 3. importe no componente a biblioteca useState e useEffect como no exemplo 93 | 94 | 4. importe a biblioteca do axios 95 | 96 | 5. construa uma interface User contendo os atributos de id do tipo number e name do tipo string 97 | 98 | 6. construa um useState de users do tipo array da interface User inicializado como vazio 99 | 100 | 7. construa um useEffect de array vazio 101 | 102 | 8. chame o objeto axios e chame o metodo get 103 | 104 | 9. no parametro do método get indique o endereço da api do placeholder no recurso user 105 | 106 | 10. abra um sistema de excessão do tipo then e catch 107 | 108 | 11. no metodo then trabalhe com arrow fuction onde utilizaremos a resposta da requisição, objeto response atributo data para setar o nosso useState de users 109 | 110 | 12. no metodo catch capture o erro dentro de um console.log 111 | 112 | 13. crie uma lista não ordenada no componente app.tx 113 | 114 | 14. nessa lista intere atravez de um laço de repetição do tipo map as informaçoes de id e name do nosso useState users 115 | 116 | 15. salve o projeto e execute em seu navegador 117 | 118 |
119 | 120 |
121 | 122 | 123 | 124 |
125 | 126 | 127 | 128 | 129 | 130 |
131 | 132 |
133 | 134 | 135 | -------------------------------------------------------------------------------- /05_react/13.md: -------------------------------------------------------------------------------- 1 |  2 | 3 | 

Arquitetura de um projeto React

4 | 5 | A arquitetura de pasta em um projeto React é muito importante porque ajuda a organizar o código de uma forma lógica e fácil de entender, o que é essencial para manter o projeto escalável, fácil de manter e colaborativo. 6 | 7 | Uma boa arquitetura de pasta pode ajudar a separar as responsabilidades de cada componente e módulo do projeto, e também facilitar a navegação e a localização de arquivos. Além disso, uma estrutura bem definida pode facilitar a reutilização de componentes em diferentes partes do projeto, bem como em outros projetos. 8 | 9 | Uma arquitetura de pasta bem definida para um projeto React geralmente envolve a organização de arquivos por tipo (componentes, estilos, imagens, etc.) ou por recurso (páginas, rotas, autenticação, etc.). A escolha do tipo de organização dependerá do tamanho e da complexidade do projeto, mas o importante é manter uma estrutura clara e consistente em todo o código. 10 | 11 |

1.1 👣 Arquitetura de pastas em React

12 | 13 |
14 | 15 | Existem várias maneiras de organizar um projeto React, mas geralmente as pastas mais comuns são `pages`, `components`, `services` ,`contexts` e `assets`. Abaixo, vou explicar brevemente a função de cada uma delas: 16 | 17 | - **`pages`:** A pasta `pages` geralmente contém os componentes que correspondem às páginas ou rotas da aplicação. Cada página é geralmente composta por vários componentes, como formulários, botões, gráficos, tabelas, etc. Esses componentes são agrupados em uma pasta específica dentro de `pages` e são responsáveis por renderizar a página correta com base na URL ou rota. 18 | - **`components`:** A pasta `components` contém os componentes reutilizáveis da aplicação. Esses componentes podem ser usados em várias páginas ou em outros componentes para ajudar a evitar a duplicação de código. Os componentes em `components` são geralmente compostos por um conjunto de subcomponentes menores que podem ser reutilizados em outros lugares. 19 | - **`services`:** A pasta `services` geralmente contém os arquivos de serviço da aplicação, que lidam com a comunicação com um servidor externo ou API. Esses arquivos geralmente são responsáveis por enviar e receber dados do servidor, realizar autenticação, tratar erros e outros processos relacionados à comunicação com o servidor. 20 | - **`contexts`:** A pasta `contexts` contém os contextos da aplicação. Os contextos são uma forma de compartilhar dados entre componentes sem precisar passá-los manualmente de um componente para outro. Eles são úteis para compartilhar dados como autenticação, configurações, temas, etc. em toda a aplicação. 21 | - **`assets`:** A pasta `assets` geralmente contém todos os recursos estáticos da aplicação, como imagens, ícones, arquivos de fonte e folhas de estilo. Esses recursos são agrupados em uma pasta específica para facilitar o gerenciamento e a importação nos componentes da aplicação. 22 | - **`models`:** A pasta `models` pode conter modelos ou esquemas de dados que definem como os dados são organizados e estruturados na aplicação. Eles podem ser usados para validar e normalizar os dados antes de serem armazenados ou exibidos. 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /05_react/14.md: -------------------------------------------------------------------------------- 1 |  2 | 3 |

Projeto Blog Pessoal: Construindo Model, Context e Service do Cadastro de Usuários

4 | 5 | A página de cadastro de usuário é uma página web que permite que novos usuários se registrem em um aplicativo web. Geralmente, a página de cadastro de usuário contém um formulário com campos para informações básicas do usuário, como nome completo, endereço de e-mail e senha. Além disso, pode conter campos para outras informações, dependendo do tipo de aplicativo e do que é necessário para o registro. 6 | 7 | O processo de registro normalmente começa com o usuário clicando em um botão de registro na página inicial do aplicativo. Em seguida, o usuário é direcionado para a página de cadastro de usuário, onde pode inserir suas informações. O formulário de registro pode conter campos obrigatórios e opcionais, dependendo do que é necessário para o aplicativo. Também pode incluir validações de entrada para garantir que as informações inseridas pelo usuário estejam em um formato correto. 8 | 9 | Após preencher o formulário, o usuário geralmente clica em um botão de envio para enviar suas informações para o servidor do aplicativo. O servidor, por sua vez, pode verificar as informações do usuário, incluindo se o endereço de e-mail é válido e se a senha é forte o suficiente. Se tudo estiver correto, o servidor pode criar uma conta para o usuário e direcioná-lo para a página de login para acessar o aplicativo. 10 | 11 | A página de cadastro de usuário é uma parte importante de um aplicativo web, pois é o primeiro contato do usuário com o aplicativo. Uma página de registro bem projetada pode ajudar a garantir que os usuários se inscrevam com sucesso e possam começar a usar o aplicativo rapidamente. Além disso, uma página de registro segura e bem projetada pode ajudar a proteger as informações pessoais dos usuários e evitar fraudes ou abusos. 12 | 13 | A página de cadastro de usuário é uma parte crítica de qualquer aplicativo web, pois é o ponto de entrada para novos usuários que desejam utilizar o serviço ou produto oferecido pelo aplicativo. 14 | 15 | Existem várias razões pelas quais a página de cadastro de usuário é importante: 16 | 17 | 1. Registro de novos usuários: A página de cadastro de usuário permite que novos usuários se registrem no aplicativo, fornecendo informações básicas, como nome, endereço de e-mail e senha. Essas informações são necessárias para que o usuário possa acessar o aplicativo e utilizar seus recursos. 18 | 2. Coleta de informações importantes: Além das informações básicas, a página de cadastro de usuário também pode coletar outras informações importantes, como preferências de usuário, dados de contato, informações de pagamento e outras informações relevantes para o aplicativo. Essas informações podem ser usadas para personalizar a experiência do usuário e melhorar os recursos oferecidos pelo aplicativo. 19 | 3. Segurança: A página de cadastro de usuário é também um ponto importante para garantir a segurança do aplicativo. Através do cadastro, é possível verificar a identidade do usuário e assegurar que ele não está criando contas múltiplas ou tentando se passar por outra pessoa. 20 | 4. Comunicação: A página de cadastro de usuário também pode ser usada para coletar informações de contato do usuário, como endereço de e-mail ou número de telefone, o que permite ao aplicativo enviar notificações, atualizações e outras informações importantes para o usuário. 21 | 22 | Construiremos uma pagina de cadastro utilizando as estruturas de models,contexts,service. 23 | 24 |

1.1 👣 Construindo as Models

25 | 26 | A pasta "model" geralmente é usada para armazenar os modelos de dados ou classes que representam a estrutura de dados de uma aplicação em React. Esses modelos geralmente são usados para armazenar dados que são compartilhados em vários componentes e que precisam ser mantidos em sincronia. Por exemplo, se sua aplicação precisa armazenar informações de usuário em vários lugares, você pode criar um modelo de usuário e armazenar os dados do usuário nele, em vez de mantê-los em vários componentes separados. 27 | 28 | Agora vamos construir a nossas models. 29 | 30 | 1. Construa uma pasta chamada models dentro da pasta src de seu projeto. 31 | 32 | 2. construa os seguintes arquivos: Usuario.ts, UsuarioLogin.ts, Postagem.ts, Tema.ts . 33 | 34 | 3. no arquivo de Tema coloque o código abaixo. 35 | 36 |
Código fonte da model Tema.ts 37 | 38 | 4. no arquivo de Postagem coloque o código abaixo. 39 | 40 |
Código fonte da model Postagem.ts 41 | 42 | 5. no arquivo de Usuario coloque o código abaixo. 43 | 44 |
Código fonte da model Usuario.ts 45 | 46 | 6. no arquivo de UsuarioLogin coloque o código abaixo. 47 | 48 |
Código fonte da model UsuarioLogin.ts 49 | 50 |

1.2 👣 Construindo o context

51 | 52 | A pasta "contexts" é usada para armazenar os contextos em uma aplicação React. O contexto é uma maneira de compartilhar dados entre componentes sem precisar passá-los manualmente por meio de props. Os contextos permitem que um componente consuma dados de um contexto pai ou de um provedor de contexto. Quando os dados mudam no provedor de contexto, todos os componentes que consomem esse contexto serão atualizados automaticamente. 53 | 54 | Utilizaremos context para passar os dados de Token e informações do usuario logado. 55 | 56 | Agora vamos construir a nosso contexts para guardar o nosso dado de forma global. 57 | 58 | 1. Construa uma pasta chamada contexts dentro da pasta src de seu projeto. 59 | 60 | 2. construa os seguinte arquivo: AuthContext.tsx 61 | 62 | 3. no arquivo de AuthContext.tsx coloque o código abaixo. 63 | 64 |
Código fonte da contest AuthContext.tsx 65 | 66 |

1.3 👣 Construindo service

67 | 68 | A pasta "service" geralmente é usada para armazenar funções que se comunicam com uma API ou outras fontes de dados externas. Essas funções geralmente são usadas para obter ou atualizar dados da API e, em seguida, atualizar o estado dos componentes em conformidade. Essa pasta pode ser usada para separar a lógica de negócios da lógica de interface do usuário e tornar o código mais modular e fácil de manter. 69 | 70 | Agora vamos construir a nosso service. 71 | 72 | 1. Construa uma pasta chamada services dentro da pasta src de seu projeto. 73 | 74 | 2. construa os seguintes arquivo: Service.ts 75 | 76 | 3. no arquivo de Service.ts coloque o código abaixo. 77 | 78 |
Código fonte da service Service.tsx 79 | 80 | Este é um exemplo de código que utiliza a biblioteca axios para fazer uma requisição POST para um servidor em uma determinada URL. 81 | 82 | Primeiro, o código importa a biblioteca axios. Em seguida, a constante api é criada usando o método create da biblioteca axios, passando a baseURL como parâmetro. 83 | 84 | A função cadastrarUsuario é definida, que é uma função assíncrona que recebe três parâmetros: uma string contendo a URL para a requisição POST, um objeto contendo os dados que serão enviados na requisição e uma função setDados que será utilizada para atualizar os dados após a requisição ser concluída. 85 | 86 | Dentro da função, a constante resposta é definida usando o método post da constante api, que é uma instância do axios criada anteriormente. Este método POST envia os dados fornecidos como segundo parâmetro para a URL fornecida como primeiro parâmetro. 87 | 88 | O resultado da requisição é armazenado na constante resposta, que contém o objeto de resposta da requisição. Em seguida, a função setDados é chamada com o resultado da requisição, ou seja, a resposta.data. 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /05_react/15.md: -------------------------------------------------------------------------------- 1 |  2 | 3 |

Projeto Blog Pessoal: Cadastro do Usuario - Template/Lógica/Teste

4 | 5 | Comunicar uma página de cadastro de usuários em React com uma API é extremamente importante, pois permite que sua aplicação React envie e receba dados de um servidor backend e, assim, possa armazenar e recuperar informações dos usuários. 6 | 7 | Sem uma API, sua aplicação React seria incapaz de enviar dados de formulário de cadastro de usuários, como nome, endereço de e-mail e senha, para um servidor para serem armazenados. Além disso, a API também pode ser responsável por realizar algumas validações nos dados enviados, como verificar se o endereço de e-mail é válido e se a senha é segura o suficiente. 8 | 9 | Com a comunicação entre a página de cadastro de usuários e a API, sua aplicação React pode interagir com um banco de dados, armazenando informações do usuário em um servidor e recuperando essas informações posteriormente, por exemplo, para fazer login no site. Além disso, essa comunicação permite que sua aplicação React seja escalável e possa lidar com várias solicitações simultâneas, uma vez que a API é responsável por lidar com todas as solicitações dos usuários. 10 | 11 |

1.1 👣 Construindo o componente de cadastro de usuario

12 | 13 | Agora vamos construir a nosso componente de cadastro de usuario. 14 | 15 | 1. Construa uma pasta chamada cadastro dentro da pasta pages de seu projeto. 16 | 17 | 2. construa os seguinte arquivo: Cadastro.css 18 | 19 | 3. no arquivo de Cadastro.css coloque o código abaixo. 20 | 21 |
Código fonte do componente Cadastro.css 22 | 23 | 4. construa os seguinte arquivo: Cadastro.tsx 24 | 25 | 5. no arquivo de Cadastro.tsx coloque o código abaixo. 26 | 27 |
Código fonte do componente Cadastro.tsx 28 | 29 | 6. no arquivo de NavBar.tsx coloque o código abaixo. 30 | 31 |
Código fonte do componente NavBar.tsx 32 | 33 | 7. no arquivo de App.tsx coloque o código abaixo. 34 | 35 |
Código fonte do componente App.tsx 36 | 37 | 8. Execute seu processo de compilação com `npm run start`. 38 | 39 | ``` 40 | yarn run dev 41 | ``` 42 | 43 | 44 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 45 | 46 |
47 | 48 |
Código fonte do projeto 49 | 50 |

1.2 👣 Construindo a logica da pagina cadastro de usuario e comunicando com api

51 | 52 | Agora vamos construir a nosso componente de cadastro de usuario. 53 | 54 | 1. Edite o seguinte arquivo: Cadastro.tsx 55 | 56 | 2. no arquivo de Cadastro.tsx coloque o código abaixo. 57 | 58 |
Código fonte do componente Cadastro.tsx 59 | 60 | 3. Execute seu processo de compilação com `npm run start`. 61 | 62 | ``` 63 | yarn run dev 64 | ``` 65 | 66 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 67 | 68 | Cadastre um novo usuario na tela de cadastro. 69 | 70 |
71 | 72 |
73 | 74 |
Código fonte do projeto 75 |
76 | 77 |
78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /05_react/16.md: -------------------------------------------------------------------------------- 1 |  2 | 3 |

Projeto Blog Pessoal: Construindo o template do Componente Login

4 | 5 | A página de login é uma parte importante das aplicações web, pois é a porta de entrada para os usuários acessarem seus recursos e dados pessoais dentro do sistema. Essa página geralmente é a primeira interação que os usuários têm com a aplicação, portanto, deve ser fácil de entender e usar. 6 | 7 | Além de permitir o acesso dos usuários, a página de login também ajuda a garantir a segurança da aplicação, pois é o meio pelo qual as credenciais do usuário são verificadas antes de permitir o acesso aos recursos protegidos. Isso ajuda a evitar que usuários não autorizados acessem informações confidenciais ou executem ações que não têm permissão. 8 | 9 | Além disso, a página de login também é importante para a experiência do usuário. Ela pode ser personalizada para refletir a marca da aplicação e oferecer uma interface amigável e intuitiva, facilitando o uso da aplicação pelos usuários. É importante ter um design responsivo e adaptável para que a página de login seja acessível em diferentes dispositivos e tamanhos de tela. 10 | 11 |

1.1 👣 Editando service

12 | 13 | A pasta "service" geralmente é usada para armazenar funções que se comunicam com uma API ou outras fontes de dados externas. Essas funções geralmente são usadas para obter ou atualizar dados da API e, em seguida, atualizar o estado dos componentes em conformidade. Essa pasta pode ser usada para separar a lógica de negócios da lógica de interface do usuário e tornar o código mais modular e fácil de manter. 14 | 15 | Agora vamos editar o nosso service. 16 | 17 | 1. Edite o seguinte arquivo: Service.ts 18 | 19 | 2. no arquivo de Service.ts coloque o código abaixo. 20 | 21 |
Código fonte do Service.tsx 22 | 23 |

1.2 👣 Editando App.tsx

24 | 25 | 1. Edite o seguinte arquivo: App.ts 26 | 27 | 2. no arquivo de Service.ts coloque o código abaixo. 28 | 29 |
Código fonte do componente App.tsx 30 | 31 |

1.3 👣 Construindo o componente de login

32 | 33 | Agora vamos construir a nosso componente de login de usuario. 34 | 35 | 1. Construa uma pasta chamada cadastro dentro da pasta pages de seu projeto. 36 | 37 | 2. construa os seguinte arquivo: Login.css 38 | 39 | 3. no arquivo de Login.css coloque o código abaixo. 40 | 41 |
Código fonte do componente Login.css 42 | 43 | 4. construa os seguinte arquivo: Login.tsx 44 | 45 | 5. no arquivo de Cadastro.tsx coloque o código abaixo. 46 | 47 |
Código fonte do componente Login.tsx 48 | 49 | 6. Execute seu processo de compilação com `npm run start`. 50 | 51 | ``` 52 | yarn run dev 53 | ``` 54 | 55 | 56 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 57 | 58 |
59 | 60 |
Código fonte do projeto 61 |
62 | 63 |
64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /05_react/17.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Projeto Blog Pessoal: Construindo a lógica do Componente Login

4 | 5 | Comunicar a página de login de uma aplicação React com uma API é importante porque permite que o aplicativo se conecte ao servidor e verifique as credenciais do usuário para autorizar o acesso à aplicação. A comunicação com a API é feita através de requisições HTTP, que podem enviar dados de login, como nome de usuário e senha, para o servidor, onde são verificados e autenticados. 6 | 7 | Ao usar uma API para gerenciar a autenticação, a aplicação pode aproveitar os recursos de segurança fornecidos pela API, como a criptografia de senha, autenticação de dois fatores e verificações de segurança adicionais. Isso aumenta a segurança da aplicação e protege os dados do usuário. 8 | 9 | Além disso, a comunicação com a API permite que a aplicação mantenha um estado de login consistente em todas as páginas e componentes. Quando o usuário faz login, a API retorna um token de autenticação, que é armazenado na aplicação e pode ser usado para fazer solicitações subsequentes ao servidor. Dessa forma, a aplicação pode manter o estado de login do usuário em todas as páginas, sem a necessidade de o usuário fazer login novamente em cada página. 10 | 11 | Por fim, a comunicação com a API também permite que a aplicação trate erros de autenticação e forneça mensagens de erro claras ao usuário em caso de falha no login. Isso ajuda a melhorar a experiência do usuário e evita confusão ou frustração. 12 | 13 |

1.1 👣 Construindo a logica da pagina de Login e comunicando com api

14 | 15 | Agora vamos construir a nosso componente de login de usuario. 16 | 17 | 1. Edite o seguinte arquivo: Login.tsx 18 | 19 | 2. no arquivo de Login.tsx coloque o código abaixo. 20 | 21 |
Código fonte do componente Login.tsx 22 | 23 | 3. Execute seu processo de compilação com `npm run start`. 24 | 25 | ``` 26 | yarn run dev 27 | ``` 28 | 29 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 30 | 31 | Realize o login de um usuario cadastrado 32 | 33 |
34 | 35 |
36 | 37 |
Código fonte do projeto 38 |
39 | 40 |
41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /05_react/18.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo o template do Componente Lista Temas

2 | 3 | Um componente de lista de temas em uma aplicação web é uma funcionalidade que permite aos usuários selecionar um conjunto de temas ou categorias para filtrar e visualizar conteúdo relevante para seus interesses. A inclusão desse componente pode ter várias vantagens importantes: 4 | 5 | 1. Facilita a navegação: Um componente de lista de temas ajuda os usuários a encontrar conteúdo de forma rápida e fácil, permitindo que eles selecionem os temas de seu interesse e vejam apenas o conteúdo relevante para eles. 6 | 2. Melhora a experiência do usuário: Ao fornecer uma maneira conveniente de acessar conteúdo relevante, um componente de lista de temas pode melhorar a experiência do usuário, aumentando sua satisfação e fidelidade à aplicação. 7 | 3. Aumenta o engajamento: Quando os usuários podem encontrar facilmente o conteúdo que desejam, eles são mais propensos a se envolver com a aplicação e passar mais tempo navegando nela. 8 | 4. Permite personalização: Ao oferecer aos usuários a capacidade de selecionar seus próprios temas de interesse, um componente de lista de temas permite que a aplicação web ofereça uma experiência personalizada, adaptada aos interesses e necessidades específicas de cada usuário. 9 | 5. Melhora a organização: Um componente de lista de temas pode ajudar a organizar o conteúdo da aplicação web, tornando-o mais fácil de navegar e encontrar, tanto para os usuários quanto para os desenvolvedores e gerenciadores de conteúdo. 10 | 11 |

1.1 👣 Editando service

12 | 13 | A pasta "service" geralmente é usada para armazenar funções que se comunicam com uma API ou outras fontes de dados externas. Essas funções geralmente são usadas para obter ou atualizar dados da API e, em seguida, atualizar o estado dos componentes em conformidade. Essa pasta pode ser usada para separar a lógica de negócios da lógica de interface do usuário e tornar o código mais modular e fácil de manter. 14 | 15 | Agora vamos editar o nosso service. 16 | 17 | 1. Edite o seguinte arquivo: Service.ts 18 | 19 | 2. no arquivo de Service.ts coloque o código abaixo. 20 | 21 |
Código fonte do Service.tsx 22 | 23 |

1.2 👣 Editando NavBar.tsx

24 | 25 | 1. Edite o seguinte arquivo: NavBar.tsx 26 | 27 | 2. no arquivo de NavBar.tsx coloque o código abaixo. 28 | 29 |
Código fonte do componente NavBar.tsx 30 | 31 |

1.3 👣 Editando App.tsx

32 | 33 | 1. Edite o seguinte arquivo: App.tsx 34 | 35 | 2. no arquivo de App.tsx coloque o código abaixo. 36 | 37 |
Código fonte do componente App.tsx 38 | 39 |

1.4 👣 Construindo o componente de CardTemas

40 | 41 | Agora vamos construir a nosso componente de cardTemas. 42 | 43 | 1. Construa uma pasta chamada temas dentro da pasta components de seu projeto. 44 | 45 | 2. Construa uma pasta chamada cardTemas dentro da pasta temas de seu projeto. 46 | 47 | 3. construa os seguinte componente: CardTemas.tsx 48 | 49 | 4. no arquivo de CardTemas.tsx coloque o código abaixo. 50 | 51 |
Código fonte do componente CardTemas.tsx 52 | 53 |

1.5 👣 Construindo o componente de ListaTemas

54 | 55 | Agora vamos construir a nosso componente de listaTemas. 56 | 57 | 1. Construa uma pasta chamada listaTemas dentro da pasta temas de seu projeto. 58 | 59 | 2. construa os seguinte componente: ListaTemas.tsx 60 | 61 | 3. no arquivo de ListaTemas.tsx coloque o código abaixo. 62 | 63 |
Código fonte do componente ListaTemas.tsx 64 | 65 | 4. Execute seu processo de compilação com `npm run start`. 66 | 67 | ``` 68 | yarn run dev 69 | ``` 70 | 71 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 72 | 73 | Acesse a paginas temas do navBar 74 | 75 |
76 | 77 |
Código fonte do projeto 78 |
79 | 80 |
81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /05_react/19.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a lógica do Componente Lista Temas

2 | 3 | A função de um `getAll` temas em uma API REST é retornar uma lista de todos os temas disponíveis na aplicação ou sistema. 4 | 5 | Essa operação é utilizada quando se deseja listar todos os temas cadastrados na base de dados da aplicação ou sistema. A lista pode ser retornada em ordem alfabética, por data de criação ou qualquer outra ordem definida pelo desenvolvedor da API. 6 | 7 | Essa operação é útil para que o usuário da API possa obter uma visão geral dos temas disponíveis, e posteriormente realizar operações específicas em cada tema, como adicionar, atualizar ou remover. 8 | 9 | O retorno dessa lista pode ser em formato JSON, XML ou outro formato definido pela API. Além disso, é importante que a API possua um sistema de paginação para lidar com listas grandes de temas e garantir uma melhor performance e eficiência na comunicação entre o cliente e o servidor. 10 | 11 |

1.1 👣 Cadastrando um novo tema

12 | 13 | Agora vamos cadastrar um novo tema atraves da sua api em deploy pelo swagger. 14 | 15 | 1. Entre no swagger em deploy de sua api 16 | 2. Em Post Temas cadastre um novo tema 17 | 18 |
19 | 20 |

1.2 👣 Construindo a logica do componente CardTemas

21 | 22 | Agora vamos construir a nosso componente de CardTemas. 23 | 24 | 1. Edite o seguinte arquivo: CardTemas.tsx 25 | 26 | 2. no arquivo de CardTemas.tsx coloque o código abaixo. 27 | 28 |
Código fonte do componente CardTemas.tsx 29 | 30 |

1.3 👣 Construindo a logica da pagina de ListaTemas e comunicando com api

31 | 32 | Agora vamos construir a nosso componente de ListaTemas. 33 | 34 | 1. Edite o seguinte arquivo: ListaTemas.tsx 35 | 36 | 2. no arquivo de ListaTemas.tsx coloque o código abaixo. 37 | 38 |
Código fonte do componente ListaTemas.tsx 39 | 40 | 3. Execute seu processo de compilação com `npm run start`. 41 | 42 | ``` 43 | yarn run dev 44 | ``` 45 | 46 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 47 | 48 | Acesse o componente temas 49 | 50 |
51 | 52 |
Código fonte do projeto 53 |
54 | 55 |
56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /05_react/20.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo o template do Componente Formulário Tema

2 | 3 | Os componentes de formulário de cadastro e edição são essenciais para qualquer aplicação web que coleta informações dos usuários. Esses componentes permitem que os usuários entrem com dados pessoais, informações de pagamento, endereços, preferências e outras informações relevantes para a aplicação. 4 | 5 | A importância desses componentes está relacionada à facilidade de uso e à experiência do usuário. Um formulário bem projetado e fácil de usar pode ajudar a aumentar a taxa de conversão, pois os usuários se sentirão mais confortáveis em compartilhar suas informações. 6 | 7 | Além disso, os formulários de cadastro e edição devem ser seguros e proteger as informações confidenciais dos usuários, como informações de pagamento ou senhas. 8 | 9 | Por fim, os componentes de formulário de cadastro e edição também podem ajudar a organizar as informações de maneira clara e fácil de entender, permitindo que os usuários revisem e editem suas informações com facilidade. Em resumo, esses componentes são vitais para o sucesso de qualquer aplicação web que lida com informações de usuários. 10 | 11 |

1.1 👣 Editando service

12 | 13 | A pasta "service" geralmente é usada para armazenar funções que se comunicam com uma API ou outras fontes de dados externas. Essas funções geralmente são usadas para obter ou atualizar dados da API e, em seguida, atualizar o estado dos componentes em conformidade. Essa pasta pode ser usada para separar a lógica de negócios da lógica de interface do usuário e tornar o código mais modular e fácil de manter. 14 | 15 | Agora vamos editar o nosso service. 16 | 17 | 1. Edite o seguinte arquivo: Service.ts 18 | 19 | 2. no arquivo de Service.ts coloque o código abaixo. 20 | 21 |
Código fonte do Service.tsx 22 | 23 |

1.2 👣 Editando NavBar.tsx

24 | 25 | 1. Edite o seguinte arquivo: NavBar.tsx 26 | 27 | 2. no arquivo de NavBar.tsx coloque o código abaixo. 28 | 29 |
Código fonte do componente NavBar.tsx 30 | 31 |

1.3 👣 Editando App.tsx

32 | 33 | 1. Edite o seguinte arquivo: App.tsx 34 | 35 | 2. no arquivo de App.tsx coloque o código abaixo. 36 | 37 |
Código fonte do componente App.tsx 38 | 39 |

1.5 👣 Construindo o componente de FormularioTema

40 | 41 | Agora vamos construir a nosso componente de formularioTema. 42 | 43 | 1. Construa uma pasta chamada formularioTema dentro da pasta temas de seu projeto. 44 | 45 | 2. construa os seguinte componente: FormularioTema.tsx 46 | 47 | 3. no arquivo de FormularioTema.tsx coloque o código abaixo. 48 | 49 |
Código fonte do componente FormularioTema.tsx 50 | 51 | 4. Execute seu processo de compilação com `npm run start`. 52 | 53 | ``` 54 | yarn run dev 55 | ``` 56 | 57 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 58 | 59 | Acesse a paginas cadastrarTema do navBar 60 | 61 |
62 | 63 | 64 | 65 |
66 | 67 |
68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /05_react/21.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a lógica do Componente Formulário Tema

2 | 3 | Os métodos HTTP POST e PUT são utilizados em uma API REST para criar e atualizar recursos, respectivamente. Portanto, é possível inferir que as funções "PostTemas" e "PutTemas" em uma API REST relacionam-se com a criação e atualização de temas (ou tópicos) na aplicação. 4 | 5 | O método POST (PostTemas) é utilizado para criar um novo recurso na aplicação, neste caso, um novo tema. Quando um cliente envia uma solicitação HTTP POST para a API REST com um novo tema em formato de dados no corpo da solicitação, a API irá processar essa solicitação e criar um novo registro do tema no banco de dados da aplicação. 6 | 7 | Já o método PUT (PutTemas) é utilizado para atualizar um recurso existente. Quando um cliente envia uma solicitação HTTP PUT para a API REST com um tema existente que precisa ser atualizado, a API irá procurar pelo registro correspondente no banco de dados e atualizá-lo com os novos dados fornecidos no corpo da solicitação. 8 | 9 |

1.3 👣 Construindo a logica da pagina de FormularioTema e comunicando com api

10 | 11 | Agora vamos construir a nosso componente de FormularioTema. 12 | 13 | 1. Edite o seguinte arquivo: FormularioTema.tsx 14 | 15 | 2. no arquivo de FormularioTema.tsx coloque o código abaixo. 16 | 17 |
Código fonte do componente FormularioTema.tsx 18 | 19 | 3. Execute seu processo de compilação com `npm run start`. 20 | 21 | ``` 22 | yarn run dev 23 | ``` 24 | 25 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 26 | 27 | Acesse o componente Cadastrar tema e cadastre um novo tema 28 | 29 |
30 | 31 |
32 | 33 |
34 | 35 | Edite esse tema que foi criado. 36 | 37 |
38 | 39 |
40 | 41 |
42 | 43 | 44 | 45 |

46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /05_react/22.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a template do Componente Deletar Tema

2 | 3 | Um componente de deletar tema em uma aplicação web é importante por várias razões: 4 | 5 | 1. Manutenção de dados: Um componente de deletar tema permite que os usuários removam temas antigos ou irrelevantes da aplicação, ajudando a manter os dados da aplicação atualizados e organizados. 6 | 2. Melhor experiência do usuário: Os usuários esperam ter controle sobre as informações que compartilham em uma aplicação, e um componente de deletar tema permite que eles tenham esse controle. Isso pode melhorar a experiência do usuário, já que eles se sentirão mais no controle de suas informações e poderão gerenciá-las de forma mais eficiente. 7 | 3. Proteção de dados: Em algumas situações, é importante excluir informações pessoais de usuários, especialmente em casos de solicitações de privacidade de dados. Nesse caso, um componente de deletar tema pode ser essencial para garantir que os dados sejam excluídos corretamente e que a privacidade do usuário seja protegida. 8 | 4. Conformidade com a lei: Dependendo da aplicação e do tipo de dados coletados, pode haver leis ou regulamentações que exijam a exclusão de dados de usuários. Um componente de deletar tema permite que a aplicação cumpra essas leis e regulamentações. 9 | 10 |

1.1 👣 Editando service

11 | 12 | A pasta "service" geralmente é usada para armazenar funções que se comunicam com uma API ou outras fontes de dados externas. Essas funções geralmente são usadas para obter ou atualizar dados da API e, em seguida, atualizar o estado dos componentes em conformidade. Essa pasta pode ser usada para separar a lógica de negócios da lógica de interface do usuário e tornar o código mais modular e fácil de manter. 13 | 14 | Agora vamos editar o nosso service. 15 | 16 | 1. Edite o seguinte arquivo: Service.ts 17 | 18 | 2. no arquivo de Service.ts coloque o código abaixo. 19 | 20 |
Código fonte do Service.tsx 21 | 22 |

1.3 👣 Editando App.tsx

23 | 24 | 1. Edite o seguinte arquivo: App.tsx 25 | 26 | 2. no arquivo de App.tsx coloque o código abaixo. 27 | 28 |
Código fonte do componente App.tsx 29 | 30 |

1.5 👣 Construindo o componente de deletarTema

31 | 32 | Agora vamos construir a nosso componente de DeletarTema. 33 | 34 | 1. Construa uma pasta chamada deletarTema dentro da pasta temas de seu projeto. 35 | 36 | 2. construa os seguinte componente: DeletarTema.tsx 37 | 38 | 3. no arquivo de DeletarTema.tsx coloque o código abaixo. 39 | 40 |
Código fonte do componente DeletarTema.tsx 41 | 42 | 4. Execute seu processo de compilação com `npm run start`. 43 | 44 | ``` 45 | yarn run dev 46 | ``` 47 | 48 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 49 | 50 | Acesse a paginas DeletarTema. 51 | 52 |
53 | 54 |
Código fonte do projeto 55 | 56 | ​ 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /05_react/23.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pesssoal: Construindo a lógica do Componente Deletar Tema

2 | 3 | A função de um método HTTP DELETE em uma API REST é remover um recurso específico do servidor. Portanto, um "deleteTema" em uma API REST seria utilizado para excluir um registro de tema específico da aplicação. 4 | 5 | Quando um cliente envia uma solicitação HTTP DELETE para a API REST com um ID de tema, a API verifica se esse ID corresponde a um registro de tema existente no banco de dados. Se houver um registro correspondente, a API remove esse registro do banco de dados e retorna uma resposta de sucesso para o cliente. 6 | 7 | O "deleteTema" é importante em uma API REST porque permite que os usuários removam recursos que já não são mais relevantes ou necessários. Além disso, a exclusão de registros de temas antigos pode ajudar a manter o banco de dados da aplicação atualizado e organizado. 8 | 9 | É importante notar que o método HTTP DELETE deve ser usado com cuidado, já que a exclusão de um registro é uma ação irreversível e pode ter impactos em outras partes da aplicação. Portanto, é recomendável que a exclusão de registros seja feita com cautela e que os usuários sejam informados sobre as consequências da exclusão antes de confirmar a ação. 10 | 11 |

1.3 👣 Construindo a logica da pagina de DeletarTema e comunicando com api

12 | 13 | Agora vamos construir a nosso componente de DeletarTema. 14 | 15 | 1. Edite o seguinte arquivo: DeletarTema.tsx 16 | 17 | 2. no arquivo de DeletarTema.tsx coloque o código abaixo. 18 | 19 |
Código fonte do componente DeletarTema.tsx 20 | 21 | 3. Execute seu processo de compilação com `npm run start`. 22 | 23 | ``` 24 | yarn run dev 25 | ``` 26 | 27 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 28 | 29 | Acesse o componente DeletarTema e delete um tema 30 | 31 |
32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 |

40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /05_react/24.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo o template do Componente Lista Postagem

2 | 3 | Um componente de lista de postagens é importante em uma aplicação web porque permite que os usuários visualizem e acessem facilmente conteúdo relevante. Esse componente geralmente é usado para exibir uma lista de postagens em um blog, fórum, rede social ou qualquer outra aplicação que tenha conteúdo atualizado regularmente. 4 | 5 | Com um componente de lista de postagens, os usuários podem navegar facilmente pelo conteúdo do aplicativo, encontrar postagens relevantes com base em tópicos ou categorias específicas e acessar rapidamente informações importantes. 6 | 7 | Além disso, um componente de lista de postagens também pode ajudar a aumentar o engajamento do usuário, permitindo que os usuários comentem e interajam com as postagens, dando feedback ou compartilhando suas próprias experiências e opiniões. 8 | 9 |

1.1 👣 Construindo o componente de CardPostagem

10 | 11 | Agora vamos construir a nosso componente de CardPostagem. 12 | 13 | 1. Construa uma pasta chamada postagens dentro da pasta components de seu projeto. 14 | 15 | 2. Construa uma pasta chamada cardPostagem dentro da pasta postagens de seu projeto. 16 | 17 | 3. construa os seguinte componente: CardPostagem.tsx 18 | 19 | 4. no arquivo de CardPostagem.tsx coloque o código abaixo. 20 | 21 |
Código fonte do componente CardPostagem.tsx 22 | 23 |

1.2 👣 Construindo o componente de ListaPostagens

24 | 25 | Agora vamos construir a nosso componente de ListaPostagens. 26 | 27 | 1. Construa uma pasta chamada listaPostagens dentro da pasta postagens de seu projeto. 28 | 29 | 2. construa os seguinte componente: ListaPostagens.tsx 30 | 31 | 3. no arquivo de ListaPostagens.tsx coloque o código abaixo. 32 | 33 |
Código fonte do componente ListaPostagens.tsx 34 | 35 |

1.3 👣 Editando NavBar.tsx

36 | 37 | 1. Edite o seguinte arquivo: NavBar.tsx 38 | 39 | 1. no arquivo de NavBar.tsx coloque o código abaixo. 40 | 41 |
Código fonte do NavBar.tsx 42 | 43 |

1.4 👣 Editando App.tsx

44 | 45 | 1. Edite o seguinte arquivo: App.tsx 46 | 47 | 1. no arquivo de App.tsx coloque o código abaixo. 48 | 49 |
Código fonte do App.tsx 50 | 51 |

1.5 👣 Editando Home.tsx

52 | 53 | 1. Edite o seguinte arquivo: Home.tsx 54 | 55 | 2. no arquivo de Home.tsx coloque o código abaixo. 56 | 57 |
Código fonte do componente Home.tsx 58 | 59 | 1. Execute seu processo de compilação com `npm run start`. 60 | 61 | ``` 62 | yarn run dev 63 | ``` 64 | 65 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 66 | 67 | Acesse a pagina home 68 | 69 |
70 | 71 | 72 | 73 |
74 | 75 |
76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /05_react/25.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a lógica do Componente Lista Postagens

2 | 3 | A função de um `getAll` postagens em uma API REST é retornar uma lista de todas as postagens disponíveis na aplicação ou sistema. 4 | 5 | Essa operação é utilizada quando se deseja listar todas as postagens cadastradas na base de dados da aplicação ou sistema. A lista pode ser retornada em ordem alfabética, por data de criação ou qualquer outra ordem definida pelo desenvolvedor da API. 6 | 7 | Essa operação é útil para que o usuário da API possa obter uma visão geral das postagens disponíveis, e posteriormente realizar operações específicas em cada postagem, como adicionar, atualizar ou remover. 8 | 9 | O retorno dessa lista pode ser em formato JSON, XML ou outro formato definido pela API. Além disso, é importante que a API possua um sistema de paginação para lidar com listas grandes de postagens e garantir uma melhor performance e eficiência na comunicação entre o cliente e o servidor. 10 | 11 |

1.1 👣 Cadastrando uma nova Postagem

12 | 13 | Agora vamos cadastrar um nova postagem atraves da sua api em deploy pelo swagger. 14 | 15 | 1. Entre no swagger em deploy de sua api 16 | 2. Em Post Postagem cadastre um nova postagem 17 | 18 |
19 | 20 |

1.2 👣 Construindo a logica do componente CardPostagem

21 | 22 | Agora vamos construir a nosso componente de CardPostagem. 23 | 24 | 1. Edite o seguinte arquivo: CardPostagem.tsx 25 | 26 | 2. no arquivo de CardPostagem.tsx coloque o código abaixo. 27 | 28 |
Código fonte do componente CardPostagem.tsx 29 | 30 |

1.3 👣 Construindo a logica da pagina de ListaPostagens e comunicando com api

31 | 32 | Agora vamos construir a nosso componente de ListaPostagens. 33 | 34 | 1. Edite o seguinte arquivo: ListaPostagens.tsx 35 | 36 | 2. no arquivo de ListaPostagens.tsx coloque o código abaixo. 37 | 38 |
Código fonte do componente ListaPostagens.tsx 39 | 40 | 3. Execute seu processo de compilação com `npm run start`. 41 | 42 | ``` 43 | yarn run dev 44 | ``` 45 | 46 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 47 | 48 | Acesse o componente home, 49 | 50 |
51 | 52 | 53 | 54 |
55 | 56 |
57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /05_react/26.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a template do Componente Formulario Postagem

2 | 3 | Os componentes de formulário de cadastro e edição são essenciais para qualquer aplicação web que coleta informações dos usuários. Esses componentes permitem que os usuários entrem com dados pessoais, informações de pagamento, endereços, preferências e outras informações relevantes para a aplicação. 4 | 5 | A importância desses componentes está relacionada à facilidade de uso e à experiência do usuário. Um formulário bem projetado e fácil de usar pode ajudar a aumentar a taxa de conversão, pois os usuários se sentirão mais confortáveis em compartilhar suas informações. 6 | 7 | Além disso, os formulários de cadastro e edição devem ser seguros e proteger as informações confidenciais dos usuários, como informações de pagamento ou senhas. 8 | 9 | Por fim, os componentes de formulário de cadastro e edição também podem ajudar a organizar as informações de maneira clara e fácil de entender, permitindo que os usuários revisem e editem suas informações com facilidade. Em resumo, esses componentes são vitais para o sucesso de qualquer aplicação web que lida com informações de usuários. 10 | 11 |

1.2 👣 Editando NavBar.tsx

12 | 13 | 1. Edite o seguinte arquivo: NavBar.tsx 14 | 15 | 2. no arquivo de NavBar.tsx coloque o código abaixo. 16 | 17 |
Código fonte do componente NavBar.tsx 18 | 19 |

1.3 👣 Editando App.tsx

20 | 21 | 1. Edite o seguinte arquivo: App.tsx 22 | 23 | 2. no arquivo de App.tsx coloque o código abaixo. 24 | 25 |
Código fonte do componente App.tsx 26 | 27 |

1.5 👣 Construindo o componente de FormularioPostagem

28 | 29 | Agora vamos construir a nosso componente de formularioPostagem. 30 | 31 | 1. Construa uma pasta chamada formularioPostagem dentro da pasta postagens de seu projeto. 32 | 33 | 2. construa os seguinte componente: FormularioPostagem.tsx 34 | 35 | 3. no arquivo de FormularioPostagem.tsx coloque o código abaixo. 36 | 37 |
Código fonte do componente FormularioPostagem.tsx 38 | 39 |

1.5 👣 Construindo o componente de ModalPostagem

40 | 41 | Em aplicações web, a palavra "modal" é frequentemente usada para descrever um tipo específico de elemento de interface do usuário que é exibido em cima do conteúdo principal da página para fornecer informações adicionais ou solicitar alguma ação do usuário. 42 | 43 | Um modal é geralmente uma janela ou diálogo que aparece na frente do conteúdo principal da página e escurece ou desfoca o restante da interface para indicar que o foco deve estar na janela modal. Eles são frequentemente usados para apresentar informações importantes, como notificações, mensagens de erro ou formulários de entrada de dados. 44 | 45 | O objetivo de um modal é chamar a atenção do usuário para a tarefa em questão e impedir que o usuário interaja com o conteúdo principal da página até que a tarefa seja concluída ou o modal seja fechado. Modal geralmente possuem um botão de fechar, permitindo que o usuário retorne ao conteúdo principal da página. 46 | 47 | Agora vamos construir a nosso componente de ModalPostagem. 48 | 49 | 1. Construa uma pasta chamada modalPostagem dentro da pasta postagens de seu projeto. 50 | 51 | 2. construa os seguinte componente: ModalPostagem.css 52 | 53 | 3. no arquivo de ModalPostagem.csscoloque o código abaixo. 54 | 55 |
Código fonte do componente ModalPostagem.css 56 | 57 | 4. construa os seguinte componente: ModalPostagem.tsx 58 | 59 | 5. no arquivo de ModalPostagem.tsx coloque o código abaixo. 60 | 61 |
Código fonte do componente ModalPostagem.tsx 62 | 63 |

1.5 👣 editando o componente de Home

64 | 65 | 1. Edite o seguinte arquivo: Home.tsx 66 | 67 | 2. no arquivo de Home.tsx coloque o código abaixo. 68 | 69 |
Código fonte do componente Home.tsx 70 | 71 | 3. Execute seu processo de compilação com `npm run start`. 72 | 73 | ``` 74 | yarn run dev 75 | ``` 76 | 77 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 78 | 79 | Acesse a paginas home e clique no botão cadastrar postagem 80 | 81 |
82 | 83 | 84 | 85 |
86 | 87 |
88 | 89 | 90 | -------------------------------------------------------------------------------- /05_react/27.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a lógica do Componente Formulário Postagem

2 | 3 | Os métodos HTTP POST e PUT são utilizados em uma API REST para criar e atualizar recursos, respectivamente. Portanto, é possível inferir que as funções "PostPostagem" e "PutPostagem" em uma API REST relacionam-se com a criação e atualização de temas (ou tópicos) na aplicação. 4 | 5 | O método POST (PostPostagem) é utilizado para criar um novo recurso na aplicação, neste caso, um novo tema. Quando um cliente envia uma solicitação HTTP POST para a API REST com um novo tema em formato de dados no corpo da solicitação, a API irá processar essa solicitação e criar um novo registro do tema no banco de dados da aplicação. 6 | 7 | Já o método PUT (PutPostagem) é utilizado para atualizar um recurso existente. Quando um cliente envia uma solicitação HTTP PUT para a API REST com um tema existente que precisa ser atualizado, a API irá procurar pelo registro correspondente no banco de dados e atualizá-lo com os novos dados fornecidos no corpo da solicitação. 8 | 9 |

1.3 👣 Construindo a logica da pagina de FormularioPostagem e comunicando com api

10 | 11 | Agora vamos construir a nosso componente de FormularioPostagem. 12 | 13 | 1. Edite o seguinte arquivo: FormularioPostagem.tsx 14 | 15 | 2. no arquivo de FormularioPostagem.tsx coloque o código abaixo. 16 | 17 |
Código fonte do componente FormularioPostagem.tsx 18 | 19 | 3. Execute seu processo de compilação com `npm run start`. 20 | 21 | ``` 22 | yarn run dev 23 | ``` 24 | 25 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 26 | 27 | Acesse o componente Cadastrar tema e cadastre um novo tema 28 | 29 |
30 | 31 |
32 | 33 |
34 | 35 | Edite esse tema que foi criado. 36 | 37 |
38 | 39 |
40 | 41 |
42 | 43 | 44 | 45 |
46 | 47 |
48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /05_react/28.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a template do Componente Deletar Postagem

2 | 3 | Um componente de deletar Postagem em uma aplicação web é importante por várias razões: 4 | 5 | 1. Manutenção de dados: Um componente de deletar Postagem permite que os usuários removam temas antigos ou irrelevantes da aplicação, ajudando a manter os dados da aplicação atualizados e organizados. 6 | 2. Melhor experiência do usuário: Os usuários esperam ter controle sobre as informações que compartilham em uma aplicação, e um componente de deletar Postagem permite que eles tenham esse controle. Isso pode melhorar a experiência do usuário, já que eles se sentirão mais no controle de suas informações e poderão gerenciá-las de forma mais eficiente. 7 | 3. Proteção de dados: Em algumas situações, é importante excluir informações pessoais de usuários, especialmente em casos de solicitações de privacidade de dados. Nesse caso, um componente de deletar tema pode ser essencial para garantir que os dados sejam excluídos corretamente e que a privacidade do usuário seja protegida. 8 | 9 |

1.3 👣 Editando App.tsx

10 | 11 | 1. Edite o seguinte arquivo: App.tsx 12 | 13 | 2. no arquivo de App.tsx coloque o código abaixo. 14 | 15 |
Código fonte do componente App.tsx 16 | 17 |

1.5 👣 Construindo o componente de deletarPostagem

18 | 19 | Agora vamos construir a nosso componente de DeletarPostagem. 20 | 21 | 1. Construa uma pasta chamada deletarPostagem dentro da pasta postagem de seu projeto. 22 | 23 | 2. construa os seguinte componente: DeletarPostagem.tsx 24 | 25 | 3. no arquivo de DeletarPostagem.tsx coloque o código abaixo. 26 | 27 |
Código fonte do componente DeletarPostagem.tsx 28 | 29 | 4. Execute seu processo de compilação com `npm run start`. 30 | 31 | ``` 32 | yarn run dev 33 | ``` 34 | 35 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 36 | 37 | Acesse a paginas DeletarPostagem. 38 | 39 |
40 | 41 | 42 | 43 |
44 | 45 |
46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /05_react/29.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo a lógica do Componente Deletar Postagem

2 | 3 | A função de um método HTTP DELETE em uma API REST é remover um recurso específico do servidor. Portanto, um "deleteTema" em uma API REST seria utilizado para excluir um registro de tema específico da aplicação. 4 | 5 | Quando um cliente envia uma solicitação HTTP DELETE para a API REST com um ID de tema, a API verifica se esse ID corresponde a um registro de tema existente no banco de dados. Se houver um registro correspondente, a API remove esse registro do banco de dados e retorna uma resposta de sucesso para o cliente. 6 | 7 | O "deletePostagem" é importante em uma API REST porque permite que os usuários removam recursos que já não são mais relevantes ou necessários. Além disso, a exclusão de registros de temas antigos pode ajudar a manter o banco de dados da aplicação atualizado e organizado. 8 | 9 | É importante notar que o método HTTP DELETE deve ser usado com cuidado, já que a exclusão de um registro é uma ação irreversível e pode ter impactos em outras partes da aplicação. Portanto, é recomendável que a exclusão de registros seja feita com cautela e que os usuários sejam informados sobre as consequências da exclusão antes de confirmar a ação. 10 | 11 |

1.3 👣 Construindo a logica da pagina de DeletarPostagem e comunicando com api

12 | 13 | Agora vamos construir a nosso componente de DeletarPostagem. 14 | 15 | 1. Edite o seguinte arquivo: DeletarPostagem.tsx 16 | 17 | 2. no arquivo de DeletarPostagem.tsx coloque o código abaixo. 18 | 19 |
Código fonte do componente DeletarPostagem.tsx 20 | 21 | 3. Execute seu processo de compilação com `npm run start`. 22 | 23 | ``` 24 | yarn run dev 25 | ``` 26 | 27 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 28 | 29 | Acesse o componente DeletarTema e delete um tema 30 | 31 |
32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 |
40 | 41 |
42 | 43 | 44 | -------------------------------------------------------------------------------- /05_react/30.md: -------------------------------------------------------------------------------- 1 | 

Projeto Blog Pessoal: Construindo o componente Perfil

2 | 3 | Um componente perfil de usuário em uma aplicação web é um recurso que permite que os usuários criem e gerenciem suas informações pessoais, configurações e preferências na plataforma. 4 | 5 | Este recurso geralmente inclui uma página de perfil que exibe as informações do usuário, como nome, endereço de e-mail, foto de perfil, entre outros dados relevantes. Além disso, o componente perfil de usuário pode incluir recursos para edição dessas informações, bem como para gerenciar notificações, privacidade, assinaturas e outras funcionalidades relacionadas. 6 | 7 | A importância do componente perfil de usuário em uma aplicação web é que ele permite que os usuários personalizem sua experiência na plataforma e gerenciem suas informações de maneira segura e eficiente. Com um perfil bem desenvolvido, os usuários podem controlar o que é exibido em suas páginas de perfil e como eles interagem com a aplicação, o que pode melhorar sua satisfação e fidelidade à plataforma. 8 | 9 | Além disso, o componente perfil de usuário é fundamental para a segurança da plataforma, pois ajuda a garantir que as informações pessoais dos usuários sejam armazenadas e gerenciadas de forma adequada. A capacidade de gerenciar as informações da conta do usuário também pode ajudar a evitar problemas de segurança, como o roubo de identidade ou o uso não autorizado de informações confidenciais. 10 | 11 |

1.1 👣 Construindo o componente de Perfil

12 | 13 | Agora vamos construir a nosso componente de Perfil. 14 | 15 | 1. Construa uma pasta chamada perfil dentro da pasta pages de seu projeto. 16 | 17 | 2. construa os seguinte componente: Perfil.tsx 18 | 19 | 3. no arquivo de Perfil.tsx coloque o código abaixo. 20 | 21 |
Código fonte do componente Perfil.tsx 22 | 23 |

1.2 👣 Editando NavBar.tsx

24 | 25 | 1. Edite o seguinte arquivo: NavBar.tsx 26 | 27 | 2. no arquivo de NavBar.tsx coloque o código abaixo. 28 | 29 |
Código fonte do componente NavBar.tsx 30 | 31 |

1.3 👣 Editando App.tsx

32 | 33 | 1. Edite o seguinte arquivo: App.tsx 34 | 35 | 2. no arquivo de App.tsx coloque o código abaixo. 36 | 37 |
Código fonte do componente App.tsx 38 | 39 | 3. Execute seu processo de compilação com `npm run start`. 40 | 41 | ``` 42 | yarn run dev 43 | ``` 44 | 45 | Em seguida, abra seu navegador e visite `http://localhost:5173/`. 46 | 47 | Acesse a paginas temas do navBar 48 | 49 |
50 | 51 | 52 | 53 |
54 | 55 |
56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /05_react/32.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/conteudoGeneration/cookbook_csharp/83e8eade8a97ed75746e5530d181eaedd826f974/05_react/32.pdf -------------------------------------------------------------------------------- /05_react/33.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/conteudoGeneration/cookbook_csharp/83e8eade8a97ed75746e5530d181eaedd826f974/05_react/33.pdf -------------------------------------------------------------------------------- /05_react/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Bootcamp - C# Full Stack

5 | 6 |
7 | 8 |

Frontend com React

9 | 10 | 11 | 1. Introdução ao Desenvolvimento web com o React 12 | 2. Preparando o ambiente para trabalhar com o React 13 | 3. Criando um projeto React pelo Vite 14 | 4. Estilizando componentes React com CSS 15 | 5. React - Props 16 | 6. React: Bibliotecas de estilização 17 | 7. React: Estilização com Flexbox, Grid e Tailwind 18 | 8. Criando Rotas com o React Router Dom 19 | 9. Projeto Blog Pessoal: Componentes NavBar, Footer e Home 20 | 10. Projeto Blog Pessoal: Criando as Rotas 21 | 11. Axios: Biblioteca de comunicação HTTP 22 | 12. Context API: Estado global da aplicação React 23 | 13. Arquitetura de um projeto React 24 | 14. Projeto Blog Pessoal: Construindo Model, Context e Service do Cadastro de Usuários 25 | 15. Projeto Blog Pessoal: Cadastro do Usuario - Template/Lógica/Teste 26 | 16. Projeto Blog Pessoal: Construindo a template do Componente Login 27 | 17. Projeto Blog Pessoal: Construindo a lógica do Componente Login 28 | 18. Projeto Blog Pessoal: Construindo a template do Componente Lista Temas 29 | 19. Projeto Blog Pessoal: Construindo a lógica do Componente Lista Temas 30 | 20. Projeto Blog Pessoal: Construindo o template do Componente Formulário Tema 31 | 21. Projeto Blog Pessoal: Construindo a lógica do Componente Formulário Tema 32 | 22. Projeto Blog Pessoal: Construindo a template do Componente Deletar Tema 33 | 23. Projeto Blog Pesssoal: Construindo a lógica do Componente Deletar Tema 34 | 24. Projeto Blog Pessoal: Construindo a template do Componente Lista Postagem 35 | 25. Projeto Blog Pessoal: Construindo a lógica do Componente Lista Postagens 36 | 26. Projeto Blog Pessoal: Construindo a template do Componente Formulário Postagem 37 | 27. Projeto Blog Pessoal: Construindo a lógica do Componente Formulário Postagem 38 | 28. Projeto Blog Pessoal: Construindo a template do Componente Deletar Postagem 39 | 29. Projeto Blog Pessoal: Construindo a lógica do Componente Deletar Postagem 40 | 30. Projeto Blog Pessoal: Construindo o Componente Perfil 41 | 31. Projeto Blog Pessoal: Construindo alerts personalizado com react-toastify 42 | 32. Projeto Blog Pessoal: Deploy no Vercel 43 | 33. Projeto Blog Pessoal: Deploy no Netlify 44 | 45 |

46 | 47 |
48 |
Home
49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Bootcamp - C# Full Stack

5 | 6 |

Conteúdos

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
Preparação do Ambiente
Programação de Computadores com C#
Introdução ao Protocolo HTTP
Banco de dados com SQL Server
Backend com ASP.NET
Frontend com React
34 | 35 | --------------------------------------------------------------------------------