-
Arquitetura baseada em MVC
-
./server.js - Criacao do servidor e abertura de conexao, path do DB, cloduinary settings
-
./app.js => cors, middlewares, cookie-parser (necessario para lers os cookies das requisicoes), import das rotas dinamicas e separadas por models, middleware de error
-
./config/config.env => variaveis de ambiente do sistema
-
./config/database.js => conexao com o banco de dados mongodb
-
./data/products.js => usado pra popular o db quando estiver vazio
-
./models/... => todos os modelos do banco
-
./middlewares/auth =>
isAuthenticatedUser()
verifica qual é o usuario que esta fazendo a requisicao, e adiciona ao corpo do header o contexto de usuario, caso o token nao esteja vencido ou erradoauthorizedRoles()
restringe o acesso de usuarios que nao sao das roles autorizada.
-
./middlewares/error.js => custom error handler, retorna a mensagem de erro (gravada no model) ou uma generica de internal server error
-
./middlewares/getAsyncErros.js => é um try/catch escondido, no catch, chama a funcao next passando pro middleware de error.
-
./controllers/orderController.js =>
createOrder():
ira criar uma ordem para o usuario tal, atualizar o BD subtraindo o quantitdade de itens comprados, colocar a status como "processing" e retornar a ordergetOrder()
retorna a order por idgetOrders()
busca todas as orders do usuariogetAllOrders()
busca as orders de todos os usuarios, usado por adminsgetTargetOrder()
busca a order por especifico ID, usado por adminsupdateTagetOrder()
altera a order, usado por adminsdeleteOrder()
deleta a order, usado por adminsupdateStock()
atualiza o stock dos produtos de uma order
-
./controllers/paymentController.js =>
checkProductsStock()
verifica se a quantidade pedida existe de tal produtosendStripeApi()
retorna a stripe API KEY pro clientprocessPayment()
cria uma intencao de pagamento e retorna o client secret
-
./controllers/productController.js =>
newProduct()
cadastra um novo produto, usado por adminsgetProducts()
busca todos os produtos e retornar para o client com seus respectivos filtrosgetProduct()
busca um produto especifico e retornaupdateProduct()
altera os dados de um produto, usado por adminsdeleteProduct()
deleta um produto, usado por adminscreateProductReview()
cria uma review para um produtogetProductReviews()
busca todas as reviews de um produtodeleteReview()
deleta a review de um produto feito por um usuariogetCartProducts()
busca os produto do carrinho
-
./controllers/productController.js =>
registerUser()
registra um usuariologin()
login de usuario, retorna um cookie criptografado que sera salvo no http, acessivel por request apenaslogout()
expira o cookie e desloga o usuarioforgotPassword()
cria uma um token criptografado de forgot password e envia um email para o clienteresetPassword()
funcao de reset password, vai encriptar o token e verificar se e o mesmo salvo no bancogetUser()
busca os dados de um usuario, no caso, o que esta logado.updatePassword()
funcao de atualizacao de password atraves do site, sem ter esquecido.updateUser()
atualiza os dados do usuariogetAllUsers()
busca todos os usuarios, usado por adminsgetTargetUser()
busca um usuario por ID, usado por adminsupdateTargetUser()
atualiza um usuario por ID, usado por adminsdeleteTargetUser()
deleta o usuario pelo ID
-
./routes/order.js =>
/order/new
=> url para criacao de uma nova order para um usuario logado/order/:id
=> busca os dados de uma order por id/admin/orders
=> busca todas as orders/admin/order/:id
=> buscar/atualiza/deleta uma order pelo id
-
./routes/payment.js =>
/payment/process
=> cria uma intencao de pagamento e retorna o client secret/stripeapi
=> retorno da stripe secret
-
./routes/products.js =>
/products
=> retorna todos os produtos/product/:id
=> retorna um produto/admin/product/new
=> criacao de um produto/admin/product/:id
=> update/delete de um produto/cart
=> retorno do carrinho do usuario os produtos, stock e etc/review
=> deleta/cria uma review para um produto/reviews
=> retorna as reviews de um produto
-
./rotues/users.js =>
/register
=> regisro de usuario/login
=> login de usuario/password/forgot
=> envio de email e criacao do token de uma nova senha/password/reset/:token
=> validacao de uma nova senha/password/update
=> atualizacao da senha do usuario/user/update
=> update dos dados do usuario/logout
=> expira o token de usuario/user
=> busca dados do usuario/admin/users/
=> busca todos os usuarios/admin/user/:id
=> busca/atualiza/deleta um usuario
Em construção...