O projeto se baseará na arquitetura em camadas. Essa rquitetura busca identificar partes do sistemas com externalidade maior - as que possuem mais contato com o usuário - e partes com internalidade maior - persistência. Sendo assim, haverão divisões de componentes conforme sua função técnica.
- Dados: possui a responsabilidade de conter as models e o banco de dados.
- Aplicação: responsável por conter a lógica de negócios da aplicação.
- Apresentação: contendo a interface do usuário e controle de estados.
frontend
frontend/
├── src/
│ ├── components/ # Componentes reutilizáveis
│ ├── pages/ # Páginas da aplicação
│ ├── services/ # Comunicação com APIs (infraestrutura)
│ ├── contexts/ # Contextos globais (React Context API)
│ ├── hooks/ # Hooks personalizados
│ ├── utils/ # Funções utilitárias
│ ├── styles/ # Estilos globais
│ ├── routes/ # Configuração de rotas
│ └── core/ # Ponto central da aplicação (App.js, index.js)
├── public/ # Arquivos estáticos
├── tests/ # Testes automatizados
├── config/ # Configurações gerais (opcional)
└── package.json # Configuração do projeto
-
components/
:- Componentes reutilizáveis, como botões, cards e modais.
-
pages/
:- Páginas principais da aplicação, organizadas por rotas.
-
services/
:- Abstração de chamadas a APIs e lógica relacionada à obtenção de dados.
-
contexts/
:- Contextos para gerenciamento de estado global (e.g., autenticação, tema).
-
hooks/
:- Hooks personalizados para encapsular lógica reutilizável.
-
utils/
:- Funções auxiliares (e.g., formatação de datas, debounce).
-
styles/
:- Estilos globais, variáveis e temas.
-
routes/
:- Configuração de rotas e estrutura de navegação.
-
core/
:- Arquivos principais da aplicação, como
App.js
eindex.js
.
- Arquivos principais da aplicação, como
-
public/
:- Recursos públicos como o arquivo HTML base e favicons.
-
tests/
:- Estrutura para testes automatizados, divididos por tipo (unitários, integração, e2e).
-
config/
:- Configurações opcionais, como chaves de API, se necessário.
backend
backend/ ├── app/ # Diretório principal da aplicação │ ├── init.py # Inicializa a aplicação FastAPI │ ├── main.py # Arquivo principal para inicialização da aplicação FastAPI │ ├── config.py # Configurações gerais (como as credenciais do Supabase) │ ├── db/ # Lógica relacionada ao banco de dados │ │ ├── init.py # Inicializa o módulo db │ │ ├── database.py # Configuração da conexão com o banco (SQLAlchemy) │ │ └── models.py # Definição dos modelos do banco (SQLAlchemy) │ ├── api/ # Diretório de rotas e lógica da API │ │ ├── init.py # Inicializa o módulo de rotas │ │ ├── users.py # Rota e lógica para usuários │ │ └── posts.py # Rota e lógica para posts (exemplo de outro recurso) │ ├── services/ # Lógica de negócios e serviços auxiliares │ │ ├── init.py # Inicializa o módulo de serviços │ │ ├── user_service.py # Lógica de negócios para usuários │ │ └── post_service.py # Lógica de negócios para posts │ ├── schemas/ # Esquemas de validação (pydantic) │ │ ├── init.py # Inicializa o módulo de esquemas │ ├── routers/ # Funções de manipulação de dados (Create, Read, Update, Delete) │ │ ├── init.py # Inicializa o módulo de CRUD │ └── utils/ # Funções auxiliares │ ├── init.py # Inicializa o módulo de utilitários │ └── auth.py # Funções auxiliares de autenticação, como JWT ├── alembic/ # Diretório do Alembic para migrações de banco de dados │ ├── versions/ # Versões das migrações │ └── env.py # Configuração do Alembic para migrações └── requirements.txt # Dependências do projeto (incluindo FastAPI, SQLAlchemy, etc.)
-
app/
:-
Diretório principal da aplicação, onde está todo o código de configuração, rotas e lógica de negócios.
-
__init__.py
: Inicializa a aplicação FastAPI. -
main.py
: Arquivo principal para inicializar a aplicação FastAPI, configurar rotas e iniciar o servidor. -
config.py
: Arquivo de configurações, como credenciais de conexão com o banco de dados Supabase (PostgreSQL).
-
-
db/
:-
Contém toda a lógica relacionada ao banco de dados, incluindo configuração e definição dos modelos.
-
__init__.py
: Inicializa o módulo db. -
database.py
: Configura a conexão com o banco de dados, utilizando o SQLAlchemy para se conectar ao Supabase (PostgreSQL). -
models.py
: Define os modelos do banco de dados utilizando SQLAlchemy. Os modelos representam as tabelas no banco.
-
-
api/
:-
Diretório que contém as rotas e a lógica da API.
-
__init__.py
: Inicializa o módulo api. -
users.py
: Define as rotas relacionadas aos usuários (ex.: criar usuário, obter usuário). -
posts.py
: Define as rotas relacionadas a posts (ex.: criar post, listar posts).
-
-
services/
:-
Contém a lógica de negócios e serviços que manipulam dados e implementam a lógica de aplicação.
-
__init__.py
: Inicializa o módulo services. -
user_service.py
: Contém funções de negócios para usuários, como criação ou manipulação de dados do usuário. -
post_service.py
: Contém funções de negócios para posts, como criação ou manipulação de dados de posts.
-
-
schemas/
:-
Contém os esquemas Pydantic para validação de dados de entrada e saída.
-
__init__.py
: Inicializa o módulo schemas. -
user_schema.py
: Define esquemas Pydantic para validar os dados de entrada e saída relacionados aos usuários. -
post_schema.py
: Define esquemas Pydantic para validar os dados de entrada e saída relacionados aos posts.
-
-
crud/
:-
Contém funções de manipulação direta de dados (CRUD - Create, Read, Update, Delete) para interagir com o banco de dados.
-
__init__.py
: Inicializa o módulo crud. -
user_crud.py
: Contém funções CRUD para manipulação dos dados dos usuários no banco de dados. -
post_crud.py
: Contém funções CRUD para manipulação dos dados dos posts no banco de dados.
-
-
utils/
:-
Contém funções auxiliares para tarefas gerais, como autenticação e outras operações utilitárias.
-
__init__.py
: Inicializa o módulo utils. -
auth.py
: Contém funções auxiliares de autenticação, como geração e verificação de tokens JWT.
-
-
alembic/
:-
Diretório para migrações de banco de dados utilizando Alembic. Contém as versões das migrações e a configuração do Alembic.
-
versions/
: Contém as versões das migrações do banco de dados. -
env.py
: Arquivo de configuração do Alembic que permite aplicar as migrações de banco de dados.
-
-
requirements.txt
:- Arquivo de dependências que lista as bibliotecas necessárias para o projeto (ex.: FastAPI, SQLAlchemy, Alembic).