-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: adicionando documentação e readme para o projeto. (#13)
* docs: adicionando documentação e readme para o projeto. * chore: add auto assign pipeline
- Loading branch information
Showing
11 changed files
with
382 additions
and
2,247 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
name: Auto Assign Issue | ||
|
||
on: | ||
issue_comment: | ||
types: [created] | ||
|
||
jobs: | ||
auto-assign: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Check for "EU QUERO!!!" comment | ||
if: contains(github.event.comment.body, 'EU QUERO!!!') | ||
run: | | ||
# Extract the commenter's username | ||
commenter=$(jq -r .comment.user.login $GITHUB_EVENT_PATH) | ||
# Add the commenter as an assignee to the issue using a Personal Access Token | ||
echo "Assigning $commenter to the issue..." | ||
curl -X POST -H "Authorization: token ${{ secrets.PERSONAL_ACCESS_TOKEN }}" \ | ||
-d "{\"assignees\": [\"$commenter\"]}" \ | ||
"https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/assignees" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,205 @@ | ||
# octopost-backend | ||
# Backend do Octopost | ||
|
||
## Nomenclatura | ||
[](https://discord.gg/devhatt) | ||
[](https://twitter.com/DevHatt) | ||
[](https://nodejs.org/) | ||
[](https://www.typescriptlang.org/) | ||
[](https://vitest.dev/) | ||
[](https://github.com/devhatt/octopost/pulse) | ||
[](https://github.com/devhatt/octopost/contributors) | ||
[](https://GitHub.com/devhatt/octopost/stargazers/) | ||
|
||
### Verbos | ||
[**Junte-se a nós na DevHatt e transforme sua paixão por tecnologia em impacto real!**](https://discord.gg/devhatt) | ||
|
||
FindById - Buscar um por Id | ||
FindAll - Buscar todos | ||
Create - Criar | ||
Remove - Remover | ||
Update - Atualizar | ||
## Índice | ||
|
||
- [Projeto](#projeto) | ||
- [Como rodar](#como-rodar) | ||
- [Tirar Dúvidas](#tirar-dúvidas) | ||
- [Como Contribuir](#como-contribuir) | ||
- [Regras](#regras) | ||
- [Redes Sociais](#redes-sociais) | ||
|
||
## Projeto | ||
|
||
Bem-vindo ao OctoPost! O OctoPost é um aplicativo de redes sociais único que permite aos usuários fazerem publicações em | ||
várias plataformas de mídia social, tudo em uma única interface unificada. Este documento README irá guiá-lo | ||
através das informações básicas sobre o projeto, seu propósito e como contribuir de forma eficaz. | ||
|
||
## Como rodar | ||
|
||
Para rodar o projeto, você precisará ter: | ||
|
||
- [PNPM](https://pnpm.io/) | ||
- [Docker](https://www.docker.com/products/docker-desktop/) | ||
- [Git](https://git-scm.com/) | ||
- [Node.js](https://nodejs.org/) | ||
|
||
É necessário criar uma cópia deste repositório com o git para a sua máquina local. | ||
Para fazer isso, siga | ||
as [instruções no site do GitHub](https://docs.github.com/pt/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo). | ||
|
||
Após clonar o projeto, acesse a pasta raiz do projeto e execute o comando: | ||
|
||
```bash | ||
docker-compose up -d | ||
``` | ||
|
||
Esse comando irá criar um banco de dados PostgresSQL na porta 5432 utilizando um container Docker. | ||
Assim que o banco de dados estiver funcionando, você deve configurar as variáveis de ambiente | ||
apontando `PORT`, `HOSTNAME` e `DATABASE_URL` para o seu ambiente local. | ||
|
||
```env | ||
PORT = 3000 | ||
HOSTNAME = localhost | ||
DATABASE_URL = postgres://postgres:password@localhost:5432/octopost | ||
``` | ||
|
||
Com o banco de dados configurado, instale as dependências do projeto: | ||
|
||
```bash | ||
pnpm install | ||
``` | ||
|
||
E rode as migrations para criar as tabelas no banco de dados: | ||
|
||
```bash | ||
pnpm run migrate | ||
``` | ||
|
||
Inicialize o projeto em modo desenvolvimento com o comando: | ||
|
||
```bash | ||
pnpm run dev | ||
``` | ||
|
||
## Tirar Dúvidas | ||
|
||
- **Canal de Help no Discord:** Para dúvidas sobre o projeto utilize o [LINK O CHAT do projeto] | ||
- **Salas Interativas:** Prefere uma interação mais direta? Junte-se a qualquer sala aberta no Discord e converse com | ||
outros membros que podem ajudar com suas dúvidas em tempo real. | ||
- **Plantões de Dúvidas:** Organizamos sessões especiais em horários determinados onde mentores estão disponíveis para | ||
ajudar com questões mais complexas. | ||
- **One-a-One:** Você também pode marcar um 1:1 com o mentor do projeto. | ||
- **Daily:** Se a sua dúvida for algo rápido, você também pode tirar suas dúvidas durante a daily. | ||
|
||
## Como Contribuir | ||
|
||
Para contribuir no backend do octopost, será necessário que você pegue uma tarefa na aba de issues. | ||
|
||
Após pegar uma issue, crie uma branch a partir da branch master para trabalhar nas suas alterações: | ||
|
||
```bash | ||
git checkout -b issue-[numero-da-issue] | ||
``` | ||
|
||
```bash | ||
git push upstream issue-[numero-da-issue] | ||
``` | ||
|
||
Abra um Pull Request pelo seu fork para o repositório do octopost na branch master, descrevendo suas alterações e | ||
fornecendo contexto sobre o que foi feito. | ||
|
||
A equipe de mantenedores do projeto irá revisar o seu PR. Esteja disposto a fazer ajustes se necessário. Após a revisão | ||
bem-sucedida, suas alterações serão mescladas à branch principal. Seu PR será fechado. | ||
|
||
## Diretrizes de Contribuição | ||
|
||
- **Estilo de Código: | ||
** [Siga as convenções de estilo de código existentes no projeto.](https://github.com/DevHatt/octopost-backend/blob/master/docs/STYLEGUIDE.md) | ||
- **Documentação:** Sempre mantenha a documentação `/openapi` atualizada, refletindo todas as alterações feitas em | ||
código. | ||
- **Testes:** Certifique-se de testar as suas alterações, cobrindo 100% das linhas de testes modificadas, e se | ||
necessário adicione novos testes ou modifique os existentes. | ||
- **Tamanho das Pull Requests:** PRs menores são mais fáceis de revisar e mesclar. Tente manter o escopo de suas | ||
contribuições relativamente pequeno. | ||
- **Mantenha a Cortesia:** Seja cortês e respeitoso ao discutir e revisar o trabalho de outros contribuidores. | ||
|
||
## Regras | ||
|
||
Para garantir um ambiente saudável, respeitoso e receptivo, toda boa comunidade precisa de regras. Nossa equipe de | ||
moderação conta com o respaldo dessas regras, as quais foram criadas para tomar as providências cabíveis em cada | ||
situação. Este é um trabalho constante, pois frequentemente atualizamos nossas regras de convivência para enfrentar | ||
novos problemas que podem surgir. Por isso, é crucial reservar alguns minutos para ler sobre todas elas e, de tempos em | ||
tempos, voltar aqui para acompanhar as atualizações. | ||
|
||
Para melhorar as regras, não as explore; em vez disso, nos reporte. Caso haja exploração de alguma falha, a | ||
atualizaremos imediatamente, e as regras se aplicarão ao caso, mesmo que tenha ocorrido antes da atualização. Contamos | ||
com a colaboração de todos para evitar incentivos ao mau comportamento. | ||
|
||
É fundamental ressaltar que todas as sugestões são muito bem-vindas! Se tiver alguma, procure diretamente um dos membros | ||
da nossa moderação, identificados pelos cargos de Dono do Parquinho 🎠, Hatter 🤠 ou De Capa 🐱🏍. Abaixo, você pode | ||
conhecer mais detalhes sobre cada uma de nossas regras e quais punições elas geram. | ||
|
||
--- | ||
|
||
### **⚠️ Regras para Convivência Social** | ||
|
||
**1. Exercício do Bom Senso** | ||
|
||
Pode parecer evidente, mas todas as normas existem para delimitar e enquadrar comportamentos que ultrapassam o bom | ||
senso. O exercício do bom senso assegurará que você esteja aderindo às regras em 100% das situações. | ||
|
||
**2. Pornografia ou Assédio** | ||
|
||
- 🚫 Banimento imediato 🔨 | ||
|
||
É terminantemente proibido compartilhar qualquer conteúdo com conotação pornográfica. Não busque brechas na regra, | ||
pois ela se aplica a qualquer situação interpretada pela moderação como tal. Da mesma forma, qualquer comportamento | ||
que possa ser interpretado como assédio, mesmo subjetivamente, será identificado pela moderação e enquadrado nesta | ||
regra. | ||
|
||
**3. Discussões sobre Temas Sensíveis** | ||
|
||
- 🚫 Punição: 1, 3, 7 dias. (recorrência (3): ban 🔨) | ||
|
||
É proibido totalmente compartilhar imagens, links, menções ou participar de discussões sobre temas políticos, | ||
religiosos, assim como debates sobre futebol. Utilize outras plataformas na internet para esse tipo de interação. | ||
|
||
**4. Desrespeito e Ofensas** | ||
|
||
- 🚫 Punição: 1, 3, 7 dias. (recorrência (3): ban 🔨) | ||
|
||
Seja uma pessoa cortês e empática. Se uma pergunta for feita, responda de maneira respeitosa. Se você não estiver | ||
disposto a responder dessa forma, sua resposta não será bem-vinda. Isso inclui comentários, piadas e falas | ||
sarcásticas, irônicas ou ofensivas. Lembre-se de que todos começaram de algum lugar, portanto, respeite as dúvidas das | ||
pessoas, independentemente do nível delas. Se as ofensas forem direcionadas à moderação, a punição será imediatamente | ||
aumentada para 7 dias. | ||
|
||
**5. Vocabulário Inadequado** | ||
|
||
- 🚫 Punição: 5, 30, 60 (recorrência (3): ban 🔨) | ||
|
||
Utilize um vocabulário apropriado. Palavrões e termos ofensivos serão moderados automaticamente. | ||
|
||
**6. Afiliados** | ||
|
||
- 🚫 Punição: 1, 3, 7 dias. (recorrência (3): ban 🔨) | ||
|
||
O compartilhamento de links de afiliados não é permitido. Isso polui nosso ambiente e incomoda muitas pessoas. | ||
|
||
**7. Venda e Comercialização** | ||
|
||
- 🚫 Punição: 1, 3, 7 dias. (recorrência (3): ban 🔨) | ||
|
||
Anunciar ou negociar a venda ou troca de produtos físicos ou digitais na comunidade não é permitido. Em caso de uma | ||
operação que ocorra antes da intervenção da moderação e resulte em prejuízo para qualquer parte, não nos | ||
responsabilizamos. | ||
|
||
**8. Outras Comunidades** | ||
|
||
- 🚫 Punição: 5, 30, 60 (recorrência (3): ban 🔨) | ||
|
||
O compartilhamento de links para outras comunidades no Discord, WhatsApp, Telegram e outros serviços não é permitido. | ||
Também não é permitida a criação de grupos paralelos ou denominados como DevHatt. | ||
|
||
## Redes sociais | ||
|
||
- Discord: [https://discord.gg/devhatt](https://discord.gg/devhatt) | ||
- Twitter: [Devhat (@DevHatt)](https://twitter.com/DevHatt) | ||
- LinkedIn: [Devhat (@DevHat)](https://www.linkedin.com/company/dev-hat/) | ||
- Dev.To: [Devhat (@DevHat)](https://dev.to/devhat) | ||
- YouTube: [YouTube (@devhatt-dailies)](https://www.youtube.com/@devhatt-dailies) | ||
- YouTube: [YouTube (@devhatt)](https://www.youtube.com/@devhatt) | ||
|
||
Junte-se a nós nesta jornada emocionante de tornar a DevHatt a melhor software house em todo o mundo! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
**Antes de tudo, é importante que você observe como módulos atuais foram construídos | ||
antes de começar a construir um novo módulo ou serviço. Tente manter a padronização existente | ||
criada por um módulo/serviço anterior a menos que você acredite que ela seja danosa ao projeto. | ||
Neste caso, abra uma issue para discutir a mudança de padrão.** | ||
|
||
# Guia de estilo de código e arquitetura do backend do octopost | ||
|
||
## Git | ||
|
||
Essa seção descreve as práticas necessárias de uso do git para contribuir com o projeto. | ||
|
||
### Branches | ||
|
||
Para criar uma branch, siga o padrão de adicionar `[seu-nome-de-usuario]/issue-[numero-da-issue]` na sua branch antes de | ||
criar a branch. | ||
|
||
Por exemplo: | ||
|
||
```bash | ||
git checkout -b devhatt/issue-1 | ||
``` | ||
|
||
Nesse caso, o nome de usuário é `devhatt` e o número da issue é `1`. | ||
|
||
### Commits | ||
|
||
Para fazer commits, utilizamos o padrão de commits | ||
chamado [semantic commit](https://www.conventionalcommits.org/en/v1.0.0/), que consiste em criar commits seguindo essa | ||
estrutura: | ||
|
||
```bash | ||
git commit -m "type: description" | ||
``` | ||
|
||
Para isso, execute o comando `pnpm commit` na raiz do projeto e siga as instruções. | ||
O terminal irá te guiar para criar um commit seguindo o padrão de commits semânticos. | ||
|
||
## Projeto | ||
|
||
Essa seção lida com a estrutura do projeto e como ele está organizado. | ||
|
||
### Padrões de nomenclatura de arquivos | ||
|
||
Neste projeto, utilizamos o padrão `kebab-case` para a criação de arquivos e pastas. | ||
As pastas e arquivos devem ser criados seguindo a seguinte estrutura de nomenclatura: | ||
`[palavra]-[segunda-palavra]-[terceira-palavra].[extensão]` | ||
|
||
### Estrutura Principal | ||
|
||
``` | ||
/.github - Arquivos de configuração do GitHub | ||
/openapi - Arquivos de documentação da API | ||
/prisma - Arquivos de configuração do Prisma e Schema do Banco de dados | ||
/src - Código fonte do projeto | ||
/config - Arquivos de Configurações do projeto | ||
/features - Módulos da aplicação separados por seus domínios | ||
/[modulo] - Módulo específico | ||
/controllers - Arquivos que intermediam a comunicação dos serviços com as rotas do express. | ||
/repositories - Arquivos que intermediam a comunicação dos casos de uso com outros serviços. | ||
/services - Arquivos que executam a lógica principal do nosso serviço. | ||
/models - Arquivos que definem os modelos de dados do módulo com interfaces. | ||
/validators - Arquivos de schema para validação de dados. | ||
/routes - Arquivos de configuração das rotas expostas pelo módulo. | ||
/middlewares - Middlewares da aplicação | ||
/shared - Arquivos compartilhados entre os módulos | ||
/errors - Classes de erros personalizadas | ||
/infra - Arquivos de código reutilizados entre os módulos | ||
/protocols - Interfaces comuns reutilizadas entre os módulos | ||
/test-helpers - Arquivos e funções utilitárias utilizadas nos testes | ||
/tests - Arquivos de configuração dos testes | ||
/index.ts - Arquivo de inicialização da aplicação | ||
``` | ||
|
||
#### Serviços | ||
|
||
Os serviços são responsáveis por executar a lógica principal do nosso serviço. | ||
|
||
`[nome do módulo]-[serviço ou metodo]-service.ts` | ||
|
||
`[nome do módulo]-[serviço ou metodo]-service.test.ts` | ||
|
||
Os serviços devem implementar a interface `Service` contida em `src/shared/protocols/service.ts` e | ||
terem os seus generics resolvidos para as interfaces de entrada e saída definidos dentro da pasta models de cada módulo. | ||
|
||
_Use o mesmo padrão de nomenclatura para definir essas interfaces._ | ||
|
||
#### Controllers | ||
|
||
Os controllers são responsáveis por intermediar a comunicação entre os serviços e as rotas do express. | ||
Eles também são responsáveis por executar as lógicas de validação e fazer o tratamento dos dados recebidos. | ||
|
||
`[nome do módulo]-controller.ts` | ||
|
||
`[nome do módulo]-controller.test.ts` | ||
|
||
Os controladores devem implementar a interface `Controller` contida em `src/shared/protocols/controller.ts` e | ||
receber os serviços e validadores necessários para o seu funcionamento via construtor. | ||
|
||
#### Repositories | ||
|
||
Os repositories são responsáveis por intermediar a comunicação entre os serviços e outros serviços como, por exemplo, | ||
o banco de dados ou um serviço de terceiros. | ||
|
||
`/[nome do módulo]-repository/[nome do módulo]-repository.ts` | ||
|
||
`/[nome do módulo]-repository/[nome do módulo]-repository.test.ts` | ||
|
||
Os repositórios fazem o intermédio entre os nossos serviços e outras camadas e funcionalidades da nossa aplicação. | ||
Portanto, devem ser injetados nos serviços via construtor e mocados nos testes. | ||
|
||
Se algum repositório for utilizado por mais de um serviço ou middleware, ele deve ser movido para a | ||
pasta `src/shared/infra/repositories` seguindo o mesmo padrão de nomenclatura. | ||
|
||
#### Routes | ||
|
||
A pasta de rotas é responsável por configurar cada uma das rotas expostas pelo módulo, | ||
além de instanciar e injetar os serviços e módulos necessários para tudo funcione. | ||
|
||
`[nome do módulo]-routes.ts` | ||
|
||
`[nome do módulo]-controller-factory.ts` | ||
|
||
Para a construção das rotas é necessário criar um arquivo de factory para o controller que injete em cada classe | ||
os objetos necessários para o seu funcionamento dentro da factory. | ||
|
||
Não é necessário criar testes unitários para as rotas, pois elas são testadas indiretamente nos testes dos | ||
controladores, | ||
e testes de integração são mais indicados para esse caso. Portanto, esses arquivos são desconsiderados do coverage total | ||
da aplicação. | ||
|
||
#### Validators | ||
|
||
A pasta de validators contém os Schemas de validação dos dados. | ||
|
||
`[nome do módulo]-[serviço ou metódo]-schema.ts` | ||
|
||
Crie os schemas de validação para os dados de entrada e saída dos serviços seguindo a interface | ||
`HttpRequest` contida dentro de `src/shared/protocols/http.ts`. | ||
|
||
### Documentação em primeiro lugar! | ||
|
||
Antes de começar o desenvolvimento de um novo endpoint, é necessário | ||
confirmar que a documentação daquele endpoint em específico já existe dentro da | ||
pasta de documentações `openapi`. Para criar o serviço, você deve seguir fielmente a interface | ||
declarada, e fazer mudanças na documentação caso necessário. | ||
|
||
### Testes | ||
|
||
Lembre-se de sempre escrever testes para o código que você está desenvolvendo. | ||
Como na nossa aplicação estamos utilizando apenas testes unitários, lembre-se sempre | ||
de mockar dependências externas as classes que você está testando. |
Oops, something went wrong.