Um projeto de exemplo feito em Django, ReactJS & PostgreSQL
Com o pensamento de que linguagens e frameworks são apenas ferramentas para o desenvolvimento de soluções, antes de por a mão no código foram esquematizados modelos UML (docs/UML.pdf) para realizar o planejamento do que seria efetuado. Os modelos criados foram o Diagrama de Casos de Uso e Diagrama de Modelagem Relacional, devido ao nível de complexidade do projeto e a quantidade de programadores (um) não se viu necessidade de outros modelos.
Após compreender o problema e projetar uma solução com UML o próximo passo para prototipação era o Design UX/UI. Como ferramenta de desenvolvimento foi escolhido o Figma, por ser extremamente completo, ter foco colaborativo e apresentar baixa complexidade de uso foi uma escolha ideal para o projeto. Uma visualização completa do que foi planejado para essa etapa do projeto pode ser encontrada clicando aqui.
Como tecnologias para o projeto foram utilizados Django, ReactJS & PostgreSQL. Todas essas tecnologias foram requisitos obrigatórios, mas vale a reflexão sobre o que pode ser levado em consideração para se escolher tais ferramentas.
Considerando o mercado brasileiro de tecnologia temos um cenário onde progamadores experientes são levados para fora por empresas de outros países e novos programadores precisam ser ensinados, o que é apenas uma pequena representação da volaticidade do mercado de programação em si. Dito isso, quem contrata desenvolvedores precisa estar preparado para a saída e entrada de profissionais em um períodos inesperados, escolher Python e JavaScript como linguagens principais da empresa é escolher uma curva de aprendizado acessível para novos desenvolvedores sem perder a confiabilidade de tecnologias amplamente utilizadas mundo a fora.
Equanto que a escolha dos Framworks Django e ReactJS, juntamente com PostgreSQL garantem escalabilidade a qualquer projeto.
A versatilidade e agilidade promovida por escolhas como essa fazem total diferença na produtividade dos times de desenvolvimento.
ℹ️ Alguns dos requisitos foram alterados e alguns dados não solcitados foram adicionados ao projeto final.
- Desenvolvimento fullstack - Django;
- Banco de dados e modelagem relacional - PostgreSQL;
- Versionamento de código - Git;
- Cadastro de Livros contendo os seguintes campos:
(:warning:somente por api na versão atual
):- Nome;
- Categoria;
- Capa do livro (imagem);
- Autor;
- Data de publicação;
- Quantidade de páginas;
- Listar os livros cadastrados;
- Editar um livro existente
(:warning:somente por api na versão atual
); - Deletar um livro
(:warning:somente por api na versão atual
);
- Não é permitido adicionar livros com o mesmo nome;
- A Data de publicação dos livros deve está compreendida entre os anos de 1500 á 2022;
- O usuário precisa ser alertado através de notificações caso esteja infringindo alguma regra
durante o cadastro ou atualização;
(:warning:somente por api na versão atual
)
- Listar livros por categoria;
(:warning:somente por api na versão atual
) - Listar livros por data de publicação;
- Criação de um front-end desacoplado do projeto (React ou Vue);
(:warning:somente por api na versão atual
) - Conteinerização (Docker-compose);
Após clonar o repositório
Entrar na pasta do projeto
cd mylib
Entrar na pasta do código frontend
cd source/frontend
Instalar módulos
npm install
Voltar para a pasta principal
cd ../..
Iniciar docker
docker-compose up -d
Acionar migrations
docker-compose exec api /usr/local/bin/python manage.py migrate
Durante o primeiro acesso não haverão livros, autores ou categorias cadastradas. Logo deve-se cadastrar primeiramente pelo menos um (1) autor, pelo menos uma (1) categoria e depois então se podem cadastrar livros.
Por padrão a url relacionada a cada setor da aplicação é:
- frontend: localhost:3000
- api: localhost:8000
- db: localhost:5432
Como algumas das funções do frontend não estão finalizadas o cadastro pode ser feito diretamente na api, que quando acessada pelo navegador possui uma interface padrão criada pelo framework.
- Listagem e cadastro de atores deve estar em:
localhost:8000/autores - Listagem e cadastro de categorias deve estar em:
localhost:8000/categorias - Listagem e cadastro de livros deve estar em:
localhost:8000/livros