Repository navigation
Arquitetura do Software
O projeto TalentSpot AI adota uma abordagem de arquitetura em camadas para separar as responsabilidades da aplicação, facilitar a manutenção, e permitir a escalabilidade. A camada de apresentação é construída com React e Typescript, proporcionando uma interface rica e interativa para os usuários finais. A comunicação com o servidor é realizada através de uma Fachada (Facade) que abstrai as complexidades da camada de back-end, fornecendo um ponto de acesso simplificado para as operações de dados. No back-end, Django e Python são utilizados para processar requisições, executar a lógica de negócios com suporte de inteligência artificial, e interagir com o banco de dados MySQL, responsável pelo armazenamento e recuperação de dados persistentes. Essa separação clara entre as camadas possibilita que cada parte da aplicação seja desenvolvida, testada e gerenciada de forma independente, melhorando a eficiência e a qualidade do software.
O módulo front-end será responsável por apresentar a interface do usuário, onde ele poderá interagir diretamente com o aplicativo. Isso inclui a exibição de dados, a submissão de formulários e a navegação geral entre as várias seções da aplicação. Nesta camada, será utilizado React com Typescript para desenvolver uma interface reativa e moderna. O Typescript ajudará a manter o código robusto e menos propenso a erros através de tipagem estática. Esse módulo se comunicará com a camada de fachada através de requisições GraphQL, que permite ao front-end solicitar dados complexos em uma única chamada de API, evitando múltiplos round-trips desnecessários e o sobrecarregamento de dados
A Fachada (Facade) serve como uma interface unificada entre o front-end e o back-end, introduzindo uma camada de abstração que simplifica a comunicação entre a interface do usuário e a lógica de negócios do servidor. Esta camada é fundamental para a arquitetura de três camadas, uma vez que pode consolidar várias operações do back-end em uma única chamada de front-end, melhorando o desempenho e a eficiência da rede. Por exemplo, usando GraphQL como parte da Fachada, a camada de apresentação pode fazer uma requisição para buscar todos os dados necessários em uma única query
O back-end atuará como uma camada lógica essencial, processando as operações definidas nas consultas e mutações GraphQL enviadas pelo front-end. Ele será responsável por executar a lógica de negócios, realizar a interface com o banco de dados para buscar ou armazenar dados e aplicar algoritmos de inteligência artificial para análise e extração de informações de currículos. Utilizando Django e Python, o back-end proporcionará uma implementação robusta do GraphQL, permitindo a definição de esquemas e resolvers que mapeiam as operações GraphQL para a lógica de negócios necessária. Na camada de back-end, um modelo de processamento de linguagem natural (NLP) será integrado para analisar currículos e extrair dados estruturados de textos não estruturados, contribuindo para uma categorização automática de habilidades e experiências
Armazenar e gerenciar os dados essenciais para a aplicação, como informações de usuário, dados de autenticação e qualquer outro dado necessário para a operação do TalentSpot AI. O MySQL será usado por sua confiabilidade e suporte robusto a transações, ideal para aplicações que requerem consistência e integridade dos dados. O design será orientado para a eficiência em consultas, utilizando práticas como normalização para eliminar redundâncias e índices para acelerar as buscas.
O GraphQL atua naturalmente como uma fachada, fornecendo uma interface unificada para diversas fontes de dados back-end. Isso simplifica a interação do cliente com o back-end, permitindo que ele faça solicitações em uma única consulta que pode abranger múltiplas fontes de dados.
Com o uso da biblioteca Tanstack, na camada front-end, haverá a subscrição e notificação de mudanças no estado dos dados, permitindo que componentes reajam automaticamente às atualizações de dados.
A comunicação entre a aplicação web e o servidor será realizada por meio de requisições GraphQL. Este servidor de aplicação, funcionando como um servidor GraphQL, está hospedado em um serviço de cloud e configura um único endpoint para todas as solicitações de dados e mutações do cliente. A utilização do GraphQL permite uma interação eficiente e flexível, onde o cliente pode especificar exatamente quais dados necessita em cada requisição, minimizando o sobre-carregamento e as requisições adicionais. O servidor GraphQL, por sua vez, se comunicará com um banco de dados SQL separado utilizando o protocolo TCP/IP. Com essa abordagem, mudanças na interface do usuário, na lógica de servidor ou na estrutura do banco de dados podem ser realizadas de forma independente, desde que os contratos definidos pelo esquema GraphQL sejam mantidos, assegurando assim a integridade das interações entre as camadas.
O projeto irá utilizar as seguintes tecnologias para implementação:
| Tecnologia | Linguagem | |
|---|---|---|
| Front-end | React | Typescript |
| Fachada (Facade) | Graphene | Python |
| Back-end | Django | Python |
| Banco de Dados | MySQL | SQL |
Podemos definir também outras tecnologias e serviços que iremos utilizar para desenvolver e implantar:
| Descrição | |
|---|---|
| Visual Studio Code | Editor de texto |
| Next.js | Framework para desenvolvimento front-end React |
| TanStack Query v5 | Biblioteca que fornece ferramentas poderosas para o gerenciamento de estados de dados remotos em aplicações React |
| ESLint | Ferramenta de análise de código estática para identificar padrões problemáticos encontrados no código JavaScript |
| Prettier | Formatador de código opinativo |
| Figma | Editor gráfico Web de vetor e prototipagem de projetos de design |
| Serviço | |
|---|---|
| Front-end | Render |
| Back-end/API | Render |
| Banco de dados | Render |
Podemos resumir os principais pontos da arquitetura do TalentSpot AI:
- Camadas distintas para Apresentação (Cliente), Fachada (GraphQL), Negócios (Lógica), e Dados;
- A fachada do GraphQL simplifica a interação do Cliente com a lógica de negócio complexa;
- Adoção de padrões de projeto como Facade, Observer, e a estrutura de projeto sugerida pelo Django que assemelha-se ao MVC;
- Emprego de tecnologias atuais como React, Django, e MySQL para desenvolvimento robusto e eficiente;
- Uso de GraphQL para uma API eficiente e flexível, e de tecnologias auxiliares como TanStack para gerenciamento de estado no React;
- Implantação e execução da aplicação na plataforma Render, otimizando tanto a entrega contínua quanto a escalabilidade da infraestrutura.