Início do projeto instalando dependências:
- Express, Multer, Prisma
Logo em seguida, criei uma imagem no Docker para hospedar o banco de dados MySQL.
===== CREATE =====> "/vehicles/create"
Rota de cadastro do veículo foi criada, com população do banco relacionando a tabela Veículo e Imagens. Na rota há a importação e conversão das imagens para binário e envio junto com o corpo ao Controller.
No Controller é feita a conversão dos dados para seus respectivos tipos. Em seguida a solicitação da criação do veículo para a camada Model. Após criado, o id é capturado e enviado juntamente às imagens para a camada Model das imagens, onde são inseridas no banco, com o relacionamento com o respectivo veículo.
Abaixo a imagem das duas tabelas com dados fictícios:
Abaixo a imagem do Postman com a requisição feita e retorno após cadastrar os dados.
===== DELETE =====> "/vehicles/delete/id"
Rota de exclusão criada, buscando o parâmetro (id) da url e enviando para o Controller. Na camada Controller, o id é enviado para a camada Model de exclusão das fotos, de forma que exclua todas as fotos que possuem o campo "veiculoId" igual ao id recebido. Logo em seguida, o Controller envia o mesmo id para a camada Model de exclusão do veículo e assim o faz através do próprio id do veículo.
Print do Postman ao executar o comando para excluir:
Prints do prisma studio antes e depois da exclusão:
Imagens:
===== GETALL =====> "/vehicles"
Rota de obtenção de todos os resultados. Veículos e suas respectivas imagens:
===== GET UNIQUE =====> "/vehicles/:id"
Rota de obtenção de um veículo específico, com suas respectivas images através de seu id.
O id é enviado como parâmetro na rota, passa pela camada Controller e é enviado à camada Model, onde faz a busca no banco de dados do veículo de acordo com sua id.
===== UPDATE =====> "/vehicles/update/:id"
Rota de alteração de dados de um veículo.
Ao alterar algum dado no front-end, deve ser recebido pela rota, os dados originais que não foram alteredos, os novos dados e um array de imagens com as que permeneceram, com as novas e excluídas as deletadas ou alteradas. No momento em que os dados entram na rota, são enviados à camada Controller, onde os dados são convertidos para os respectivos tipos, logo em seguida é chamada a camada Model de exclusão de imagens, onde são excluídas todas as imagens que tem o id do veículo cadatrado no campo de relacaionamento. Após, é feita a altereção de todos os dados na tabela Veiculo (dados não alterados são recadastrados e os alterados, cadastrados no lugar dos antigos).
Após isto, as novas imagens (novas imagens e antigas que não foram alteradas, nem excluídas) são enviadas para a camada Model de cadastro de imagens, vinculadas ao id do veículo, através do campo de relacionamento.
===== DEPLOY DO PROJETO PARA PRODUÇÃO =====
- Conectar no Railway (railway.app) com as credenciais do GitHub
- Create a new project
- Seleionar o repositório (nesse projeto, como o repositório é publico, o Railway não aceita o deploy)
- Criar a instancia do DB: New -> Database -> Add MySQL -> Connect -> copiar DATABASE_URL
- Add variables: Variables -> Variable Referenc - > DATABASE_URL -> Add
- Rodar o comando "npx prisma generate" no terminal
- Settings -> Generate Domain
Obs.: Este é um repositório público, portanto o deploy no Railway não é permitido. Para fazer o deploy para o cliente, basta ter o projeto como Privado no GitHub e seguir os passos acima.