Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
370 commits
Select commit Hold shift + click to select a range
61cd5b2
feat: add updateAccesstokenRepo and link to DbAuth
joismar Feb 27, 2022
1bf55bc
test: ensure DbAuth call UpdateAccessTokenRepo with correct values
joismar Feb 27, 2022
40b2d2d
test: ensure DbAuth throw if UpdateAccessTokenRepo throw an error
joismar Feb 27, 2022
5ed97f2
refactor: optimize imports
joismar Feb 27, 2022
7f5bd12
refactor: refactor encript names to hash
joismar Feb 27, 2022
3009f65
feat: ensure bcrypt adapter calls bcrypt comapre with correct values
joismar Feb 27, 2022
627cb73
test: ensure bcryptAdapter return true on compare success
joismar Feb 27, 2022
f5ceafc
feat: ensure BcriptAdapter.compare return false in BcriptAdapter.comp…
joismar Feb 27, 2022
83207c3
test: ensure BcriptAdapter.compare return false in BcriptAdapter.comp…
joismar Feb 27, 2022
f508a65
test: ensure BrciptAdapter throws if BcriptAdapter.compare throws
joismar Feb 27, 2022
f116629
feat: add jwt
joismar Feb 27, 2022
cc5d25a
tests: add jwt tests
joismar Feb 27, 2022
02190fd
refactor: change load to getUserByEmail
joismar Feb 27, 2022
1889d04
refactor: change load to get
joismar Feb 27, 2022
05e3159
refactor: change load to get
joismar Feb 27, 2022
312d2d9
feat: create user map for firebase helper
joismar Feb 27, 2022
8a03a02
feat: add getByEmail and updateAccessToken to firestore repo
joismar Feb 27, 2022
2f7f07b
test: create getByEmail and updateAccessToken tests
joismar Feb 27, 2022
a719379
refactor: update some names
joismar Feb 27, 2022
a52f47d
refactor: refactor constructors
joismar Feb 27, 2022
ee51c09
refactor: names and email validator adapter
joismar Feb 27, 2022
4281018
refactor: some renamings
joismar Feb 27, 2022
5f68d8a
refactor: move signup factories to a folder
joismar Feb 27, 2022
c25a994
refactor: change login to auth
joismar Feb 27, 2022
3d91d80
refactor: refator auth tests and correct names of calls
joismar Feb 27, 2022
7a68299
refactor: refactoring auth tests and auth to Validation Composite
joismar Feb 27, 2022
1b95b8c
refactor: change controller names
joismar Feb 27, 2022
2d31c2b
feat: create auth factory
joismar Feb 27, 2022
54b1dd1
feat: create auth validation factory
joismar Feb 27, 2022
75b51f2
test: create auth validations test
joismar Feb 27, 2022
9cd35ee
refactor: ensure that firestore connect never call initialize again
joismar Feb 27, 2022
dc3aadb
feat: add login route
joismar Feb 27, 2022
db56c48
test: create POST /auth tests
joismar Feb 27, 2022
6547e76
refactor: some refatorings
joismar Feb 27, 2022
2371841
refactor: ensure 100% of coverage
joismar Feb 28, 2022
b819e57
chore: update package.json
joismar Feb 28, 2022
371f9f7
feat: add BudgetController
joismar Feb 28, 2022
7290900
test: budget - ensure integration with addBudget and Validation
joismar Feb 28, 2022
8aa72ae
test: fail and success
joismar Feb 28, 2022
5479bef
refactor: corrects name of describe
joismar Feb 28, 2022
3aad482
refactor: correct tests
joismar Feb 28, 2022
079da56
feat: prepare addBudget in data and domain layer
joismar Feb 28, 2022
dc600f5
test: make addBudgetRepo tests
joismar Feb 28, 2022
f842e7a
feat: create budgetFirestore and some budget interfaces
joismar Feb 28, 2022
92a9332
refactor: remove map in firestore helper
joismar Feb 28, 2022
7980829
test: create integration tests for Budget Repo
joismar Feb 28, 2022
1dda8b7
refactor: change controller names
joismar Feb 28, 2022
c42d454
feat: compose budget validations
joismar Feb 28, 2022
8666d96
test: make tests for budget validations
joismar Feb 28, 2022
9745256
refactor: renaming files
joismar Feb 28, 2022
f4a340c
feat: create budget route
joismar Feb 28, 2022
0ecb560
tests: create budget routes tests
joismar Feb 28, 2022
150906b
feat: make SignupController returns token
joismar Feb 28, 2022
5ff782e
test: tests with authetication in signup controller
joismar Feb 28, 2022
2e6fd35
refactor: create new factories for factories
joismar Feb 28, 2022
5b9e3ed
fix: dbAddUser with strange code
joismar Feb 28, 2022
706735c
feat: verify if email alread exists
joismar Feb 28, 2022
8234a72
test: ensure integration with getByEmail repo
joismar Feb 28, 2022
a3f5e74
fix: inject firestoreRepo in DbAddUser
joismar Feb 28, 2022
8fee285
refactor: create error middleware for express side errors
joismar Feb 28, 2022
f99769f
refactor: change some budget field names
joismar Feb 28, 2022
46f794a
refactor: change more fieldnames
joismar Feb 28, 2022
0501252
feat: make delete budget controller
joismar Feb 28, 2022
983e7eb
test: make tests for budget controller
joismar Feb 28, 2022
10128a8
feat: finalize budget delete feature
joismar Feb 28, 2022
e463663
test: make tests for dbDeleteBudget
joismar Feb 28, 2022
9420187
refactor: change budget field names
joismar Feb 28, 2022
118c7fc
fix: delete field validations
joismar Feb 28, 2022
0f3f2a9
test: make delete validations test
joismar Feb 28, 2022
87ff3a9
refactor: create notfound middleware
joismar Feb 28, 2022
f208e37
test: create delete test routes
joismar Feb 28, 2022
2ed2047
chore: update package.json
joismar Feb 28, 2022
0a70138
feat: expense domain and presentation
joismar Feb 28, 2022
b5569ec
test: create add expense controller tests
joismar Feb 28, 2022
4023e9c
refactor: add budgetId field to a expense
joismar Feb 28, 2022
2130a12
feat: create data and domain files for addExpense
joismar Feb 28, 2022
1bbd789
test: create tests for dbAddExpense
joismar Feb 28, 2022
cc09f2e
refactor: add expends to BudgetModel
joismar Feb 28, 2022
b434571
feat: add expenseFirestoreRepo, improve budgetFirestoreRepo and updat…
joismar Feb 28, 2022
262881d
test: create tests for expenseFirestoreRepo
joismar Feb 28, 2022
84ada96
refactor: move files to folders
joismar Feb 28, 2022
60c0f90
feat: create expense main factories
joismar Feb 28, 2022
a4cbceb
test: ensure ExpenseValiadtion factory call Validation with all valid…
joismar Feb 28, 2022
ac8638a
fix: wrong controller name
joismar Feb 28, 2022
beb99b0
fix: change field validation
joismar Feb 28, 2022
0390e63
feat: create addExpense route
joismar Feb 28, 2022
7d8cfb8
test: create AddExpense routes test
joismar Feb 28, 2022
9c69c4e
chore: update readme
joismar Feb 28, 2022
967dce2
feat: create acces token middleware files
joismar Feb 28, 2022
1e30aef
test: ensure success and fail case for auth middleware
joismar Feb 28, 2022
f687a65
test: ensure authmiddleware returns forbidden if getuserbytoken retur…
joismar Feb 28, 2022
a8f641f
feat: return an userId
joismar Feb 28, 2022
c894409
test: ensure AuthMiddleware returns 200 in success
joismar Feb 28, 2022
9fe4873
feat: try catch
joismar Feb 28, 2022
862ae7e
test: ensure AuthMiddleware return 500 if GetUserByToken throw an error
joismar Feb 28, 2022
6218817
feat: pass role
joismar Feb 28, 2022
6043bc0
test: adda role to tests
joismar Feb 28, 2022
13e2303
feat: create dbGetUserByToken and decrypt interfaces
joismar Feb 28, 2022
e602232
test: ensure DbGetUserByYoken call Decrypter with correct values
joismar Feb 28, 2022
745a83f
refactor: separate repo in folders
joismar Mar 1, 2022
bd1cc1d
feat: create tests with decrypter
joismar Mar 1, 2022
ef76a0b
tests: create tests with decrypter
joismar Mar 1, 2022
8810c88
test: ensure DbGetUserByToken returns null if getUserByToken returns …
joismar Mar 1, 2022
54f5f6d
feat: ensure dbGetUserByToken return an user
joismar Mar 1, 2022
4312ad6
test: ensure dbGetUserByToken return an user
joismar Mar 1, 2022
a16945a
test: test exceptions
joismar Mar 1, 2022
e55d753
refactor: improve tests visualization
joismar Mar 1, 2022
4e2ec6e
add decrypt to JWTAdapter
joismar Mar 1, 2022
bfbddff
test: create JWT tests for verify
joismar Mar 1, 2022
a91ece1
refactor: refactoring budgetRepo tests
joismar Mar 1, 2022
0e95c66
feat: add getUserByToken in userFirestoreRepo
joismar Mar 1, 2022
478c90b
feat: create auth middleware
joismar Mar 1, 2022
0510dec
refactor: some refatorings
joismar Mar 1, 2022
c30b383
test: ensure budget routes tests work with middleware
joismar Mar 1, 2022
b1f354b
test: integrate accesstoken to bdget routes test
joismar Mar 1, 2022
32df0c9
refactor: make big refactor for coverage pass
joismar Mar 1, 2022
b98bb53
refactor: organize some folders
joismar Mar 1, 2022
417369f
refactor: resolve conflicts
joismar Mar 1, 2022
ecf474f
Merge branch 'feature/expense' into develop
joismar Mar 1, 2022
b4de2a7
chore: restaure test:staged
joismar Mar 1, 2022
c10bdc8
test: create tests for inviteController
joismar Mar 1, 2022
2e3aa62
feat: create files for domain, data and infra for invite resource
joismar Mar 1, 2022
0489d4a
test: create tests for invite repository and use case
joismar Mar 1, 2022
bcafe82
feat: compose AddInvite Validation
joismar Mar 1, 2022
a5b08a7
test: ensure AddInvite Validation call Validation with all validations
joismar Mar 1, 2022
2923feb
fix: fix addInviteController name
joismar Mar 1, 2022
a093cc9
fix: fix validation fieldName
joismar Mar 1, 2022
d15a241
feat: create AddInviteController factory and create routes
joismar Mar 1, 2022
60b8e7d
test: AddInvite route tests
joismar Mar 1, 2022
87e59ea
chore: update readme
joismar Mar 1, 2022
23382a6
Merge branch 'feature/invite' into develop
joismar Mar 1, 2022
cf222db
chore: add swagger
joismar Mar 1, 2022
c699acf
chore: prepare for build
joismar Mar 1, 2022
93cbe9b
refactor: remove fastglobe for fix route import in build
joismar Mar 1, 2022
cdccec2
chore: update tsconfig.json
joismar Mar 1, 2022
20ad7d4
chore: add a dockerfile
joismar Mar 1, 2022
5b0ceb0
chore: add docker-compose
joismar Mar 1, 2022
da5d8fa
chore: updatete docker-compose & packaje.json
joismar Mar 1, 2022
7581b9c
feat: disable cache for swagger
joismar Mar 1, 2022
9e0f26d
chore: add nodemon with sucrase
joismar Mar 1, 2022
a244a2d
doc: create documentation
joismar Mar 1, 2022
db48b1b
chore: update readme
joismar Mar 1, 2022
4117eb7
refactor: change nomenclatures
joismar Mar 1, 2022
b461c83
fix: change userid
joismar Mar 1, 2022
47ca8b3
feat: ensure InviteRepo returns null if user to not found
joismar Mar 1, 2022
148616f
test: ensure InviteRepo return null if to_user_id not found
joismar Mar 1, 2022
feea1cd
feat: ensure AddInviteController returns 400 if to user not found
joismar Mar 1, 2022
c714818
test: ensure AddInviteController return 400 if AddInvite returns null
joismar Mar 1, 2022
5842b13
refactor: refatoring delete budget tests
joismar Mar 1, 2022
8650816
feat: create GetExpensesByBudgetController
joismar Mar 1, 2022
3ada0a7
test: create tests for GetExpensesByBudget
joismar Mar 1, 2022
f08fba3
fix: budget field name
joismar Mar 1, 2022
e5c38f7
refactor: change method name
joismar Mar 1, 2022
e4a585d
feat: create files for data and infra
joismar Mar 1, 2022
b4674e3
fix: ensure getBudgetById do not return a promise
joismar Mar 1, 2022
769ffb1
feat: optimize methods
joismar Mar 2, 2022
54b5ca7
test: create tests for infra and data layer
joismar Mar 2, 2022
68875e6
refactor: make refatorings for coverage
joismar Mar 2, 2022
041cf5c
feat: add disconnect to a firestore helper
joismar Mar 2, 2022
ca92805
test: fix invite routes test
joismar Mar 2, 2022
ae188c3
feat: verify if budget is of logged user
joismar Mar 2, 2022
b6ede53
feat: finalize use case Get Expense By Budget
joismar Mar 2, 2022
8f4fd9f
refactor: some fixes and refators
joismar Mar 2, 2022
0de2726
feat: add get expenses by budget route
joismar Mar 2, 2022
8cf1441
test: create expense routes but comment because its pass in postman b…
joismar Mar 2, 2022
dcedf39
refactor: some micro refactors
joismar Mar 2, 2022
1c1c531
chore: update docs and package.json
joismar Mar 2, 2022
c8666cf
fix: fix specs
joismar Mar 2, 2022
99b0020
chore: update Swagger Docs
joismar Mar 2, 2022
d6b0ba1
chore: update docs
joismar Mar 2, 2022
91a8b31
fix: remove call for future implementations
joismar Mar 2, 2022
46571e5
fix: dawn of infernal build, because less than one line
joismar Mar 2, 2022
2e0d6b4
chore: definitely create build files
joismar Mar 2, 2022
f40ff11
chore: update tsconfig
joismar Mar 2, 2022
9dbad5c
feat: create files for UpdateExpense useCase and Controller
joismar Mar 2, 2022
5375272
test: create tests for UpdateExpense useCase and Controller
joismar Mar 2, 2022
c17e9ca
feat: create UpdateExpense files for data layer
joismar Mar 2, 2022
baa77af
test: create tests for dbUpdateExpense
joismar Mar 2, 2022
8c8dbaa
refactor: update spec references
joismar Mar 2, 2022
bf5f975
feat: add update on ExpenseFirestoreRepo
joismar Mar 2, 2022
8b5f888
test: create update tests for ExpenseFirestoreRepo
joismar Mar 2, 2022
6843cfe
feat: ensure expense update controller call with correct values
joismar Mar 2, 2022
adc3b05
test: ensure expense update controller call with correct values
joismar Mar 2, 2022
9811770
create UpdateExpense validations
joismar Mar 2, 2022
38cfa29
test: create tests for UpdateExpense Validations
joismar Mar 2, 2022
73ec763
feat: create UpdateExpenseController Factory and add route
joismar Mar 3, 2022
9ec5f79
test: test expense put routes
joismar Mar 3, 2022
0221573
doc: update readme
joismar Mar 3, 2022
25304c4
feat: create DeleteInvite Controller and DeleteInvite use case
joismar Mar 3, 2022
7b41293
test: create tests for DeleteInviteController
joismar Mar 3, 2022
9a771d3
feat: add approved field to invite
joismar Mar 3, 2022
dc1e34d
feat: add aproved field to specs
joismar Mar 3, 2022
f23c9a2
feat: add repo, useCase and method delete to invite firestore repo
joismar Mar 3, 2022
ce25241
test: create tests for data and infra layers for DeleteInvite use case
joismar Mar 3, 2022
aad310b
refactor: change DeleteController return
joismar Mar 3, 2022
e24aef7
feat: create DeleteInvite Validation Factory
joismar Mar 3, 2022
c25645d
test: create DeleteInvite Validation tests
joismar Mar 3, 2022
3301af1
feat: create DeleteInvite Controller Factory and routes
joismar Mar 3, 2022
44a9e07
test: create DeleteInvite routes tests
joismar Mar 3, 2022
0b2f2a3
refactor: optimize Firestore calls
joismar Mar 3, 2022
b559294
docs: update docs
joismar Mar 3, 2022
9540518
chore: update api docs
joismar Mar 3, 2022
6ee6807
refactor: update invite model field approved to status
joismar Mar 3, 2022
7bb2a96
feat: create invite update status controller
joismar Mar 3, 2022
8b99e7c
test: create updateInviteStatus controller tests
joismar Mar 3, 2022
3e95e6a
refactor: change update invite returns
joismar Mar 4, 2022
1a99350
feat: create files for UpdateInviteStatus data layer
joismar Mar 4, 2022
76bd323
test: create tests for UpdateInviteStatus data layer
joismar Mar 4, 2022
9f47a74
feat: create updateStatus method for inviteFirestoreRepo
joismar Mar 4, 2022
f4207d3
test: create tests for updateStatus method of inviteFirestoreRepo
joismar Mar 4, 2022
d32841b
refactor: change fields for validation
joismar Mar 4, 2022
5a3b427
feat: create UpdateInvite factories
joismar Mar 4, 2022
f3d0293
test: create status update validations tests
joismar Mar 4, 2022
4b718d3
feat: create update status route
joismar Mar 4, 2022
10790a5
tests: create update status routes test
joismar Mar 4, 2022
0039edc
feat: create validator for id fields
joismar Mar 4, 2022
06e8b44
test: tests for identity validation
joismar Mar 4, 2022
4f1d1fb
feat: create getInvites controller
joismar Mar 4, 2022
4e60da0
test: create tests for getInvites controller
joismar Mar 4, 2022
491a58f
feat: create and update files for getInvites data and domain layers
joismar Mar 4, 2022
9cfb935
test: tests for dbGetInvite repo
joismar Mar 4, 2022
19ee832
feat: create getAll method for invite firestore repo and add unit:v (…
joismar Mar 5, 2022
d1a3ed8
test: create tests for getAll method in invite firestore repo
joismar Mar 5, 2022
c4adb88
feat: create getInvites Controller and routes
joismar Mar 5, 2022
9528add
test: create tests for get invites routes
joismar Mar 5, 2022
e73f03c
chore: update readme
joismar Mar 5, 2022
fd7f1f7
chore: update version and readme
joismar Mar 5, 2022
37cb527
fix: fix update status result
joismar Mar 5, 2022
fac495e
fix: fix when toMe received as string and converts to boolean
joismar Mar 5, 2022
d4d0dbd
fix: fix delete budget returns
joismar Mar 5, 2022
ab680dc
fix: field validations strange comportament
joismar Mar 5, 2022
c5d4440
fix: update expense not returning properly
joismar Mar 5, 2022
afd4896
fix: invite routes correct appointment
joismar Mar 5, 2022
7f3f057
fix: get user returning aways first user
joismar Mar 5, 2022
f39ac9e
refactor: remove date field as required
joismar Mar 5, 2022
9378ec6
refactor: remove console.log
joismar Mar 5, 2022
8a53fef
doc: update docs
joismar Mar 5, 2022
92e5981
refactor: remove console.log -.-
joismar Mar 5, 2022
c8f9fd3
fix: some fixes for addInvite useCase
joismar Mar 5, 2022
4c0f62c
fix: some fixes for invite firestore repo
joismar Mar 5, 2022
e5adac1
fix: expense reference in firestore repo
joismar Mar 5, 2022
73c543c
doc: update readme
joismar Mar 5, 2022
b1e5547
chore: add codecov file
joismar Mar 5, 2022
c327819
chore: rollback codecov
joismar Mar 5, 2022
bff410d
chore: update readme
joismar Mar 5, 2022
e87147c
chore: update readme
joismar Mar 5, 2022
b5b6a07
refactor: comment unused code
joismar Mar 5, 2022
12fcaeb
chore: update readme
joismar Mar 5, 2022
d4790b2
Update README.md
joismar Mar 5, 2022
a8b18d8
Update README.md
joismar Mar 6, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
dist
17 changes: 17 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"extends": [
"plugin:@typescript-eslint/recommended"
],
"parserOptions": {
"project": "./tsconfig.json"
},
"rules": {
"@typescript-eslint/camelcase": "off",
"@typescript-eslint/quotes": "off",
"@typescript-eslint/strict-boolean-expressions": "off",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/no-explicit-any": "off"
}
}
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# config
.vscode
keys
.env

# node
node_modules

# tests
coverage

# build
dist
4 changes: 4 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged
4 changes: 4 additions & 0 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npm run test:coverage
6 changes: 6 additions & 0 deletions .lintstagedrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"*.ts": [
"eslint 'src/**' --fix",
"npm run test:staged"
]
}
8 changes: 8 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM node:16
WORKDIR /app
COPY ./package.json .
RUN npm install --only=prod
COPY ./dist ./dist
COPY ./keys ./keys
EXPOSE 6060
CMD npm start
9 changes: 9 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: "3"
services:
api:
container_name: api-container
build: .
image: node-ts-api
restart: always
ports:
- "6060:6060"
96 changes: 96 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# NodeJS Budget Manager API
### API para gerenciamento e controle de gastos mensais.
A API foi criada seguindo os principios de TDD, SOLID o máximo possível, Clean Architeture e Clean Code o máximo possível, a idéia era manter todo o código desacoplado afim de facilitar manutenção e prover legibilidade e coesão do código.

---
## 🤔 Problema

Sérgio é um desenvolvedor Frontend e está trabalhando em um projeto pessoal para ajudá-lo a controlar suas finanças e precisa da sua ajuda. Sérgio tem problema com seus gastos. Durante o mês ele gasta mais do que deveria e por isso resolveu criar uma aplicação web que ajude-o a ter um melhor controle financeiro.

---

## 🚀 Escopo

Para ajudar Sérgio a desenvolver seu projeto, ele precisa que você elabore um backend que ele possa consumir para finalizar o seu sistema.

---

## 🔎 Casos de Uso
(Legenda: ✅ Criado, 📝 Documentado, ⬜ Pendente)
- ✅ 📝 Autenticação e acesso à plataforma.
- ✅ 📝 Criação de orçamento mensal.
- ✅ 📝 Registro de gastos.
- ✅ 📝 Visualização de gastos.
- ✅ 📝 Atualização de gasto.

Para conseguir seguir o seu orçamento de gastos Sérgio poderá compartilhar o seu progresso com outros usuários e para isso precisará dos seguintes recursos:

- ✅ 📝 Enviar convite de acompanhamento para usuários já cadastrados na plataforma.
- ✅ 📝 Cancelar um convite.
- ✅ 📝 Aprovar uma solicitação de convite.
- ✅ 📝 Rejeitar um solicitação de convite.
- ✅ 📝 Visualizar convites recebidos.
- ✅ 📝 Visualizar convites enviados.

**Obs.:** Um convidado deve **apenas poder <u>visualizar</u>** o progresso do orçamento mensal. (NÃO IMPLEMENTADO)

---
## ✅ Extras Task List

- ✅ Documentação em Swagger.
- ✅ Docker.

---
## ✔️ Implementações futuras
- ⬜ ⬜ Deletar gastos criados.
- ⬜ ⬜ Visualizar gastos compartilhados com o usuário.
- ⬜ ⬜ Integrar validador para não permitir alterações em documentos que não pertence ao usuário.
- ⬜ ⬜ Atualizar total do orçamento automaticamente.
- ⬜ ⬜ Fazer autenticação nativa do Firebase.
- ⬜ ⬜ Otimizar testes de integração do Firebase.
- ⬜ ⬜ Atualizar e retornar o token na header em todas as requisições que precisam de autenticação.
- ⬜ ⬜ Adicionar expiresIn no token.
- ⬜ ⬜ Criar recursos administrativos.


---
## 👁️ Cobertura de Testes
**98.76%** Statements `481/487` | **95.08%** Branches `58/61` | **99.21%** Functions `126/127` | **99.11%** Lines `446/450` <p>
Test Suites *(passed/total)* **53**/53 | Tests *(passed/total)* **220**/220

---
## 🗂️ Estrutura de Pastas
![](folder_structure.png)

---
## 🧱 Tecnologias utilizadas

- Node.js com Typescript.
- Firestore.
- Testes automatizados com Jest.
- Arquitetura REST.
- Swagger.
- Docker.
- Husky para pre-commit e pre-push scripts.
---
## 💻 Executando e Desenvolvendo
Para setup de desenvolvimento basta fazer seguir os passos a seguir:
1. Clone do repositório.
2. Executar `npm install`
3. Caso deseje usar o Husky execute `npx husky install`
4. Copiar a chave do Firestore para ./keys
5. Executar `npm run dev`

---

## 🚀 Build de Produção (docker)
Execute `npm run up`

---
## 🔍 Testes
- Testes de unidade com `npm run test:unit`
- Testes de integração com `npm run test:integration`
- Para executar o coverage execute `npm run test:coverage`



174 changes: 174 additions & 0 deletions docs/TESTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
- Controllers
- AuthController
- Garantir que o retorno seja 500 caso a autenticação estoure um erro.
- Garantir que o método Authentication.auth seja chamado com os parâmetros corretos.
- Garantir que o retorno seja de 401 caso o usuário não seja encontrado.
- Garantir que o retorno 200 se sucesso.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- SignUp/Login
- Garantir que o retorno seja 500 caso a autenticação estoure um erro.
- Garantir que o método de AddUser.add seja chamado com os parâmetros corretos.
- Garantir que o retorno seja de 403 caso o AddUser retorno nulo.
- Garantir que o retorno 200 se sucesso.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o método Authentication.auth seja chamado com os parâmetros corretos.
- Garantir que o retorno seja 500 caso Authentication.auth estoure um erro.
- AddBudget
- Garantir que AddBudget.add seja chamado com os valores corretos.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o retorno seja 500 caso AddBudget.add estoure um erro.
- Garantir que o retorno 200 se sucesso.
- DeleteBudget
- Garantir que DeleteBudget.deleteById seja chamado com os valores corretos.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o retorno seja 500 caso DeleteBudget.deleteById estoure um erro.
- Garantir que o retorno 200 se sucesso.
- AddExpense
- Garantir que AddExpense.add seja chamado com os valores corretos.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o retorno seja 500 caso AddExpense.add estoure um erro.
- Garantir que o retorno 200 se sucesso.
- GetExpensesByBudget
- Garantir que GetExpensesByBudget.getByBudget seja chamado com os valores corretos.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o retorno seja 500 caso GetExpensesByBudget.getByBudget estoure um erro.
- Garantir que o retorno 200 se sucesso.
- SendInvite
- Garantir que AddInvite.add seja chamado com os valores corretos.
- Garantir que o retorno seja 400 caso AddInvite.add retorne nulo.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o retorno seja 500 caso AddInvite.add estoure um erro.
- Garantir que o retorno 200 se sucesso.
- DeleteInvite
- Garantir que metodo delete seja chamado com os valores corretos.
- Garantir que o retorno seja 500 caso delete estoure um erro.
- Garantir que o Validation seja chamado com os valores corretos.
- Garantir que o retorno seja de 400 caso a validação falhe.
- Garantir que o retorno 200 se sucesso.
- Validations
- EmailValidation
- Garantir que o Validation estoure um erro caso o Validator estoure.
- Garantir que o Validator seja chamado com o email correto.
- Middlewares
- AuthMiddleware
- Garantir que o retorno seja 403 se o parametro x-access-token não exista na headers.
- Garantir que o GetUserByToken seja chamado com os valores corretos.
- Garantir que o retorno seja 403 se GetUserByToken retornar nulo.
- Garantir que o retorno seja 200 se GetUserByToken retornar um usuario.
- Garantir que o retorno seja 500 caso GetUserByToken.getByToken estoure um erro.
- ContentType
- Garantir que o conteudo seja retornado em JSON.
- ContentType
- Garantir que o conteúdo chegue em JSON.
- Cors
- Garantir que esteja habilitado.
- Casos de Uso
- AddBudget
- Garantir que o método add seja chamado com os valores corretos.
- Garantir que estoure um erro caso o add estoure.
- Garantir que seja retornado um budget.
- DeleteBudget
- Garantir que o método deleteById seja chamado com os valores corretos.
- Garantir que estoure um erro caso o deleteById estoure.
- Garantir que seja retornado um void quando sucesso.
- AddExpense
- Garantir que o método add seja chamado com os valores corretos.
- Garantir que estoure um erro caso o add estoure.
- Garantir que seja retornado uma expense.
- GetExpensesByBudget
- Garantir que o método getByBudget seja chamado com os valores corretos.
- Garantir que estoure um erro caso o getByBudget estoure.
- Garantir que seja retornado uma lista de expenses.
- AddUser
- Garantir que o método add seja chamado com os valores corretos.
- Garantir que estoure um erro caso o add estoure.
- Garantir que seja retornado um usuario.
- Garantir a integração com o Hasher.
- Garantir que estoure um erro caso o Hasher estoure.
- Garantir que irá retornar nulo caso o getUserByEmail retorne nulo.
- Garantir que o getUserByEmail será chamado com os valores corretos.
- Authentication
- Garantir que o getUserByEmail será chamado com o email correto.
- Garantir que irá estourar erro caso o getUserByEmail estoure.
- Garantir que irá retornar nulo caso o getUserByEmail retorne nulo.
- Garantir que irá chamar o HashComparer com as senhas corretas.
- Garantir que irá estourar erro caso o HashComparer estoure.
- Garantir que irá retornar nulo caso o HashComparer retorne nulo.
- Garantir que irá chamar o TokenGenerator com o id correto.
- Garantir que irá estourar erro caso o TokenGenerator estoure.
- Garantir que irá retornar um accessToken caso o TokenGenerator em sucesso.
- Garantir que irá chamar o UpdateAccessTokenRepo com os valores corretos.
- Garantir que irá estourar erro caso o UpdateAccessTokenRepo estoure.
- GetUserByToken
- Garantir que o Decrypter será chamado com os valores corretos.
- Garantir que irá estourar erro caso o Decrypter estoure.
- Garantir que irá retornar nulo caso o Decrypter retorne nulo.
- Garantir que o getUserByToken será chamado com os valores corretos.
- Garantir que irá estourar erro caso o getUserByToken estoure.
- Garantir que irá retornar nulo caso o getUserByToken retorne nulo.
- Garantir que retorne um usuário no sucesso.
- Repositorios
- BudgetFirestoreRepo
- Garantir que irá retornar um budget com o método add.
- Garantir que irá retornar um budget com o método getById.
- Garantir que irá retornar nulo no getById quando não existir.
- Garantir que irá retornar um id no método deleteById.
- Garantir que irá retornar nulo no deleteById quando não existir.
- ExpenseFirestoreRepo
- Garantir que irá retornar um expense com o metodo getById.
- Garantir que irá retornar nulo getById não encontrar nada.
- Garantir que irá retornar um id correto no método deleteById.
- Garantir que irá retornar nulo quando deleteById não encontrar nada.
- Garantir que o método getByBudget retorne um array de expenses.
- Garantir que o método getByBudget retorne um array de expenses vazio quando não encontrar.
- Garantir que o método add vai inserir a expense como subcoleção do seu budget.
- Garantir que o método add vai retornar uma expense.
- Garantir que o método add vai retornar nulo se não encontrar expense.
- FiresoreHelper
- Garantir que irá se conectar a sessão caso o getCollection seja chamado sem ser conectado.
- InviteFirestoreRepo
- Garantir que irá retornar um invite com o método add.
- Garantir que irá retornar nulo caso o id do "to_user" não seja encontrado.
- UserFirestoreRepo
- Garantir que retorne um usuário no método add.
- Garantir que retorne um usuário no método getByEmail.
- Garantir que retorne nulo quando falhar.
- Garantir que retorne um accessToken quando chamar updateAccessToken.
- Garantir que um usuário seka retornado com getByToken metodo (sem role)
- Garantir que um usuário seka retornado com getByToken metodo (com role)
- Garantir que o método getByToken retornará um usuário.
- Garantir que o método getByToken reorne nulo se falhar.
- Security
- BcryptAdapter
- Garantir que o hash seja chamado com os valores corretos.
- Garantir que o hash retorne um hash.
- Garantir que estoure um erro caso o hash estoure.
- Garantir que o compare seja chamado com os valores corretos.
- Garantir que o compare retorne um true.
- Garantir que o compare retorne um false se falhar.
- Garantir que estoure um erro caso o compare estoure.
- JWTAdapter
- Garantir que o sign seja chamado com os valores corretos.
- Garantir que o sign retorne um token.
- Garantir que estoure um erro caso o sign estoure.
- Garantir que o verify seja chamado com os valores corretos.
- Garantir que o verify retorne u valor correto.
- Garantir que estoure um erro caso o verify estoure.
- Validations
- Garantir que todos os controllers chamem as validaçoes corretas.
- EmailValidatorAdapter
- Garantir que o isEmail seja chamado com os valores corretos.
- Garantir que o isEmail retorne um true se o email tiver correto.
- Garantir que estoure um erro caso o isEmail estoure.
- LogControllerDecorator
- Garantir que o métopdo handle seja chamado.
- Garantir que o retorno seja o mesmo do Controller.
- Routes
- Garantir que todas as rotas sejam chamadas corretamente.
Binary file added docs/folder_structure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions jest-integration.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const config = require('./jest.config')

config.testMatch = ['**/*.test.ts']

module.exports = config
5 changes: 5 additions & 0 deletions jest-unit.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const config = require('./jest.config')

config.testMatch = ['**/*.spec.ts']

module.exports = config
12 changes: 12 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
roots: ['<rootDir>/tests'],
collectCoverageFrom: [
'<rootDir>/src/**/*.ts',
'!<rootDir>/src/main/**',
],
coverageDirectory: 'coverage',
testEnvironment: 'node',
transform: {
'.+\\.ts$': 'ts-jest'
}
}
5 changes: 5 additions & 0 deletions nodemon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"execMap":{
"ts": "node -r sucrase/register"
}
}
Loading