Objetivo: Neste projeto foi desenvolvido uma CRUD api para gerenciar uma carteira digital utilizando o banco de dados MongoDB aplicando conceitos de POO e SOLID.
- Arquitetura REST;
- Banco de Dados MongoDB;
- TypeScript;
- Express;
- Mongoose;
- Bcrypt;
- JsonWebToken;
- Testes Automatizados com Mocha, Chai e Sinnon;
- Docker;
- Docker compose;
- Swagger;
npm version 6.14.13node version 14.17.0docker version 20.10.13docker-compose version 1.29.2
- Clone o repositório
git clone git@github.com:esdrasoliveira5/cyber-wallet.git
- Vá para a pasta da aplicação
cd cyber-wallet/project - Instale as dependencias
npm install
-
Comando para iniciar com docker
sudo docker-compose up
-
Acesse pelo navegador
http://localhost:3001/
-
Comando para iniciar pelo node
npm run start
-
Acesse pelo navegador
http://localhost:3001/
-
Testes unitarios
npm run test:unit
-
Testes de integração
npm run test:integration
-
Verificar cobertura dos testes
npm run test:coverage
Esse endpoint permite testar a api com o Swagger;
Esse endpoint retorna status 201 e o usuario cadastrado.
-
Exemplo
request body{ "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "maria_password", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" } } -
Exemplo
response body{ "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" }, "balance": 0, "transactions": [], "_id": "6264bfcebab4601fd42c7181" }
Esse endpoint retorna status 200 e o usuario com um token.
-
Exemplo
request body{ "email": "luisa@email.com", "password": "maria_password" } -
Exemplo
response body{ "user": { "_id": "6264bfcebab4601fd42c7181", "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" }, "balance": 0, "transactions": [] }, "token": "bearer token" }
Retorna status 200 e todos os usuarios cadastrados.
-
Exemplo
request headers{ "Authorization": "bearer token", } -
Exemplo
response body[ { "_id": "6264bfcebab4601fd42c7181", "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" }, "balance": 0, "transactions": [] }, ... ]
Retorna status 200 e o usuario cadastrado com o id especificado.
-
Exemplo
request headers{ "Authorization": "bearer token", } -
Exemplo
response body{ "_id": "6264bfcebab4601fd42c7181", "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" }, "balance": 0, "transactions": [] }
Retorna status 200 e o usuario atualizado.
-
Exemplo
request headers{ "Authorization": "bearer token", } -
Exemplo
request body{ "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "luisa_password", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" } } -
Exemplo
response body{ "_id": "6264bfcebab4601fd42c7181", "name": "Luisa", "lastName": "Oliveira", "email": "luisa@email.com", "contact": "+5511987654321", "password": "$2b$10$/GolCC1IhMuhc4RCReOBdOHMcG3/0qAD2TLVgflxH.T3gcJ0nGRaq", "address": { "street": "Av. Azaleia", "number": "1050A", "district": "Florestal", "zipcode": "01001000", "city": "Caetanopolis", "state": "MG", "country": "Brasil" }, "balance": 0, "transactions": [] }
Retorna status 200 e o usuario com o saldo e as transações atualizadas.
Obs: Apenas 3 tipos de transações estao disponiveis, sao elas "payment", "transfer" e "deposit"
Obs2: Ambos usuarios precisam estar cadastrados para essa operação
Obs3: Caso nao haja saldo na conta para as operaçoes "transfer" e "payment" o usuario fica em debito e com saldo negativo
-
Exemplo
request headers{ "Authorization": "bearer token", } -
Exemplo
request body{ "type": "transfer", "receiver": { "name": "Maria", "lastName": "Oliveira", "email": "maria@email.com", "contact": "+5511987654321" }, "transmitter": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "amount": 100 } -
Exemplo
request body{ "type": "deposit", "receiver": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "transmitter": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "amount": 60 } -
Exemplo
request body{ "type": "payment", "receiver": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "transmitter": { "name": "Maria", "lastName": "Oliveira", "email": "maria@email.com", "contact": "+5511987654321" }, "amount": 500 } -
Exemplo
response body{ "_id": "6264c85fbab4601fd42c718d", "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741", "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO0eFeos76KTfw8Huxtkx4CYUTRLW7.GG", "address": { "street": "Rua das Flores", "number": "500", "district": "Santo Agostinho", "zipcode": "01001000", "city": "Belo Horizonte", "state": "MG", "country": "Brasil" }, "balance": 200, "transactions": [ { "type": "deposit", "receiver": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "transmitter": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "amount": 50, "date": "2022-04-24T04:29:02.860Z" }, { "type": "transfer", "receiver": { "name": "Maria", "lastName": "Oliveira", "email": "maria@email.com", "contact": "+5511987654321" }, "transmitter": { "name": "Pedro", "lastName": "Pereira", "email": "pedro@email.com", "contact": "+5511963852741" }, "amount": 50, "date": "2022-04-24T04:46:56.840Z" }, ] }
- Exemplo
request headers{ "Authorization": "bearer token", }
Retorna status 204 sem body.
- Exemplo
response body[]