Overview técnico básico sobre o Twitter ᴾᵃʳᵒᵈʸ para colaboração com a manutenção
"E a pomba voltou a ele à tarde; e eis, arrancada, uma folha de oliveira no seu bico; e conheceu Noé que as águas tinham minguado de sobre a terra." - Gênesis 8:11
Overview técnico básico sobre o Twitter ᴾᵃʳᵒᵈʸ para colaboração com a manutenção
No vídeo, António Conselheiro e Wilhelm von Freiheitsberg batem um papo assíncrono passando pelos principais conceitos que fundamentam a arquitetura do Twitter ᴾᵃʳᵒᵈʸ
Nesta conversa você verá: -> TypeScript -> Angular -> Docker/Devcontainer -> Teoria Geral de Sistemas -> Single Responsibility Principle (SRP) -> NOSTR com nostr-tools
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Vídeo rápido sobre como configurar o swagger no nestjs em um workspace npx/nx, ou seja, não usa o tradicional nestjs.json, mas um arquivo project.json.
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/commit/d42d4aaaa7e65eb9e74d6dd4f0a624de9a54b40b
Documentações:
Maiores detalhes sobre o swagger: https://swagger.io/docs/
Exemplo online de documentação swagger: https://petstore.swagger.io/
Issue onde encontrei a solução de como aplicar o plugin do swagger do nestjs nas configurações project.json: https://github.com/nrwl/nx/issues/4135
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/tree/c0b4e991906f4c68f4d96fee627c71b385f6e463
VERSÕES:
node: 18.12.1
npm: 9.2.0
GLOSSÁRIO PARA NOOBS
Client: front-end;
Server: back-end;
TypeScript (taipescripiti): superset do javascript, linguagem de programação que ao invés de compilar em binário ele se transpila em uma outra linguagem (javascript);
CLI (cialai): command lint interface, ou seja, interagir com um programa via linha de comando;
GUI: graphic user interface, ou seja, interfaces gráficas para integração com o programa;
stack (estequi): especialidade;
plugin: script que complementa um software já instalado;
Monorepo: repositório que contém mais de uma aplicação e/ou biblioteca;
JSON (dieison): javascript object notation, grupo de dados organizados no formato padrão do javascript;
Node: programa através do qual se roda javascript fora do browser, com acesso a recursos da máquina;
NPM: node package manager, software de linha de comando que te permite baixar bibliotecas javascript de um repositório central (https://www.npmjs.com/) ou então de um repositório privado de artefatos;
NVM: node version manager, software que permite alternar entre versões do npm;
JPA (jotapea): java persistence API, especificação que propõe um padrão sobre como as bibliotecas que implementam abstração do banco limitando sua manipulação para que seja somente através da modelagem;
TypeORM (taipeoerreme): implementação typescript aproximada da proposta do JPA;
DOCUMENTAÇÕES:
npx/nx: https://nx.dev/getting-started/intro
angular: https://angular.io/docs
nestjs: https://docs.nestjs.com/
typescript: https://www.typescriptlang.org/docs/handbook/intro.html
nvm: https://github.com/nvm-sh/nvm/blob/master/README.md
typeorm: https://typeorm.io/
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Documentações apresentadas no vídeo:
https://docs.docker.com/engine/install/ubuntu/
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04
https://docs.docker.com/compose/install/
https://docs.docker.com/engine/install/linux-postinstall/
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
O fato de usarmos uma mesma linguagem em uma aplicação client-server nos permite compartilhar código nas duas camadas, diferente do que é comum hoje em dia (ter um especialista para o back-end e um de outra tecnologia para o front-end).
Neste vídeo irei mostrar como montar a biblioteca de modelos compartilhados usando angular para o client e nestjs para o server, sendo eles frameworks irmãos, uma vez que o nestjs se baseia no desenho arquitetural do angular.
Ainda neste vídeo poderá se observar como expor suas apis em nestjs, assim como um overview sobre o sistema de rotas do angular.
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/commit/dfa684c80d40b5acc740863ffc166f02aeb1b1e1
Documentações:
npx/nx: https://nx.dev/getting-started/intro
npx/nx js lib: https://nx.dev/packages/js
angular: https://angular.io/docs
angular RouterModule: https://angular.io/api/router/RouterModule
nestjs: https://docs.nestjs.com/controllers
Divisa:
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Título:
8/[2.3] - Revisão das configurações do ambiente de desenvolvimento e workaroud para problema gerado entre a nova atualização do docker e o devcontainer
Descrição:
Neste vídeo dou uma solução temporaria para o problema gerado no devcontainer com a atualização do build do docker na atualização da versão 23.
Se você estiver muito no futuro, pode ser que o pessoal do docker/devcontainer já tenham resolvido esse problema e esse workaround não seja necessário.
Fora isso, neste vídeo eu unifico os arquivos docker-compose.yml de nosso projeto com o objetivo de dar espaço para que eu configure um mysql de desenvolvimento para este projeto, algo que se fosse feito num arquivo docker-compose.yml compartilhado com a composição do devcontainer poderia causar alguns problemas, já que subo e desço o devcontainer, assim como pode ocorrer de eu rebuilda-lo.
Release Notes da atualização do Docker para a versão 23:
https://docs.docker.com/engine/release-notes/23.0/
Erro que foi lançado:
[Container] Fail to build a devcontainer: ERROR: failed to receive status: rpc error: code = Unavailable desc = error reading from server: EOF
Solução aplicada para ubuntu foi incluir "export DOCKER_BUILDKIT=0" no arquivo ~/.profile, indicando ao docker que o serviço de build legado deve ser utilizado ao invés do buildx.
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/tree/0af444e8aa330cc3c957aede681d4ffc2b9037e3
DOCUMENTAÇÕES:
https://www.npmjs.com/package/dotenv
https://github.com/chihab/ngx-env
https://www.npmjs.com/package/@ngx-env/builder
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Neste vídeo apresento como utilizar as bibliotecas class-transform e class-validator, amplamente usadas no mundo typescript e adotadas pelo framewoek nestjs como padrão para validação.
No vídeo apresento desde o uso prático das bibliotecas nos modelos até como fazer a instalação no nestjs e uma implementação no front-end para centralizar as validações.
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/commit/47859790b6efd29ddd00ef66e1607f7b70e9b321
Documentações:
Class validator: https://github.com/typestack/class-validator
Class transform: https://github.com/typestack/class-transformer
Nestjs: https://docs.nestjs.com/techniques/validation
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Os linters são ferramentas para promover algum nível de governança ao código em construção, um script que passa por todo o código em tempo de desenvolvimento vai sinalizando aos programadores quais pontos de implementação divergem das expectativas configuradas naquele software.
Neste vídeo customizo e configuro o ESLint e ativo o modo strict do TypeScript para essa aplicação.
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/tree/075834cd564b4bc2cfef847337579f641c866c37
Documentações:
ESLint:
https://eslint.org/docs/latest/user-guide/getting-started
Angular ESLint
https://github.com/angular-eslint/angular-eslint
http://codelyzer.com/rules/
Typescript Eslint
https://typescript-eslint.io/getting-started/
https://typescript-eslint.io/rules/
Documentação da regra ban:
https://github.com/remithomas/eslint-plugin-ban
"Se algum de vós tem falta de sabedoria, roga a Deus, que a todos concede liberalmente, com grande alegria." Tiago 1:5
Neste vídeo faço um overview prático de TypeOrm sendo usado com Nestjs em um workspace npx/nx, seguindo a construção da aplicação desta playlist. Desculpem pelo áudio estourado, no final o microfone ficou baixo.
Link do repositório no último commit apresentado no vídeo:
https://github.com/antonioconselheiro/bater-ponto/commit/3439c855c2bfa80b02a1c4eb20fa0cab191d9da7
Documentações:
Container mysql: https://hub.docker.com/_/mysql
TypeORM: https://typeorm.io/
TypeORM no NestJs: https://docs.nestjs.com/recipes/sql-typeorm