├── .gitignore ├── aula-02 ├── bdd │ ├── exemplo │ │ ├── cucumber.js │ │ ├── features │ │ │ ├── is_it_friday_yet.feature │ │ │ └── step_definitions │ │ │ │ └── stepdefs.js │ │ ├── package-lock.json │ │ └── package.json │ └── readme.md ├── ddd │ └── readme.md ├── poo │ └── readme.md ├── readme.md ├── solid │ └── readme.md ├── tdd │ ├── assets │ │ └── tdd-01.png │ └── readme.md └── uml │ ├── assets │ ├── uml-01.png │ ├── uml-02.png │ ├── uml-03.png │ ├── uml-04.png │ ├── uml-05.png │ ├── uml-06.png │ ├── uml-07.png │ └── uml-08.png │ └── readme.md ├── aula-04 └── abstract_factory │ ├── assets │ ├── uml_01.png │ ├── uml_02.png │ └── uml_03.png │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── Boleto.ts │ ├── CalculoFactory.ts │ ├── Desconto.ts │ ├── Juros.ts │ ├── Multa.ts │ ├── bancodobrasil │ │ ├── BBCalculoFactory.ts │ │ ├── BBDesconto.ts │ │ ├── BBJuros.ts │ │ └── BBMulta.ts │ ├── caixa │ │ ├── CaixaCalculoFactory.ts │ │ ├── CaixaDesconto.ts │ │ ├── CaixaJuros.ts │ │ └── CaixaMulta.ts │ └── main.ts │ └── tsconfig.json ├── aula-07 └── adapter │ ├── assets │ └── uml_01.png │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── Cobranca.ts │ ├── Gateway.ts │ ├── MercadoPagoAdapter.ts │ ├── PagarmeAdapter.ts │ ├── main.ts │ └── terceiros │ │ ├── MercadoPage.ts │ │ └── Pagarme.ts │ └── tsconfig.json ├── aula-08 └── bridge │ ├── assets │ └── uml_01.png │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── Mensagem.ts │ ├── MensagemAdminEmail.ts │ ├── MensagemAdminSMS.ts │ ├── MensagemUsuarioEmail.ts │ ├── MensagemUsuarioSMS.ts │ └── main.ts │ └── tsconfig.json ├── aula-09 └── composite │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── Arquivo.ts │ ├── Pasta.ts │ └── main.ts │ └── tsconfig.json ├── aula-10 └── chain-responsibility │ ├── assets │ └── uml_01.png │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── CalculadoraPontos.ts │ ├── Pedido.ts │ └── main.ts │ └── tsconfig.json ├── aula-11 └── observer │ ├── assets │ └── image.png │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── BotOfertasAmazon.ts │ ├── Elasticsearch.ts │ ├── MelhoOferta.ts │ ├── Observer.ts │ ├── Oferta.ts │ ├── Ofertas.ts │ ├── Produto.ts │ ├── Subject.ts │ └── main.ts │ └── tsconfig.json ├── aula-12 ├── assets │ └── uml_1.png ├── package-lock.json ├── package.json ├── src │ ├── Pedido.ts │ └── main.ts └── tsconfig.json └── aula-3 └── factory_method ├── assets ├── uml.png ├── uml_default.png ├── uml_v1.png ├── uml_v2.png └── uml_v3.png ├── package-lock.json ├── package.json ├── readme.md ├── src ├── BancoCaixa.ts ├── BancoCaixaBoleto10Dias.ts ├── BancoCaixaBoleto30Dias.ts ├── BancoCaixaBoleto60Dias.ts ├── Boleto.ts └── main.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /aula-02/bdd/exemplo/cucumber.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | default: `--format-options '{"snippetInterface": "synchronous"}'` 3 | } 4 | -------------------------------------------------------------------------------- /aula-02/bdd/exemplo/features/is_it_friday_yet.feature: -------------------------------------------------------------------------------- 1 | Feature: Is it Friday yet? 2 | Everybody wants to know when it's Friday 3 | 4 | Scenario: Sunday isn't Friday 5 | Given today is Sunday 6 | When I ask whether it's Friday yet 7 | Then I should be told "Nope" 8 | 9 | Scenario: Friday is Friday 10 | Given today is Friday 11 | When I ask whether it's Friday yet 12 | Then I should be told "TGIF" -------------------------------------------------------------------------------- /aula-02/bdd/exemplo/features/step_definitions/stepdefs.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | const { Given, When, Then } = require('cucumber'); 3 | 4 | const isItFriday = today => { 5 | if (today === "Friday") { 6 | return "TGIF"; 7 | } 8 | 9 | return 'Nope'; 10 | } 11 | 12 | Given('today is Sunday', function () { 13 | this.today = 'Sunday'; 14 | }); 15 | 16 | Given('today is Friday', function () { 17 | this.today = 'Friday'; 18 | }); 19 | 20 | When('I ask whether it\'s Friday yet', function () { 21 | this.actualAnswer = isItFriday(this.today); 22 | }); 23 | 24 | Then('I should be told {string}', function (expectedAnswer) { 25 | assert.equal(this.actualAnswer, expectedAnswer); 26 | }); -------------------------------------------------------------------------------- /aula-02/bdd/exemplo/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "exemplo", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "exemplo", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "cucumber": "^6.0.7" 13 | } 14 | }, 15 | "node_modules/@babel/runtime-corejs3": { 16 | "version": "7.25.0", 17 | "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.0.tgz", 18 | "integrity": "sha512-BOehWE7MgQ8W8Qn0CQnMtg2tHPHPulcS/5AVpFvs2KCK1ET+0WqZqPvnpRpFN81gYoFopdIEJX9Sgjw3ZBccPg==", 19 | "dev": true, 20 | "license": "MIT", 21 | "dependencies": { 22 | "core-js-pure": "^3.30.2", 23 | "regenerator-runtime": "^0.14.0" 24 | }, 25 | "engines": { 26 | "node": ">=6.9.0" 27 | } 28 | }, 29 | "node_modules/ansi-regex": { 30 | "version": "3.0.1", 31 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 32 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=4" 37 | } 38 | }, 39 | "node_modules/any-promise": { 40 | "version": "1.3.0", 41 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 42 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/assert-plus": { 47 | "version": "1.0.0", 48 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 49 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", 50 | "dev": true, 51 | "license": "MIT", 52 | "engines": { 53 | "node": ">=0.8" 54 | } 55 | }, 56 | "node_modules/assertion-error-formatter": { 57 | "version": "3.0.0", 58 | "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", 59 | "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", 60 | "dev": true, 61 | "license": "MIT", 62 | "dependencies": { 63 | "diff": "^4.0.1", 64 | "pad-right": "^0.2.2", 65 | "repeat-string": "^1.6.1" 66 | } 67 | }, 68 | "node_modules/balanced-match": { 69 | "version": "1.0.2", 70 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 71 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 72 | "dev": true, 73 | "license": "MIT" 74 | }, 75 | "node_modules/becke-ch--regex--s0-0-v1--base--pl--lib": { 76 | "version": "1.4.0", 77 | "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", 78 | "integrity": "sha512-FnWonOyaw7Vivg5nIkrUll9HSS5TjFbyuURAiDssuL6VxrBe3ERzudRxOcWRhZYlP89UArMDikz7SapRPQpmZQ==", 79 | "dev": true, 80 | "license": "SEE LICENSE IN LICENSE" 81 | }, 82 | "node_modules/bluebird": { 83 | "version": "3.7.2", 84 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 85 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 86 | "dev": true, 87 | "license": "MIT" 88 | }, 89 | "node_modules/brace-expansion": { 90 | "version": "1.1.11", 91 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 92 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 93 | "dev": true, 94 | "license": "MIT", 95 | "dependencies": { 96 | "balanced-match": "^1.0.0", 97 | "concat-map": "0.0.1" 98 | } 99 | }, 100 | "node_modules/cli-table3": { 101 | "version": "0.5.1", 102 | "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", 103 | "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", 104 | "dev": true, 105 | "license": "MIT", 106 | "dependencies": { 107 | "object-assign": "^4.1.0", 108 | "string-width": "^2.1.1" 109 | }, 110 | "engines": { 111 | "node": ">=6" 112 | }, 113 | "optionalDependencies": { 114 | "colors": "^1.1.2" 115 | } 116 | }, 117 | "node_modules/colors": { 118 | "version": "1.4.0", 119 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 120 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 121 | "dev": true, 122 | "license": "MIT", 123 | "engines": { 124 | "node": ">=0.1.90" 125 | } 126 | }, 127 | "node_modules/commander": { 128 | "version": "3.0.2", 129 | "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", 130 | "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", 131 | "dev": true, 132 | "license": "MIT" 133 | }, 134 | "node_modules/concat-map": { 135 | "version": "0.0.1", 136 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 137 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 138 | "dev": true, 139 | "license": "MIT" 140 | }, 141 | "node_modules/core-js-pure": { 142 | "version": "3.38.0", 143 | "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.0.tgz", 144 | "integrity": "sha512-8balb/HAXo06aHP58mZMtXgD8vcnXz9tUDePgqBgJgKdmTlMt+jw3ujqniuBDQXMvTzxnMpxHFeuSM3g1jWQuQ==", 145 | "dev": true, 146 | "hasInstallScript": true, 147 | "license": "MIT", 148 | "funding": { 149 | "type": "opencollective", 150 | "url": "https://opencollective.com/core-js" 151 | } 152 | }, 153 | "node_modules/core-util-is": { 154 | "version": "1.0.2", 155 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 156 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", 157 | "dev": true, 158 | "license": "MIT" 159 | }, 160 | "node_modules/cucumber": { 161 | "version": "6.0.7", 162 | "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.7.tgz", 163 | "integrity": "sha512-pN3AgWxHx8rOi+wOlqjASNETOjf3TgeyqhMNLQam7nSTXgQzju1oAmXkleRQRcXvpVvejcDHiZBLFSfBkqbYpA==", 164 | "deprecated": "Cucumber is publishing new releases under @cucumber/cucumber", 165 | "dev": true, 166 | "license": "MIT", 167 | "dependencies": { 168 | "assertion-error-formatter": "^3.0.0", 169 | "bluebird": "^3.4.1", 170 | "cli-table3": "^0.5.1", 171 | "colors": "^1.1.2", 172 | "commander": "^3.0.1", 173 | "cucumber-expressions": "^8.1.0", 174 | "cucumber-tag-expressions": "^2.0.2", 175 | "duration": "^0.2.1", 176 | "escape-string-regexp": "^2.0.0", 177 | "figures": "^3.0.0", 178 | "gherkin": "5.0.0", 179 | "glob": "^7.1.3", 180 | "indent-string": "^4.0.0", 181 | "is-generator": "^1.0.2", 182 | "is-stream": "^2.0.0", 183 | "knuth-shuffle-seeded": "^1.0.6", 184 | "lodash": "^4.17.14", 185 | "mz": "^2.4.0", 186 | "progress": "^2.0.0", 187 | "resolve": "^1.3.3", 188 | "serialize-error": "^4.1.0", 189 | "stack-chain": "^2.0.0", 190 | "stacktrace-js": "^2.0.0", 191 | "string-argv": "^0.3.0", 192 | "title-case": "^2.1.1", 193 | "util-arity": "^1.0.2", 194 | "verror": "^1.9.0" 195 | }, 196 | "bin": { 197 | "cucumber-js": "bin/cucumber-js" 198 | }, 199 | "engines": { 200 | "node": ">=8" 201 | } 202 | }, 203 | "node_modules/cucumber-expressions": { 204 | "version": "8.3.0", 205 | "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz", 206 | "integrity": "sha512-cP2ya0EiorwXBC7Ll7Cj7NELYbasNv9Ty42L4u7sso9KruWemWG1ZiTq4PMqir3SNDSrbykoqI5wZgMbLEDjLQ==", 207 | "deprecated": "This package is now published under @cucumber/cucumber-expressions", 208 | "dev": true, 209 | "license": "MIT", 210 | "dependencies": { 211 | "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.4.0", 212 | "xregexp": "^4.2.4" 213 | } 214 | }, 215 | "node_modules/cucumber-tag-expressions": { 216 | "version": "2.0.3", 217 | "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz", 218 | "integrity": "sha512-+x5j1IfZrBtbvYHuoUX0rl4nUGxaey6Do9sM0CABmZfDCcWXuuRm1fQeCaklIYQgOFHQ6xOHvDSdkMHHpni6tQ==", 219 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 220 | "dev": true, 221 | "license": "MIT" 222 | }, 223 | "node_modules/d": { 224 | "version": "1.0.2", 225 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", 226 | "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", 227 | "dev": true, 228 | "license": "ISC", 229 | "dependencies": { 230 | "es5-ext": "^0.10.64", 231 | "type": "^2.7.2" 232 | }, 233 | "engines": { 234 | "node": ">=0.12" 235 | } 236 | }, 237 | "node_modules/diff": { 238 | "version": "4.0.2", 239 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 240 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 241 | "dev": true, 242 | "license": "BSD-3-Clause", 243 | "engines": { 244 | "node": ">=0.3.1" 245 | } 246 | }, 247 | "node_modules/duration": { 248 | "version": "0.2.2", 249 | "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", 250 | "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", 251 | "dev": true, 252 | "license": "ISC", 253 | "dependencies": { 254 | "d": "1", 255 | "es5-ext": "~0.10.46" 256 | } 257 | }, 258 | "node_modules/error-stack-parser": { 259 | "version": "2.1.4", 260 | "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", 261 | "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", 262 | "dev": true, 263 | "license": "MIT", 264 | "dependencies": { 265 | "stackframe": "^1.3.4" 266 | } 267 | }, 268 | "node_modules/es5-ext": { 269 | "version": "0.10.64", 270 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", 271 | "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", 272 | "dev": true, 273 | "hasInstallScript": true, 274 | "license": "ISC", 275 | "dependencies": { 276 | "es6-iterator": "^2.0.3", 277 | "es6-symbol": "^3.1.3", 278 | "esniff": "^2.0.1", 279 | "next-tick": "^1.1.0" 280 | }, 281 | "engines": { 282 | "node": ">=0.10" 283 | } 284 | }, 285 | "node_modules/es6-iterator": { 286 | "version": "2.0.3", 287 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 288 | "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", 289 | "dev": true, 290 | "license": "MIT", 291 | "dependencies": { 292 | "d": "1", 293 | "es5-ext": "^0.10.35", 294 | "es6-symbol": "^3.1.1" 295 | } 296 | }, 297 | "node_modules/es6-symbol": { 298 | "version": "3.1.4", 299 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", 300 | "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", 301 | "dev": true, 302 | "license": "ISC", 303 | "dependencies": { 304 | "d": "^1.0.2", 305 | "ext": "^1.7.0" 306 | }, 307 | "engines": { 308 | "node": ">=0.12" 309 | } 310 | }, 311 | "node_modules/escape-string-regexp": { 312 | "version": "2.0.0", 313 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 314 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 315 | "dev": true, 316 | "license": "MIT", 317 | "engines": { 318 | "node": ">=8" 319 | } 320 | }, 321 | "node_modules/esniff": { 322 | "version": "2.0.1", 323 | "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", 324 | "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", 325 | "dev": true, 326 | "license": "ISC", 327 | "dependencies": { 328 | "d": "^1.0.1", 329 | "es5-ext": "^0.10.62", 330 | "event-emitter": "^0.3.5", 331 | "type": "^2.7.2" 332 | }, 333 | "engines": { 334 | "node": ">=0.10" 335 | } 336 | }, 337 | "node_modules/event-emitter": { 338 | "version": "0.3.5", 339 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 340 | "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", 341 | "dev": true, 342 | "license": "MIT", 343 | "dependencies": { 344 | "d": "1", 345 | "es5-ext": "~0.10.14" 346 | } 347 | }, 348 | "node_modules/ext": { 349 | "version": "1.7.0", 350 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", 351 | "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", 352 | "dev": true, 353 | "license": "ISC", 354 | "dependencies": { 355 | "type": "^2.7.2" 356 | } 357 | }, 358 | "node_modules/extsprintf": { 359 | "version": "1.4.1", 360 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", 361 | "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", 362 | "dev": true, 363 | "engines": [ 364 | "node >=0.6.0" 365 | ], 366 | "license": "MIT" 367 | }, 368 | "node_modules/figures": { 369 | "version": "3.2.0", 370 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 371 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 372 | "dev": true, 373 | "license": "MIT", 374 | "dependencies": { 375 | "escape-string-regexp": "^1.0.5" 376 | }, 377 | "engines": { 378 | "node": ">=8" 379 | }, 380 | "funding": { 381 | "url": "https://github.com/sponsors/sindresorhus" 382 | } 383 | }, 384 | "node_modules/figures/node_modules/escape-string-regexp": { 385 | "version": "1.0.5", 386 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 387 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 388 | "dev": true, 389 | "license": "MIT", 390 | "engines": { 391 | "node": ">=0.8.0" 392 | } 393 | }, 394 | "node_modules/fs.realpath": { 395 | "version": "1.0.0", 396 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 397 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 398 | "dev": true, 399 | "license": "ISC" 400 | }, 401 | "node_modules/function-bind": { 402 | "version": "1.1.2", 403 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 404 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 405 | "dev": true, 406 | "license": "MIT", 407 | "funding": { 408 | "url": "https://github.com/sponsors/ljharb" 409 | } 410 | }, 411 | "node_modules/gherkin": { 412 | "version": "5.0.0", 413 | "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.0.0.tgz", 414 | "integrity": "sha512-Y+93z2Nh+TNIKuKEf+6M0FQrX/z0Yv9C2LFfc5NlcGJWRrrTeI/jOg2374y1FOw6ZYQ3RgJBezRkli7CLDubDA==", 415 | "deprecated": "This package is now published under @cucumber/gherkin", 416 | "dev": true, 417 | "license": "MIT", 418 | "bin": { 419 | "gherkin-javascript": "bin/gherkin" 420 | } 421 | }, 422 | "node_modules/glob": { 423 | "version": "7.2.3", 424 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 425 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 426 | "deprecated": "Glob versions prior to v9 are no longer supported", 427 | "dev": true, 428 | "license": "ISC", 429 | "dependencies": { 430 | "fs.realpath": "^1.0.0", 431 | "inflight": "^1.0.4", 432 | "inherits": "2", 433 | "minimatch": "^3.1.1", 434 | "once": "^1.3.0", 435 | "path-is-absolute": "^1.0.0" 436 | }, 437 | "engines": { 438 | "node": "*" 439 | }, 440 | "funding": { 441 | "url": "https://github.com/sponsors/isaacs" 442 | } 443 | }, 444 | "node_modules/hasown": { 445 | "version": "2.0.2", 446 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 447 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 448 | "dev": true, 449 | "license": "MIT", 450 | "dependencies": { 451 | "function-bind": "^1.1.2" 452 | }, 453 | "engines": { 454 | "node": ">= 0.4" 455 | } 456 | }, 457 | "node_modules/indent-string": { 458 | "version": "4.0.0", 459 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 460 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 461 | "dev": true, 462 | "license": "MIT", 463 | "engines": { 464 | "node": ">=8" 465 | } 466 | }, 467 | "node_modules/inflight": { 468 | "version": "1.0.6", 469 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 470 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 471 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 472 | "dev": true, 473 | "license": "ISC", 474 | "dependencies": { 475 | "once": "^1.3.0", 476 | "wrappy": "1" 477 | } 478 | }, 479 | "node_modules/inherits": { 480 | "version": "2.0.4", 481 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 482 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 483 | "dev": true, 484 | "license": "ISC" 485 | }, 486 | "node_modules/is-core-module": { 487 | "version": "2.15.0", 488 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", 489 | "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", 490 | "dev": true, 491 | "license": "MIT", 492 | "dependencies": { 493 | "hasown": "^2.0.2" 494 | }, 495 | "engines": { 496 | "node": ">= 0.4" 497 | }, 498 | "funding": { 499 | "url": "https://github.com/sponsors/ljharb" 500 | } 501 | }, 502 | "node_modules/is-fullwidth-code-point": { 503 | "version": "2.0.0", 504 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 505 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", 506 | "dev": true, 507 | "license": "MIT", 508 | "engines": { 509 | "node": ">=4" 510 | } 511 | }, 512 | "node_modules/is-generator": { 513 | "version": "1.0.3", 514 | "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", 515 | "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", 516 | "dev": true, 517 | "license": "MIT" 518 | }, 519 | "node_modules/is-stream": { 520 | "version": "2.0.1", 521 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 522 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 523 | "dev": true, 524 | "license": "MIT", 525 | "engines": { 526 | "node": ">=8" 527 | }, 528 | "funding": { 529 | "url": "https://github.com/sponsors/sindresorhus" 530 | } 531 | }, 532 | "node_modules/knuth-shuffle-seeded": { 533 | "version": "1.0.6", 534 | "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", 535 | "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", 536 | "dev": true, 537 | "license": "Apache-2.0", 538 | "dependencies": { 539 | "seed-random": "~2.2.0" 540 | } 541 | }, 542 | "node_modules/lodash": { 543 | "version": "4.17.21", 544 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 545 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 546 | "dev": true, 547 | "license": "MIT" 548 | }, 549 | "node_modules/lower-case": { 550 | "version": "1.1.4", 551 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 552 | "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", 553 | "dev": true, 554 | "license": "MIT" 555 | }, 556 | "node_modules/minimatch": { 557 | "version": "3.1.2", 558 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 559 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 560 | "dev": true, 561 | "license": "ISC", 562 | "dependencies": { 563 | "brace-expansion": "^1.1.7" 564 | }, 565 | "engines": { 566 | "node": "*" 567 | } 568 | }, 569 | "node_modules/mz": { 570 | "version": "2.7.0", 571 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 572 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 573 | "dev": true, 574 | "license": "MIT", 575 | "dependencies": { 576 | "any-promise": "^1.0.0", 577 | "object-assign": "^4.0.1", 578 | "thenify-all": "^1.0.0" 579 | } 580 | }, 581 | "node_modules/next-tick": { 582 | "version": "1.1.0", 583 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 584 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", 585 | "dev": true, 586 | "license": "ISC" 587 | }, 588 | "node_modules/no-case": { 589 | "version": "2.3.2", 590 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 591 | "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 592 | "dev": true, 593 | "license": "MIT", 594 | "dependencies": { 595 | "lower-case": "^1.1.1" 596 | } 597 | }, 598 | "node_modules/object-assign": { 599 | "version": "4.1.1", 600 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 601 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 602 | "dev": true, 603 | "license": "MIT", 604 | "engines": { 605 | "node": ">=0.10.0" 606 | } 607 | }, 608 | "node_modules/once": { 609 | "version": "1.4.0", 610 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 611 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 612 | "dev": true, 613 | "license": "ISC", 614 | "dependencies": { 615 | "wrappy": "1" 616 | } 617 | }, 618 | "node_modules/pad-right": { 619 | "version": "0.2.2", 620 | "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", 621 | "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", 622 | "dev": true, 623 | "license": "MIT", 624 | "dependencies": { 625 | "repeat-string": "^1.5.2" 626 | }, 627 | "engines": { 628 | "node": ">=0.10.0" 629 | } 630 | }, 631 | "node_modules/path-is-absolute": { 632 | "version": "1.0.1", 633 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 634 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 635 | "dev": true, 636 | "license": "MIT", 637 | "engines": { 638 | "node": ">=0.10.0" 639 | } 640 | }, 641 | "node_modules/path-parse": { 642 | "version": "1.0.7", 643 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 644 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 645 | "dev": true, 646 | "license": "MIT" 647 | }, 648 | "node_modules/progress": { 649 | "version": "2.0.3", 650 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 651 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 652 | "dev": true, 653 | "license": "MIT", 654 | "engines": { 655 | "node": ">=0.4.0" 656 | } 657 | }, 658 | "node_modules/regenerator-runtime": { 659 | "version": "0.14.1", 660 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", 661 | "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", 662 | "dev": true, 663 | "license": "MIT" 664 | }, 665 | "node_modules/repeat-string": { 666 | "version": "1.6.1", 667 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 668 | "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", 669 | "dev": true, 670 | "license": "MIT", 671 | "engines": { 672 | "node": ">=0.10" 673 | } 674 | }, 675 | "node_modules/resolve": { 676 | "version": "1.22.8", 677 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 678 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 679 | "dev": true, 680 | "license": "MIT", 681 | "dependencies": { 682 | "is-core-module": "^2.13.0", 683 | "path-parse": "^1.0.7", 684 | "supports-preserve-symlinks-flag": "^1.0.0" 685 | }, 686 | "bin": { 687 | "resolve": "bin/resolve" 688 | }, 689 | "funding": { 690 | "url": "https://github.com/sponsors/ljharb" 691 | } 692 | }, 693 | "node_modules/seed-random": { 694 | "version": "2.2.0", 695 | "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", 696 | "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", 697 | "dev": true, 698 | "license": "MIT" 699 | }, 700 | "node_modules/serialize-error": { 701 | "version": "4.1.0", 702 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-4.1.0.tgz", 703 | "integrity": "sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw==", 704 | "dev": true, 705 | "license": "MIT", 706 | "dependencies": { 707 | "type-fest": "^0.3.0" 708 | }, 709 | "engines": { 710 | "node": ">=8" 711 | } 712 | }, 713 | "node_modules/source-map": { 714 | "version": "0.5.6", 715 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", 716 | "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", 717 | "dev": true, 718 | "license": "BSD-3-Clause", 719 | "engines": { 720 | "node": ">=0.10.0" 721 | } 722 | }, 723 | "node_modules/stack-chain": { 724 | "version": "2.0.0", 725 | "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", 726 | "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", 727 | "dev": true, 728 | "license": "MIT" 729 | }, 730 | "node_modules/stack-generator": { 731 | "version": "2.0.10", 732 | "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", 733 | "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", 734 | "dev": true, 735 | "license": "MIT", 736 | "dependencies": { 737 | "stackframe": "^1.3.4" 738 | } 739 | }, 740 | "node_modules/stackframe": { 741 | "version": "1.3.4", 742 | "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", 743 | "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", 744 | "dev": true, 745 | "license": "MIT" 746 | }, 747 | "node_modules/stacktrace-gps": { 748 | "version": "3.1.2", 749 | "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", 750 | "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", 751 | "dev": true, 752 | "license": "MIT", 753 | "dependencies": { 754 | "source-map": "0.5.6", 755 | "stackframe": "^1.3.4" 756 | } 757 | }, 758 | "node_modules/stacktrace-js": { 759 | "version": "2.0.2", 760 | "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", 761 | "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", 762 | "dev": true, 763 | "license": "MIT", 764 | "dependencies": { 765 | "error-stack-parser": "^2.0.6", 766 | "stack-generator": "^2.0.5", 767 | "stacktrace-gps": "^3.0.4" 768 | } 769 | }, 770 | "node_modules/string-argv": { 771 | "version": "0.3.2", 772 | "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", 773 | "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", 774 | "dev": true, 775 | "license": "MIT", 776 | "engines": { 777 | "node": ">=0.6.19" 778 | } 779 | }, 780 | "node_modules/string-width": { 781 | "version": "2.1.1", 782 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 783 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 784 | "dev": true, 785 | "license": "MIT", 786 | "dependencies": { 787 | "is-fullwidth-code-point": "^2.0.0", 788 | "strip-ansi": "^4.0.0" 789 | }, 790 | "engines": { 791 | "node": ">=4" 792 | } 793 | }, 794 | "node_modules/strip-ansi": { 795 | "version": "4.0.0", 796 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 797 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 798 | "dev": true, 799 | "license": "MIT", 800 | "dependencies": { 801 | "ansi-regex": "^3.0.0" 802 | }, 803 | "engines": { 804 | "node": ">=4" 805 | } 806 | }, 807 | "node_modules/supports-preserve-symlinks-flag": { 808 | "version": "1.0.0", 809 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 810 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 811 | "dev": true, 812 | "license": "MIT", 813 | "engines": { 814 | "node": ">= 0.4" 815 | }, 816 | "funding": { 817 | "url": "https://github.com/sponsors/ljharb" 818 | } 819 | }, 820 | "node_modules/thenify": { 821 | "version": "3.3.1", 822 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 823 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 824 | "dev": true, 825 | "license": "MIT", 826 | "dependencies": { 827 | "any-promise": "^1.0.0" 828 | } 829 | }, 830 | "node_modules/thenify-all": { 831 | "version": "1.6.0", 832 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 833 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 834 | "dev": true, 835 | "license": "MIT", 836 | "dependencies": { 837 | "thenify": ">= 3.1.0 < 4" 838 | }, 839 | "engines": { 840 | "node": ">=0.8" 841 | } 842 | }, 843 | "node_modules/title-case": { 844 | "version": "2.1.1", 845 | "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", 846 | "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", 847 | "dev": true, 848 | "license": "MIT", 849 | "dependencies": { 850 | "no-case": "^2.2.0", 851 | "upper-case": "^1.0.3" 852 | } 853 | }, 854 | "node_modules/type": { 855 | "version": "2.7.3", 856 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", 857 | "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", 858 | "dev": true, 859 | "license": "ISC" 860 | }, 861 | "node_modules/type-fest": { 862 | "version": "0.3.1", 863 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", 864 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", 865 | "dev": true, 866 | "license": "(MIT OR CC0-1.0)", 867 | "engines": { 868 | "node": ">=6" 869 | } 870 | }, 871 | "node_modules/upper-case": { 872 | "version": "1.1.3", 873 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 874 | "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", 875 | "dev": true, 876 | "license": "MIT" 877 | }, 878 | "node_modules/util-arity": { 879 | "version": "1.1.0", 880 | "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", 881 | "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", 882 | "dev": true, 883 | "license": "MIT" 884 | }, 885 | "node_modules/verror": { 886 | "version": "1.10.1", 887 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", 888 | "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", 889 | "dev": true, 890 | "license": "MIT", 891 | "dependencies": { 892 | "assert-plus": "^1.0.0", 893 | "core-util-is": "1.0.2", 894 | "extsprintf": "^1.2.0" 895 | }, 896 | "engines": { 897 | "node": ">=0.6.0" 898 | } 899 | }, 900 | "node_modules/wrappy": { 901 | "version": "1.0.2", 902 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 903 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 904 | "dev": true, 905 | "license": "ISC" 906 | }, 907 | "node_modules/xregexp": { 908 | "version": "4.4.1", 909 | "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz", 910 | "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==", 911 | "dev": true, 912 | "license": "MIT", 913 | "dependencies": { 914 | "@babel/runtime-corejs3": "^7.12.1" 915 | } 916 | } 917 | } 918 | } 919 | -------------------------------------------------------------------------------- /aula-02/bdd/exemplo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "exemplo", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "cucumber-js" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "devDependencies": { 13 | "cucumber": "^6.0.7" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /aula-02/bdd/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos - BDD 2 | 3 | ## O que é BDD (Behavior-Driven Development) 4 | 5 | BDD (Behavior-Driven Development) é uma abordagem de desenvolvimento de software que se concentra em definir o comportamento do sistema a partir da perspectiva do usuário. Ela combina técnicas de desenvolvimento ágil, testes automatizados e linguagem natural para descrever o comportamento do sistema. 6 | 7 | ## Principais características do BDD 8 | 9 | - **Linguagem natural**: O BDD utiliza linguagem natural para descrever o comportamento do sistema, tornando mais fácil para os stakeholders entenderem o que o sistema faz. 10 | - **Features**: As funcionalidades do sistema são descritas em termos de features, que são divididas em cenários. 11 | - **Cenários**: Os cenários descrevem como o sistema se comporta em diferentes situações. 12 | - **Testes automatizados**: Os cenários são utilizados para criar testes automatizados que verificam se o sistema se comporta como esperado. 13 | - **Desenvolvimento colaborativo**: O BDD promove o desenvolvimento colaborativo entre os membros da equipe, incluindo desenvolvedores, testers e stakeholders. 14 | 15 | ## Vantagens do BDD 16 | 17 | - **Melhora a comunicação**: O BDD melhora a comunicação entre os membros da equipe e os stakeholders, garantindo que todos estejam alinhados com os requisitos do sistema. 18 | - **Reduz erros**: Os testes automatizados ajudam a reduzir erros e bugs no sistema. 19 | - **Aumenta a confiança**: O BDD aumenta a confiança nos testes e no sistema como um todo. 20 | - **Facilita a manutenção**: O BDD facilita a manutenção do sistema, pois os testes automatizados ajudam a garantir que as alterações não quebrem o sistema. 21 | 22 | ## Ferramentas populares de BDD 23 | 24 | - **Cucumber**: Uma das ferramentas mais populares de BDD, que suporta várias linguagens de programação. 25 | - **JBehave**: Uma ferramenta de BDD para Java que suporta testes automatizados. 26 | - **Behave**: Uma ferramenta de BDD para Python que suporta testes automatizados. 27 | 28 | ## Exemplo de código BDD com Cucumber 29 | 30 | ``` 31 | Feature: Login 32 | Como um usuario 33 | Eu quero logar no sistema 34 | Então terei acesso a minha conta 35 | 36 | Scenario: Sucesso ao logar 37 | Acessando a pagina de login 38 | Quando eu inserir credenciais válidas 39 | Então serei direcionado a pagina de dashboard 40 | 41 | Scenario: Falha ao login 42 | Acessando a pagina de login 43 | Quando eu inserir credenciais inválidas 44 | Então eu verei uma mensagem de erro 45 | ``` -------------------------------------------------------------------------------- /aula-02/ddd/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos - DDD 2 | 3 | ## O que é DDD (Domain-Driven Design) 4 | 5 | DDD (Domain-Driven Design) é uma abordagem de engenharia de software que se concentra em entender o domínio do problema que você está tentando resolver, em vez de apenas se concentrar na tecnologia ou na implementação. 6 | 7 | O objetivo do DDD é criar um modelo de software que seja uma representação precisa e útil do domínio do problema, tornando o software mais fácil de entender, manter e evoluir. 8 | 9 | ## Princípios chave do DDD 10 | 11 | - **Domínio**: O domínio é o problema ou área que você está tentando resolver com o software. É importante entender profundamente o domínio para criar um modelo de software que seja relevante e útil. 12 | - **Linguagem Ubíqua**: A linguagem ubíqua é uma linguagem compartilhada entre os desenvolvedores e os especialistas do domínio. Ela ajuda a garantir que todos estejam falando a mesma língua e que o modelo de software seja consistente com o domínio. 13 | - **Contexto delimitado**: O contexto delimitado é a área específica do domínio que você está modelando. É importante definir claramente os limites do contexto para evitar confusão e ambiguidade. 14 | - **Entidades**: As entidades são objetos que têm identidade própria e que são importantes no domínio. Elas podem ser pessoas, lugares, objetos ou conceitos. 15 | 16 | ## Benefícios do DDD 17 | 18 | - **Software mais fácil de entender**: O DDD ajuda a criar um modelo de software que seja fácil de entender, pois ele é baseado no domínio do problema. 19 | - **Software mais flexível**: O DDD permite que o software seja mais flexível e adaptável às mudanças do domínio. 20 | - **Melhor comunicação**: O DDD ajuda a melhorar a comunicação entre os desenvolvedores e os especialistas do domínio. 21 | - **Redução de complexidade**: O DDD ajuda a reduzir a complexidade do software, pois ele se concentra no domínio do problema. -------------------------------------------------------------------------------- /aula-02/poo/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos - POO 2 | 3 | ## O que é POO (Programação Orienteda a Objetos) 4 | 5 | A Programação Orientada à Objetos é um paradigma baseado no conceito de envolver pedaços de dados e comportamentos relacionados aqueles dados em uma coleção (chamada objetos) que são construídos de um conjunto de “planos de construção” (chamados de classes). 6 | 7 | ## A importância da Utilização deste paradigma 8 | 9 | - Permite modelar problemas do mundo real de maneira intuitiva, utilizando conceitos como classes e objetos. 10 | - Promove a reutilização de código através da herança e facilita a manutenção com o encapsulamento e o polimorfismo. 11 | - Suporta a modularidade, permitindo que sistemas complexos sejam divididos em partes menores e mais gerenciáveis. 12 | - Amplamente utilizada em linguagens modernas. 13 | 14 | ## Conceitos fundamentais da POO 15 | 16 | ### Abstração 17 | 18 | É o processo de simplificar a complexidade, focando apenas no que é relevante para o contexto atual. 19 | 20 | Exemplo: Uma classe ```Avião``` pode existir em uma aplicação de simulação de voo e em uma aplicação de compra de passagens aéreas. 21 | 22 | - Simulador de Voo: guardaria detalhes relacionados ao voo, como latitude e longitude. 23 | - Compra de passagens aéreas: guardaria número de poltronas disponiveis. 24 | 25 | ### Classes e Objetos 26 | 27 | Classe é uma definição que descreve um tipo de objeto. Ela define as propriedades (atributos) e comportamentos (métodos) que os objetos desse tipo terão. 28 | 29 | Objeto é uma instância concreta de uma classe. Quando você cria um objeto, você está criando uma entidade específica que segue o modelo definido pela classe. 30 | 31 | ``` 32 | class Carro { 33 | private velocidade: number 34 | 35 | public acelerar() { 36 | this.velocidade = this.velocidade + 1; 37 | } 38 | 39 | public frear() { 40 | this.velocidade = this.velocidade - 1; 41 | } 42 | 43 | public function getVelocidade(): number { 44 | return this.velocidade; 45 | } 46 | } 47 | 48 | const uno = new Carro(); 49 | uno.acelerar(); 50 | 51 | console.log(`Estamos andando a ${uno.getVelocidade()} km/h`); 52 | // Estamos andando a 1 km/h 53 | ``` 54 | 55 | ### Encapsulamento 56 | 57 | Se refere à prática de esconder os detalhes internos de um objeto e expor apenas uma interface pública, controlando como os dados e métodos dentro de um objeto são acessados ou modificados. 58 | 59 | - Protege o estado interno de um objeto de modificações inesperadas ou incorretas, garantindo que os dados estejam sempre em um estado válido. 60 | - Você pode alterar a implementação interna de uma classe sem impactar o código externo que usa a classe, desde que a interface pública permaneça a mesma. 61 | - Definir regras específicas para a manipulação desses dados.. 62 | 63 | ### Herança 64 | 65 | Refere-se ao mecanismo pelo qual uma classe pode herdar propriedades (atributos) e comportamentos (métodos) de outra classe. Isso permite a criação de uma nova classe baseada em uma classe existente, promovendo a reutilização de código e a criação de hierarquias de classes. 66 | 67 | - Permite reutilizar o código da classe base, evitando duplicação e promovendo a manutenção eficiente do código. 68 | - Ajuda a criar hierarquias lógicas entre as classes, facilitando o entendimento e a organização do código. 69 | - Pode facilmente estender o comportamento de classes existentes para criar novas funcionalidades, sem modificar a classe base. 70 | - É pré-requisito para o polimorfismo, permitindo que uma subclasse seja tratada como sua classe base, facilitando a criação de código mais flexível e reutilizável. 71 | 72 | ``` 73 | class Animal { 74 | private nome: string; 75 | 76 | constructor(nome: string) { 77 | this.nome = nome; 78 | } 79 | 80 | pubic getNome(): string { 81 | return this.nome; 82 | } 83 | 84 | public andar() { 85 | console.log(`${this.nome} está andando!`); 86 | } 87 | } 88 | 89 | class Gato extends Animal { 90 | constructor(nome: string) { 91 | super(nome); 92 | } 93 | 94 | public miar() { 95 | console.log("meow meow..."); 96 | } 97 | } 98 | 99 | class Cachorro extends Animal { 100 | constructor(nome: string) { 101 | super(nome); 102 | } 103 | 104 | public latir() { 105 | console.log("au au..."); 106 | } 107 | } 108 | 109 | const tom = new Gato("Tom"); 110 | tom.andar(); 111 | // Tom está andando! 112 | tom.miar(); 113 | // meow meow... 114 | 115 | const fido = new Dog("Fido"); 116 | fido.andar(); 117 | // Fido está andando! 118 | fido.miar(); 119 | // au au... 120 | ``` 121 | #### Use com moderação! 122 | 123 | Embora poderosa, a herança deve ser usada com cuidado, pois um uso excessivo pode levar a hierarquias complexas e difíceis de manter. Em alguns casos, a composição pode ser uma alternativa mais adequada. 124 | 125 | ``` 126 | class Endereco { 127 | private logradouro: string; 128 | ... 129 | } 130 | 131 | // em vez de usar isso 132 | class Pessoa extends Endereco { 133 | ... 134 | } 135 | 136 | // use isso 137 | class Pessoa { 138 | private endereco: Endereco; 139 | } 140 | ``` 141 | 142 | ### Polimorfismo 143 | 144 | Habilidade de um programa detectar a classe real de um objeto e chamar sua implementação mesmo quando seu tipo real é desconhecido no contexto atual. 145 | 146 | Simplificando, é a capacidade de um objeto “fingir” que é outra coisa, geralmente uma classe que ele estende ou uma interface que ele implementa. 147 | 148 | - Permite que o código seja mais flexível, pois métodos e funções podem operar em classes base e ainda assim funcionar corretamente com qualquer subclasse, sem necessidade de modificações. 149 | - Ao escrever código que trabalha com classes base, você pode reutilizar esse código com qualquer nova subclasse que seja adicionada posteriormente, promovendo a reutilização de código e facilitando a manutenção. 150 | - Reduz a necessidade de usar instruções condicionais (como if ou switch) para diferenciar entre tipos de objetos, tornando o código mais simples e fácil de entender. 151 | 152 | ``` 153 | class Animal { 154 | private nome: string; 155 | 156 | constructor(nome: string) { 157 | this.nome = nome; 158 | } 159 | 160 | pubic getNome(): string { 161 | return this.nome; 162 | } 163 | 164 | public andar() { 165 | console.log(`${this.nome} está andando!`); 166 | } 167 | } 168 | 169 | class Gato extends Animal { 170 | ... 171 | } 172 | 173 | class Cachorro extends Animal { 174 | ... 175 | } 176 | 177 | const tom = new Gato("Tom"); 178 | const fido = new Dog("Fido"); 179 | const animais: Animal[] = [tom, fido]; 180 | 181 | animais.forEach((a: Animal) => a.andar()); 182 | 183 | // Tom está andando! 184 | // Fido está andando! 185 | 186 | interface Grunir { 187 | public grunir(); 188 | } 189 | 190 | class Gato extends Animal implements Grunir { 191 | ... 192 | public grunir() { 193 | console.log("meow meow..."); 194 | } 195 | } 196 | 197 | class Cachorro extends Animal implements Grunir { 198 | ... 199 | public grunir() { 200 | console.log("au au..."); 201 | } 202 | } 203 | 204 | const tom = new Gato("Tom"); 205 | const fido = new Dog("Fido"); 206 | const animais: Grunir[] = [tom, fido]; 207 | 208 | animais.forEach((a: Grunir) => a.grunir()); 209 | // meow meow... 210 | // au au... 211 | ``` 212 | 213 | ## Vantagens e Desvantagens da POO 214 | 215 | - **Modelagem Intuitiva**: POO permite que conceitos do mundo real sejam facilmente modelados como objetos no código, facilitando a compreensão e comunicação. 216 | - **Reutilização de Código**: A herança e o polimorfismo promovem a reutilização, permitindo que código existente seja usado e estendido de maneira eficiente. 217 | - **Manutenção e Extensibilidade**: O encapsulamento e a modularidade facilitam a manutenção do código, permitindo que novas funcionalidades sejam adicionadas sem impactar outras partes do sistema. 218 | - **Organização e Estrutura**: POO incentiva a criação de sistemas organizados e estruturados, com hierarquias claras e design modular, tornando o código mais fácil de entender e gerenciar. 219 | - **Facilidade de Colaboração**: Interfaces claras e divisão de responsabilidades permitem que equipes de desenvolvimento colaborem de forma eficaz, integrando diferentes partes do sistema com facilidade. 220 | - **Testabilidade**: A natureza modular das classes facilita a criação de testes unitários e simulações, melhorando a confiabilidade do software. 221 | - **Escalabilidade**: POO suporta o crescimento do sistema ao longo do tempo, permitindo que novas funcionalidades sejam adicionadas sem reescritas significativas de código. -------------------------------------------------------------------------------- /aula-02/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos 2 | 3 | 1. [POO](/aula-02/poo/readme.md) 4 | 2. [UML](/aula-02/uml/readme.md) 5 | 3. [DDD](/aula-02/ddd/readme.md) 6 | 4. [BDD](/aula-02/bdd/readme.md) 7 | 5. [TDD](/aula-02/tdd/readme.md) 8 | 6. [SOLID](/aula-02/solid/readme.md) -------------------------------------------------------------------------------- /aula-02/solid/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos - SOLID 2 | 3 | ## O que é SOLID 4 | 5 | SOLID é um acrônimo que representa cinco princípios de design de software que ajudam a criar sistemas mais flexíveis, escaláveis e fáceis de manter. Cada letra do acrônimo representa um princípio fundamental: 6 | 7 | - **S - Single Responsibility Principle (Princípio da Responsabilidade Única)**: Este princípio estabelece que uma classe ou módulo deve ter apenas uma razão para mudar. Ou seja, uma classe deve ter apenas uma responsabilidade ou função bem definida. Isso ajuda a evitar que uma classe seja muito grande e complexa, tornando-a mais fácil de entender e manter. 8 | - **O - Open-Closed Principle (Princípio Aberto-Fechado)**: Este princípio estabelece que uma classe ou módulo deve ser aberto para extensão, mas fechado para modificação. Isso significa que você deve ser capaz de adicionar novas funcionalidades a uma classe sem precisar modificar seu código existente. Isso ajuda a manter a estabilidade do sistema e a evitar que mudanças em uma classe afetem outras partes do sistema. 9 | - **L - Liskov Substitution Principle (Princípio de Substituição de Liskov)**: Este princípio estabelece que objetos de uma classe derivada devem ser substituíveis por objetos de sua classe base. Isso significa que uma classe derivada deve ser capaz de ser usada como se fosse uma instância da classe base, sem que o código que a utiliza precise saber a diferença. Isso ajuda a garantir que as classes derivadas sejam compatíveis com as classes base. 10 | - **I - Interface Segregation Principle (Princípio de Segregação de Interface)**: Este princípio estabelece que uma classe não deve ser forçada a implementar interfaces que não são relevantes para ela. Em vez disso, as interfaces devem ser divididas em interfaces menores e mais específicas, que podem ser implementadas por classes que as necessitem. Isso ajuda a evitar que as classes sejam forçadas a implementar métodos que não são necessários. 11 | - **D - Dependency Inversion Principle (Princípio de Inversão de Dependência)**: Este princípio estabelece que as classes de alto nível não devem depender de classes de baixo nível, mas sim que ambas devem depender de abstrações. Isso significa que as classes devem ser projetadas para depender de interfaces ou abstrações, em vez de depender de implementações específicas. Isso ajuda a reduzir a dependência entre as classes e a tornar o sistema mais flexível e escalável. -------------------------------------------------------------------------------- /aula-02/tdd/assets/tdd-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/tdd/assets/tdd-01.png -------------------------------------------------------------------------------- /aula-02/tdd/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos - TDD 2 | 3 | ## O que é TDD (Test-Driven Development) 4 | 5 | TDD é uma abordagem de desenvolvimento de software que se baseia em escrever testes automatizados para o código antes de escrever o próprio código. 6 | 7 | ![Definição de Classe](/aula-02/tdd/assets/tdd-01.png) 8 | 9 | ### O processo de TDD envolve os seguintes passos: 10 | 11 | - **Escrever um teste**: Escreva um teste automatizado que verifica se uma determinada funcionalidade ou comportamento do sistema está funcionando corretamente. 12 | - **Executar o teste e verificá-lo falhar**: O teste é executado e, como o código ainda não foi escrito, ele falha. 13 | - **Escrever o código**: O desenvolvedor escreve o código mínimo necessário para fazer o teste passar. 14 | - **Executar o teste novamente e verificá-lo passar**: O teste é executado novamente e, se o código foi escrito corretamente, ele passa. 15 | - **Refatorar o código**: O desenvolvedor refatora o código para torná-lo mais legível, manutenível e eficiente. 16 | - **Repetir o processo**: O processo é repetido para cada funcionalidade ou comportamento do sistema. 17 | 18 | ## Os benefícios do TDD incluem: 19 | 20 | - **Melhoria da qualidade do código**: O TDD ajuda a garantir que o código esteja funcionando corretamente e que os erros sejam detectados rapidamente. 21 | - **Redução de bugs**: O TDD ajuda a reduzir a quantidade de bugs no código, pois os testes são escritos antes do código. 22 | - **Desenvolvimento mais rápido**: O TDD pode ajudar a acelerar o desenvolvimento, pois os testes ajudam a guiar o desenvolvedor na implementação da funcionalidade. 23 | - **Melhoria da documentação**: Os testes podem servir como documentação do código, tornando mais fácil para outros desenvolvedores entender como o código funciona. 24 | 25 | Além disso, o TDD também pode ajudar a melhorar a arquitetura do sistema, pois os testes ajudam a garantir que o código seja modular e fácil de manter. 26 | 27 | ATENÇÃO!!! TDD não é um substituto para outros tipos de testes, como testes de integração ou testes de aceitação, mas sim um complemento para esses testes. -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-01.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-02.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-03.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-04.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-05.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-06.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-07.png -------------------------------------------------------------------------------- /aula-02/uml/assets/uml-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-02/uml/assets/uml-08.png -------------------------------------------------------------------------------- /aula-02/uml/readme.md: -------------------------------------------------------------------------------- 1 | # Revisão de Conceitos - UML 2 | 3 | ## O que é UML (Unified Modeling Language ou Linguagem de Modelagem Unificada) 4 | 5 | UML (Unified Modeling Language) é uma linguagem de modelagem unificada utilizada na engenharia de software para criar modelos de sistemas complexos, amplamente utilizada na indústria de software. 6 | 7 | A UML oferece uma forma padronizada de representar os componentes de um sistema, incluindo classes, objetos, atributos, métodos, relacionamentos e comportamentos. Isso permite que os desenvolvedores criem modelos claros e concisos, facilitando a comunicação e a compreensão do sistema como um todo. 8 | 9 | - **Melhoria da comunicação**: A UML fornece uma linguagem comum para que os desenvolvedores, gerentes de projeto e clientes possam se comunicar de forma eficaz sobre o sistema. 10 | - **Modelagem de sistemas complexos**: A UML permite modelar sistemas complexos de forma clara e concisa, facilitando a compreensão e a análise do sistema. 11 | - **Redução de erros**: Ao criar modelos de sistema com a UML, é possível identificar e corrigir erros e inconsistências antes de iniciar a implementação. 12 | - **Documentação**: A UML fornece uma forma de documentar o sistema de forma clara e concisa, facilitando a manutenção e a evolução do sistema. 13 | 14 | Principais diagramas da UML: 15 | - Diagrama de Classes 16 | - Diagrama de Componentes 17 | - Diagrama de Implantação 18 | - Diagrama de Sequência 19 | - Diagrama de Colaboração 20 | - Diagrama de Estados 21 | - Diagrama de Atividades 22 | 23 | ## Diagrama de Classes 24 | 25 | ### Classe 26 | 27 | ![Definição de Classe](/aula-02/uml/assets/uml-01.png) 28 | 29 | - Nome 30 | - Atributos 31 | - Métodos 32 | - Reticências dizem que tem mais coisas na Classe, mas não são relevantes no momento. 33 | - Visibilidade: sinais de + e - definem a visibilidade so atributo/método onde + para publico e - para privado 34 | 35 | ### Herança 36 | 37 | ![Superclasse](/aula-02/uml/assets/uml-02.png) 38 | 39 | - Flechas com a cabeça do triângulo vazias indicam herança e sempre vão de uma subclasse para uma superclasse. 40 | - Classes em um diagrama UML podem ser simplificadas se é mais importante mostrar suas relações que seus conteúdos. 41 | 42 | ![Interface](/aula-02/uml/assets/uml-04.png) 43 | 44 | - Setas simples indicam que uma classe usa a outra. 45 | - Interfaces em UML se parecem com classes, mas têm apenas métodos. 46 | - Setas com cabeça vazia e linhas traçadas indicam que a classe implementa uma interface. 47 | 48 | 49 | ### Relação entre objetos 50 | 51 | #### Dependência 52 | 53 | ![Dependência](/aula-02/uml/assets/uml-05.png) 54 | 55 | É o mais basico e fraco tipo de relação entre objetos em POO. Existe a dependencia entre as classes e qualquer mudança resultar em mudanças na outra classe. 56 | 57 | #### Associação 58 | 59 | ![Associação](/aula-02/uml/assets/uml-06.png) 60 | 61 | É usado para representar algo como uma um campo em uma classe, a ligação sempre esta ali. 62 | 63 | ##### Dependência x Associação 64 | 65 | ``` 66 | // Dependência 67 | class Professor { 68 | public lecionar(curso: Curso) { 69 | ... 70 | } 71 | } 72 | 73 | // Associação 74 | class Professor { 75 | private curso: Curso; 76 | public lecionar() { 77 | ... 78 | } 79 | } 80 | ``` 81 | 82 | #### Agregação 83 | 84 | ![Agregação](/aula-02/uml/assets/uml-07.png) 85 | 86 | #### Composição 87 | 88 | ![Composição](/aula-02/uml/assets/uml-08.png) 89 | -------------------------------------------------------------------------------- /aula-04/abstract_factory/assets/uml_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-04/abstract_factory/assets/uml_01.png -------------------------------------------------------------------------------- /aula-04/abstract_factory/assets/uml_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-04/abstract_factory/assets/uml_02.png -------------------------------------------------------------------------------- /aula-04/abstract_factory/assets/uml_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-04/abstract_factory/assets/uml_03.png -------------------------------------------------------------------------------- /aula-04/abstract_factory/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "factory_method", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "factory_method", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.4.0", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz", 88 | "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.12.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 99 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.3", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 112 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.5.4", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 200 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.6", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", 214 | "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-04/abstract_factory/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "factory_method", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/Boleto.ts: -------------------------------------------------------------------------------- 1 | import CalculoFactory from "./CalculoFactory"; 2 | import Desconto from "./Desconto"; 3 | import Juros from "./Juros"; 4 | import Multa from "./Multa"; 5 | 6 | export default class Boleto { 7 | protected valor: number; 8 | protected juros: Juros; 9 | protected desconto: Desconto; 10 | protected multa: Multa; 11 | 12 | constructor(valor: number, factory: CalculoFactory) { 13 | this.valor = valor; 14 | this.juros = factory.criarJuros(); 15 | this.desconto = factory.criarDesconto(); 16 | this.multa = factory.criarMulta(); 17 | } 18 | 19 | calcularJuros(): number { 20 | return this.valor * this.juros.getJuros(); 21 | } 22 | 23 | calcularDesconto(): number { 24 | return this.valor * this.desconto.getDesconto(); 25 | } 26 | 27 | calcularMulta(): number { 28 | return this.valor * this.multa.getMulta(); 29 | } 30 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/CalculoFactory.ts: -------------------------------------------------------------------------------- 1 | import Desconto from "./Desconto"; 2 | import Juros from "./Juros"; 3 | import Multa from "./Multa"; 4 | 5 | export default interface CalculoFactory { 6 | criarJuros(): Juros; 7 | criarDesconto(): Desconto; 8 | criarMulta(): Multa; 9 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/Desconto.ts: -------------------------------------------------------------------------------- 1 | export default interface Desconto { 2 | getDesconto(): number 3 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/Juros.ts: -------------------------------------------------------------------------------- 1 | export default interface Juros { 2 | getJuros(): number 3 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/Multa.ts: -------------------------------------------------------------------------------- 1 | export default interface Multa { 2 | getMulta(): number 3 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/bancodobrasil/BBCalculoFactory.ts: -------------------------------------------------------------------------------- 1 | import CalculoFactory from "../CalculoFactory"; 2 | import Desconto from "../Desconto"; 3 | import Juros from "../Juros"; 4 | import Multa from "../Multa"; 5 | import BBDesconto from "./BBDesconto"; 6 | import BBJuros from "./BBJuros"; 7 | import BBMulta from "./BBMulta"; 8 | 9 | export default class BBCalculoFactory implements CalculoFactory { 10 | criarJuros(): Juros { 11 | return new BBJuros(); 12 | } 13 | criarDesconto(): Desconto { 14 | return new BBDesconto(); 15 | } 16 | criarMulta(): Multa { 17 | return new BBMulta(); 18 | } 19 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/bancodobrasil/BBDesconto.ts: -------------------------------------------------------------------------------- 1 | import Desconto from "../Desconto"; 2 | 3 | export default class BBDesconto implements Desconto { 4 | getDesconto(): number { 5 | return 0.05; 6 | } 7 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/bancodobrasil/BBJuros.ts: -------------------------------------------------------------------------------- 1 | import Juros from "../Juros"; 2 | 3 | export default class BBJuros implements Juros { 4 | getJuros(): number { 5 | return 0.03; 6 | } 7 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/bancodobrasil/BBMulta.ts: -------------------------------------------------------------------------------- 1 | import Multa from "../Multa"; 2 | 3 | export default class BBMulta implements Multa { 4 | getMulta(): number { 5 | return 0.02; 6 | } 7 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/caixa/CaixaCalculoFactory.ts: -------------------------------------------------------------------------------- 1 | import CalculoFactory from "../CalculoFactory"; 2 | import Desconto from "../Desconto"; 3 | import Juros from "../Juros"; 4 | import Multa from "../Multa"; 5 | import CaixaDesconto from "./CaixaDesconto"; 6 | import CaixaJuros from "./CaixaJuros"; 7 | import CaixaMulta from "./CaixaMulta"; 8 | 9 | export default class CaixaCalculoFactory implements CalculoFactory { 10 | criarJuros(): Juros { 11 | return new CaixaJuros(); 12 | } 13 | 14 | criarDesconto(): Desconto { 15 | return new CaixaDesconto(); 16 | } 17 | 18 | criarMulta(): Multa { 19 | return new CaixaMulta(); 20 | } 21 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/caixa/CaixaDesconto.ts: -------------------------------------------------------------------------------- 1 | import Desconto from "../Desconto"; 2 | 3 | export default class CaixaDesconto implements Desconto { 4 | getDesconto(): number { 5 | return 0.05; 6 | } 7 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/caixa/CaixaJuros.ts: -------------------------------------------------------------------------------- 1 | import Juros from "../Juros"; 2 | 3 | export default class CaixaJuros implements Juros { 4 | getJuros(): number { 5 | return 0.02; 6 | } 7 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/caixa/CaixaMulta.ts: -------------------------------------------------------------------------------- 1 | import Multa from "../Multa"; 2 | 3 | export default class CaixaMulta implements Multa { 4 | getMulta(): number { 5 | return 0.05; 6 | } 7 | } -------------------------------------------------------------------------------- /aula-04/abstract_factory/src/main.ts: -------------------------------------------------------------------------------- 1 | import Boleto from "./Boleto"; 2 | import BBCalculoFactory from "./bancodobrasil/BBCalculoFactory"; 3 | import CaixaCalculoFactory from "./caixa/CaixaCalculoFactory"; 4 | 5 | const caixaFactory = new CaixaCalculoFactory(); 6 | const bbFactory = new BBCalculoFactory(); 7 | const valor = 100; 8 | 9 | const boletoCaixa = new Boleto(valor, bbFactory); 10 | 11 | console.log(`Boleto gerado com sucesso no valor de R$${valor}`); 12 | console.log(`Valor juros: R$${boletoCaixa.calcularJuros()}`); 13 | console.log(`Valor desconto: R$${boletoCaixa.calcularDesconto()}`); 14 | console.log(`Valor multa: R$${boletoCaixa.calcularMulta()}`); 15 | console.log(`------------------------------------------------`); -------------------------------------------------------------------------------- /aula-04/abstract_factory/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aula-07/adapter/assets/uml_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-07/adapter/assets/uml_01.png -------------------------------------------------------------------------------- /aula-07/adapter/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "factory_method", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "factory_method", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.4.0", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz", 88 | "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.12.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 99 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.3", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 112 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.5.4", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 200 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.6", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", 214 | "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-07/adapter/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "factory_method", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-07/adapter/src/Cobranca.ts: -------------------------------------------------------------------------------- 1 | import Gateway from "./Gateway"; 2 | 3 | export default class Cobranca { 4 | private gateway: Gateway; 5 | 6 | constructor(gateway: Gateway) { 7 | this.gateway = gateway; 8 | } 9 | 10 | setGateway(gateway: Gateway) { 11 | this.gateway = gateway; 12 | } 13 | 14 | setValor(valor: number): void { 15 | this.gateway.setValor(valor); 16 | } 17 | 18 | setParcelas(parcelas: number): void { 19 | this.gateway.setParcelas(parcelas); 20 | } 21 | 22 | setNumeroCartao(numero: string): void { 23 | this.gateway.setNumeroCartao(numero); 24 | } 25 | 26 | setCvv(cvv: string): void { 27 | this.gateway.setCvv(cvv); 28 | } 29 | 30 | validarCartao(): boolean { 31 | return this.gateway.validarCartao(); 32 | } 33 | 34 | realizarPagament(): boolean { 35 | return this.gateway.realizarPagament(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /aula-07/adapter/src/Gateway.ts: -------------------------------------------------------------------------------- 1 | export default interface Gateway { 2 | setValor(valor: number): void; 3 | 4 | setParcelas(parcelas: number): void; 5 | 6 | setNumeroCartao(numero: string): void; 7 | 8 | setCvv(cvv: string): void; 9 | 10 | validarCartao(): boolean; 11 | 12 | realizarPagament(): boolean; 13 | } -------------------------------------------------------------------------------- /aula-07/adapter/src/MercadoPagoAdapter.ts: -------------------------------------------------------------------------------- 1 | import Gateway from "./Gateway"; 2 | import MercadoPago from "./terceiros/MercadoPage"; 3 | 4 | export default class MercadoPagoAdapter extends MercadoPago implements Gateway {} 5 | -------------------------------------------------------------------------------- /aula-07/adapter/src/PagarmeAdapter.ts: -------------------------------------------------------------------------------- 1 | import Gateway from "./Gateway"; 2 | import Pagarme from "./terceiros/Pagarme"; 3 | 4 | export default class PagarmeAdapter implements Gateway { 5 | private pagarme: Pagarme; 6 | private numeroCartao: string = ""; 7 | private cvv: string = ""; 8 | 9 | constructor() { 10 | this.pagarme = new Pagarme(); 11 | } 12 | 13 | setValor(valor: number): void { 14 | this.pagarme.setValorTotal(valor); 15 | } 16 | 17 | setParcelas(parcelas: number): void { 18 | this.pagarme.setQtdadeParcelas(parcelas); 19 | } 20 | 21 | setNumeroCartao(numero: string): void { 22 | this.numeroCartao = numero; 23 | if (this.cvv !== "") { 24 | this.pagarme.setCartao(this.numeroCartao, this.cvv); 25 | } 26 | } 27 | 28 | setCvv(cvv: string): void { 29 | this.cvv = cvv; 30 | if (this.numeroCartao !== "") { 31 | this.pagarme.setCartao(this.numeroCartao, this.cvv); 32 | } 33 | } 34 | 35 | validarCartao(): boolean { 36 | return true; 37 | } 38 | 39 | realizarPagament(): boolean { 40 | return this.pagarme.realizarPagamento(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /aula-07/adapter/src/main.ts: -------------------------------------------------------------------------------- 1 | import Cobranca from "./Cobranca"; 2 | import MercadoPagoAdapter from "./MercadoPagoAdapter"; 3 | import PagarmeAdapter from "./PagarmeAdapter"; 4 | import MercadoPago from "./terceiros/MercadoPage"; 5 | 6 | const mpAdapter = new MercadoPagoAdapter(); 7 | const pgAdapter = new PagarmeAdapter(); 8 | 9 | const cobranca = new Cobranca(mpAdapter); 10 | 11 | cobranca.setValor(100); 12 | cobranca.setParcelas(3); 13 | cobranca.setNumeroCartao("1234123412341234"); 14 | cobranca.setCvv("123"); 15 | 16 | if (cobranca.realizarPagament()) { 17 | console.log("- sucesso"); 18 | } else { 19 | console.log("- falha"); 20 | } 21 | 22 | cobranca.setGateway(pgAdapter); 23 | cobranca.setValor(100); 24 | cobranca.setParcelas(3); 25 | cobranca.setNumeroCartao("1234123412341234"); 26 | cobranca.setCvv("123"); 27 | 28 | if (cobranca.realizarPagament()) { 29 | console.log("- sucesso"); 30 | } else { 31 | console.log("- falha"); 32 | } 33 | -------------------------------------------------------------------------------- /aula-07/adapter/src/terceiros/MercadoPage.ts: -------------------------------------------------------------------------------- 1 | export default class MercadoPago { 2 | private valor: number = 0; 3 | private parcelas: number = 0; 4 | private numeroCartao: string = ""; 5 | private cvv: string = ""; 6 | 7 | setValor(valor: number): void { 8 | this.valor = valor; 9 | } 10 | 11 | setParcelas(parcelas: number): void { 12 | this.parcelas = parcelas; 13 | } 14 | 15 | setNumeroCartao(numero: string): void { 16 | this.numeroCartao = numero; 17 | } 18 | 19 | setCvv(cvv: string): void { 20 | this.cvv = cvv; 21 | } 22 | 23 | validarCartao(): boolean { 24 | if (this.numeroCartao !== "" && this.cvv !== "" && this.cvv.length === 3) { 25 | return true; 26 | } 27 | return false; 28 | } 29 | 30 | realizarPagament(): boolean { 31 | console.log("Pagamento realizado via MarcadoPago"); 32 | return true; 33 | } 34 | } -------------------------------------------------------------------------------- /aula-07/adapter/src/terceiros/Pagarme.ts: -------------------------------------------------------------------------------- 1 | export default class Pagarme { 2 | private valorTotal: number = 0; 3 | private qtdadeParcelas: number = 0; 4 | private numeroCartao: string = ""; 5 | private cvv: string = ""; 6 | 7 | setValorTotal(valorTotal: number): void { 8 | this.valorTotal = valorTotal; 9 | } 10 | 11 | setQtdadeParcelas(qtdadeParcelas: number): void { 12 | this.qtdadeParcelas = qtdadeParcelas; 13 | } 14 | 15 | setCartao(numero: string, cvv: string): void { 16 | this.numeroCartao = numero; 17 | this.cvv = cvv; 18 | } 19 | 20 | realizarPagamento(): boolean { 21 | console.log("Pagamento realizado via Pagarme"); 22 | return true; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /aula-07/adapter/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aula-08/bridge/assets/uml_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-08/bridge/assets/uml_01.png -------------------------------------------------------------------------------- /aula-08/bridge/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bridege", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "bridege", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.4.0", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz", 88 | "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.12.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 99 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.3", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 112 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.5.4", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 200 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.6", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", 214 | "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-08/bridge/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bridege", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-08/bridge/src/Mensagem.ts: -------------------------------------------------------------------------------- 1 | export default abstract class Mensagem { 2 | protected assunto: string = ""; 3 | protected mensagem: string = ""; 4 | 5 | setAssunto(assunto: string): void { 6 | this.assunto = assunto; 7 | } 8 | 9 | setMensagem(mensagem: string): void { 10 | this.mensagem = mensagem; 11 | } 12 | 13 | abstract enviar(): void; 14 | } 15 | -------------------------------------------------------------------------------- /aula-08/bridge/src/MensagemAdminEmail.ts: -------------------------------------------------------------------------------- 1 | import Mensagem from "./Mensagem"; 2 | 3 | export default class MensagemAdminEmail extends Mensagem { 4 | enviar(): void { 5 | console.log("Mensagem enviada pelo Administrador"); 6 | console.log("Mensagem enviada por Email"); 7 | console.log(`Assunto: ${this.assunto}`); 8 | console.log(`Mensagem: ${this.mensagem}`); 9 | console.log("-----------------------------------"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aula-08/bridge/src/MensagemAdminSMS.ts: -------------------------------------------------------------------------------- 1 | import Mensagem from "./Mensagem"; 2 | 3 | export default class MensagemAdminSMS extends Mensagem { 4 | enviar(): void { 5 | console.log("Mensagem enviada pelo Administrador"); 6 | console.log("Mensagem enviada por SMS"); 7 | console.log(`Assunto: ${this.assunto}`); 8 | console.log(`Mensagem: ${this.mensagem}`); 9 | console.log("-----------------------------------"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aula-08/bridge/src/MensagemUsuarioEmail.ts: -------------------------------------------------------------------------------- 1 | import Mensagem from "./Mensagem"; 2 | 3 | export default class MensagemUsuarioEmail extends Mensagem { 4 | enviar(): void { 5 | console.log("Mensagem enviada pelo Usuário"); 6 | console.log("Mensagem enviada por Email"); 7 | console.log(`Assunto: ${this.assunto}`); 8 | console.log(`Mensagem: ${this.mensagem}`); 9 | console.log("-----------------------------------"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aula-08/bridge/src/MensagemUsuarioSMS.ts: -------------------------------------------------------------------------------- 1 | import Mensagem from "./Mensagem"; 2 | 3 | export default class MensagemUsuarioSMS extends Mensagem { 4 | enviar(): void { 5 | console.log("Mensagem enviada pelo Usuário"); 6 | console.log("Mensagem enviada por SMS"); 7 | console.log(`Assunto: ${this.assunto}`); 8 | console.log(`Mensagem: ${this.mensagem}`); 9 | console.log("-----------------------------------"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aula-08/bridge/src/main.ts: -------------------------------------------------------------------------------- 1 | import MensagemAdminEmail from "./MensagemAdminEmail"; 2 | import MensagemAdminSMS from "./MensagemAdminSMS"; 3 | import MensagemUsuarioEmail from "./MensagemUsuarioEmail"; 4 | import MensagemUsuarioSMS from "./MensagemUsuarioSMS"; 5 | 6 | let mensagem = new MensagemAdminEmail(); 7 | mensagem.setAssunto("Primeira mensagem"); 8 | mensagem.setMensagem("Olá mundo!"); 9 | mensagem.enviar(); 10 | 11 | mensagem = new MensagemAdminSMS(); 12 | mensagem.setAssunto("Primeira mensagem"); 13 | mensagem.setMensagem("Olá mundo!"); 14 | mensagem.enviar(); 15 | 16 | mensagem = new MensagemUsuarioEmail(); 17 | mensagem.setAssunto("Primeira mensagem"); 18 | mensagem.setMensagem("Olá mundo!"); 19 | mensagem.enviar(); 20 | 21 | mensagem = new MensagemUsuarioSMS(); 22 | mensagem.setAssunto("Primeira mensagem"); 23 | mensagem.setMensagem("Olá mundo!"); 24 | mensagem.enviar(); -------------------------------------------------------------------------------- /aula-08/bridge/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aula-09/composite/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "composite", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "composite", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.4.0", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz", 88 | "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.12.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 99 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.3", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 112 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.5.4", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 200 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.6", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", 214 | "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-09/composite/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "composite", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-09/composite/src/Arquivo.ts: -------------------------------------------------------------------------------- 1 | export default class Arquivo { 2 | private nome: string; 3 | private caminho: string; 4 | 5 | constructor(nome: string, caminho: string) { 6 | this.nome = nome; 7 | this.caminho = caminho; 8 | } 9 | 10 | getNome(): string { 11 | return this.nome; 12 | } 13 | 14 | getCaminho(): string { 15 | return this.caminho; 16 | } 17 | 18 | exibir(): void { 19 | console.log(`- ${this.nome} - ${this.caminho}`); 20 | } 21 | } -------------------------------------------------------------------------------- /aula-09/composite/src/Pasta.ts: -------------------------------------------------------------------------------- 1 | import Arquivo from "./Arquivo"; 2 | 3 | export default class Pasta { 4 | private nome: string; 5 | private caminho: string; 6 | private componentes: Arquivo[]; 7 | 8 | constructor(nome: string, caminho: string) { 9 | this.nome = nome; 10 | this.caminho = caminho; 11 | this.componentes = []; 12 | } 13 | 14 | adicionar(a: Arquivo): void { 15 | this.componentes.push(a); 16 | } 17 | 18 | remover(a: Arquivo): void { 19 | const i = this.componentes.findIndex((item) => item.getNome() === a.getNome() && item.getCaminho() === a.getCaminho()); 20 | if (i >= 0) { 21 | this.componentes.splice(i, 1); 22 | } 23 | } 24 | 25 | recuperarFilho(i: number): Arquivo | undefined { 26 | if (this.componentes.length - 1 > i) return undefined 27 | return this.componentes[i]; 28 | } 29 | 30 | getNome(): string { 31 | return this.nome; 32 | } 33 | 34 | getCaminho(): string { 35 | return this.caminho; 36 | } 37 | 38 | exibir(): void { 39 | console.log(`- ${this.nome} - ${this.caminho}`); 40 | console.log("--------------------------------"); 41 | for (let a of this.componentes) { 42 | a.exibir() 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /aula-09/composite/src/main.ts: -------------------------------------------------------------------------------- 1 | import Arquivo from "./Arquivo"; 2 | import Pasta from "./Pasta"; 3 | 4 | const raiz = new Pasta("Raiz", "/"); 5 | 6 | const arquivo1 = new Arquivo("Arquivo 1", "/arquivo1"); 7 | const arquivo2 = new Arquivo("Arquivo 2", "/arquivo2"); 8 | const arquivo3 = new Arquivo("Arquivo 3", "/arquivo3"); 9 | const arquivo4 = new Arquivo("Arquivo 4", "/arquivo4"); 10 | const arquivo5 = new Arquivo("Arquivo 5", "/arquivo5"); 11 | const arquivo6 = new Arquivo("Arquivo 6", "/arquivo6"); 12 | 13 | raiz.adicionar(arquivo1); 14 | raiz.adicionar(arquivo2); 15 | raiz.adicionar(arquivo3); 16 | raiz.adicionar(arquivo4); 17 | raiz.adicionar(arquivo5); 18 | raiz.adicionar(arquivo6); 19 | 20 | raiz.exibir(); 21 | -------------------------------------------------------------------------------- /aula-09/composite/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aula-10/chain-responsibility/assets/uml_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-10/chain-responsibility/assets/uml_01.png -------------------------------------------------------------------------------- /aula-10/chain-responsibility/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "composite", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "composite", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.4.0", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz", 88 | "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.12.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 99 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.3", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 112 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.5.4", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 200 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.6", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", 214 | "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-10/chain-responsibility/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "composite", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-10/chain-responsibility/src/CalculadoraPontos.ts: -------------------------------------------------------------------------------- 1 | import Pedido from "./Pedido"; 2 | 3 | export default class CalculadoraPontos { 4 | calcularPontosDoPedido(pedido: Pedido, dia: number): number { 5 | let pontos = 0; 6 | if (pedido.getValor() >= 70) { 7 | pontos = pedido.getValor() / 5; 8 | } else if (pedido.getValor() >= 40) { 9 | pontos = pedido.getValor() / 7; 10 | } else if (pedido.getValor() >= 10) { 11 | pontos = pedido.getValor() / 10; 12 | } else { 13 | return 0; 14 | } 15 | 16 | if (dia >= 16 && dia <= 31) { 17 | pontos = pontos * 2; 18 | } 19 | 20 | return Math.floor(pontos); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /aula-10/chain-responsibility/src/Pedido.ts: -------------------------------------------------------------------------------- 1 | export default class Pedido { 2 | private valor: number = 0; 3 | 4 | getValor(): number { 5 | return this.valor; 6 | } 7 | 8 | setValor(valor: number): void { 9 | this.valor = valor; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aula-10/chain-responsibility/src/main.ts: -------------------------------------------------------------------------------- 1 | import CalculadoraPontos from "./CalculadoraPontos"; 2 | import Pedido from "./Pedido"; 3 | 4 | const pedido = new Pedido(); 5 | const calculadora = new CalculadoraPontos(); 6 | 7 | pedido.setValor(21); 8 | 9 | console.log(`Dia 15, valor do pedido R$ 21,00: ${calculadora.calcularPontosDoPedido(pedido, 15)} pontos`); 10 | console.log(`Dia 16, valor do pedido R$ 21,00: ${calculadora.calcularPontosDoPedido(pedido, 16)} pontos`); 11 | 12 | console.log('---------------------------------------------------------'); 13 | 14 | pedido.setValor(100); 15 | 16 | console.log(`Dia 15, valor do pedido R$ 100,00 : ${calculadora.calcularPontosDoPedido(pedido, 15)} pontos`); 17 | console.log(`Dia 16, valor do pedido R$ 100,00 : ${calculadora.calcularPontosDoPedido(pedido, 16)} pontos`); 18 | -------------------------------------------------------------------------------- /aula-10/chain-responsibility/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aula-11/observer/assets/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-11/observer/assets/image.png -------------------------------------------------------------------------------- /aula-11/observer/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "composite", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "composite", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.7.5", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", 88 | "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.13.0", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", 99 | "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.4", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 112 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.6.3", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", 200 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.8", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 214 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-11/observer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "composite", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-11/observer/src/BotOfertasAmazon.ts: -------------------------------------------------------------------------------- 1 | import Obeserver from "./Observer"; 2 | import Oferta from "./Oferta"; 3 | import Subject from "./Subject"; 4 | 5 | export default class BotOfertasAmazon extends Subject { 6 | private ofertas: Oferta[] = []; 7 | 8 | notifyObserver(): void { 9 | for (let i=0; i< this.observers.length; i++) { 10 | for (let x=0; x=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.7.5", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", 88 | "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.13.0", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", 99 | "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.4", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 112 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.6.3", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", 200 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.8", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 214 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-12/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "state", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-12/src/Pedido.ts: -------------------------------------------------------------------------------- 1 | export enum EstadoPedido { 2 | AGUARDANDO_PAGAMENTO = 1, 3 | PAGO, 4 | CANCELADO, 5 | DESPACHADO, 6 | } 7 | 8 | export class Pedido { 9 | private estadoAtual: EstadoPedido; 10 | 11 | constructor() { 12 | this.estadoAtual = EstadoPedido.AGUARDANDO_PAGAMENTO; 13 | } 14 | 15 | pagar() { 16 | if (this.estadoAtual === EstadoPedido.AGUARDANDO_PAGAMENTO) { 17 | this.estadoAtual = EstadoPedido.PAGO; 18 | } else { 19 | throw new Error("Pedido não está aguardando pagamento."); 20 | } 21 | } 22 | 23 | cancelar() { 24 | if (this.estadoAtual === EstadoPedido.AGUARDANDO_PAGAMENTO) { 25 | this.estadoAtual = EstadoPedido.CANCELADO; 26 | } else if (this.estadoAtual === EstadoPedido.PAGO) { 27 | this.estadoAtual = EstadoPedido.CANCELADO; 28 | } else { 29 | throw new Error("Pedido não pode ser cancelado."); 30 | } 31 | } 32 | 33 | despachar() { 34 | if (this.estadoAtual === EstadoPedido.PAGO) { 35 | this.estadoAtual = EstadoPedido.DESPACHADO; 36 | } else { 37 | throw new Error("Pedido não pode ser despachado."); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /aula-12/src/main.ts: -------------------------------------------------------------------------------- 1 | import { Pedido } from "./Pedido"; 2 | 3 | const pedido = new Pedido(); 4 | pedido.pagar(); 5 | pedido.despachar(); -------------------------------------------------------------------------------- /aula-12/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aula-3/factory_method/assets/uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-3/factory_method/assets/uml.png -------------------------------------------------------------------------------- /aula-3/factory_method/assets/uml_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-3/factory_method/assets/uml_default.png -------------------------------------------------------------------------------- /aula-3/factory_method/assets/uml_v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-3/factory_method/assets/uml_v1.png -------------------------------------------------------------------------------- /aula-3/factory_method/assets/uml_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-3/factory_method/assets/uml_v2.png -------------------------------------------------------------------------------- /aula-3/factory_method/assets/uml_v3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paeeglee/unisatc-design_patterns/a37b75f0b706613972456987ac9f06efcbe42f43/aula-3/factory_method/assets/uml_v3.png -------------------------------------------------------------------------------- /aula-3/factory_method/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "factory_method", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "factory_method", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "ts-node": "^10.9.2", 13 | "typescript": "^5.5.4" 14 | } 15 | }, 16 | "node_modules/@cspotcode/source-map-support": { 17 | "version": "0.8.1", 18 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 19 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "@jridgewell/trace-mapping": "0.3.9" 24 | }, 25 | "engines": { 26 | "node": ">=12" 27 | } 28 | }, 29 | "node_modules/@jridgewell/resolve-uri": { 30 | "version": "3.1.2", 31 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 32 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 33 | "dev": true, 34 | "license": "MIT", 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/sourcemap-codec": { 40 | "version": "1.5.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 42 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 43 | "dev": true, 44 | "license": "MIT" 45 | }, 46 | "node_modules/@jridgewell/trace-mapping": { 47 | "version": "0.3.9", 48 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 49 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 50 | "dev": true, 51 | "license": "MIT", 52 | "dependencies": { 53 | "@jridgewell/resolve-uri": "^3.0.3", 54 | "@jridgewell/sourcemap-codec": "^1.4.10" 55 | } 56 | }, 57 | "node_modules/@tsconfig/node10": { 58 | "version": "1.0.11", 59 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 60 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 61 | "dev": true, 62 | "license": "MIT" 63 | }, 64 | "node_modules/@tsconfig/node12": { 65 | "version": "1.0.11", 66 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 67 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 68 | "dev": true, 69 | "license": "MIT" 70 | }, 71 | "node_modules/@tsconfig/node14": { 72 | "version": "1.0.3", 73 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 74 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 75 | "dev": true, 76 | "license": "MIT" 77 | }, 78 | "node_modules/@tsconfig/node16": { 79 | "version": "1.0.4", 80 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 81 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 82 | "dev": true, 83 | "license": "MIT" 84 | }, 85 | "node_modules/@types/node": { 86 | "version": "22.4.0", 87 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.0.tgz", 88 | "integrity": "sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==", 89 | "dev": true, 90 | "license": "MIT", 91 | "peer": true, 92 | "dependencies": { 93 | "undici-types": "~6.19.2" 94 | } 95 | }, 96 | "node_modules/acorn": { 97 | "version": "8.12.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 99 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "8.3.3", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", 112 | "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", 113 | "dev": true, 114 | "license": "MIT", 115 | "dependencies": { 116 | "acorn": "^8.11.0" 117 | }, 118 | "engines": { 119 | "node": ">=0.4.0" 120 | } 121 | }, 122 | "node_modules/arg": { 123 | "version": "4.1.3", 124 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 125 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 126 | "dev": true, 127 | "license": "MIT" 128 | }, 129 | "node_modules/create-require": { 130 | "version": "1.1.1", 131 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 132 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 133 | "dev": true, 134 | "license": "MIT" 135 | }, 136 | "node_modules/diff": { 137 | "version": "4.0.2", 138 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 139 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 140 | "dev": true, 141 | "license": "BSD-3-Clause", 142 | "engines": { 143 | "node": ">=0.3.1" 144 | } 145 | }, 146 | "node_modules/make-error": { 147 | "version": "1.3.6", 148 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 149 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 150 | "dev": true, 151 | "license": "ISC" 152 | }, 153 | "node_modules/ts-node": { 154 | "version": "10.9.2", 155 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 156 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 157 | "dev": true, 158 | "license": "MIT", 159 | "dependencies": { 160 | "@cspotcode/source-map-support": "^0.8.0", 161 | "@tsconfig/node10": "^1.0.7", 162 | "@tsconfig/node12": "^1.0.7", 163 | "@tsconfig/node14": "^1.0.0", 164 | "@tsconfig/node16": "^1.0.2", 165 | "acorn": "^8.4.1", 166 | "acorn-walk": "^8.1.1", 167 | "arg": "^4.1.0", 168 | "create-require": "^1.1.0", 169 | "diff": "^4.0.1", 170 | "make-error": "^1.1.1", 171 | "v8-compile-cache-lib": "^3.0.1", 172 | "yn": "3.1.1" 173 | }, 174 | "bin": { 175 | "ts-node": "dist/bin.js", 176 | "ts-node-cwd": "dist/bin-cwd.js", 177 | "ts-node-esm": "dist/bin-esm.js", 178 | "ts-node-script": "dist/bin-script.js", 179 | "ts-node-transpile-only": "dist/bin-transpile.js", 180 | "ts-script": "dist/bin-script-deprecated.js" 181 | }, 182 | "peerDependencies": { 183 | "@swc/core": ">=1.2.50", 184 | "@swc/wasm": ">=1.2.50", 185 | "@types/node": "*", 186 | "typescript": ">=2.7" 187 | }, 188 | "peerDependenciesMeta": { 189 | "@swc/core": { 190 | "optional": true 191 | }, 192 | "@swc/wasm": { 193 | "optional": true 194 | } 195 | } 196 | }, 197 | "node_modules/typescript": { 198 | "version": "5.5.4", 199 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 200 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 201 | "dev": true, 202 | "license": "Apache-2.0", 203 | "bin": { 204 | "tsc": "bin/tsc", 205 | "tsserver": "bin/tsserver" 206 | }, 207 | "engines": { 208 | "node": ">=14.17" 209 | } 210 | }, 211 | "node_modules/undici-types": { 212 | "version": "6.19.6", 213 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", 214 | "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", 215 | "dev": true, 216 | "license": "MIT", 217 | "peer": true 218 | }, 219 | "node_modules/v8-compile-cache-lib": { 220 | "version": "3.0.1", 221 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 222 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 223 | "dev": true, 224 | "license": "MIT" 225 | }, 226 | "node_modules/yn": { 227 | "version": "3.1.1", 228 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 229 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 230 | "dev": true, 231 | "license": "MIT", 232 | "engines": { 233 | "node": ">=6" 234 | } 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /aula-3/factory_method/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "factory_method", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "dev": "npx ts-node -T ./src/main.ts", 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "devDependencies": { 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.5.4" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aula-3/factory_method/readme.md: -------------------------------------------------------------------------------- 1 | # Factory Method 2 | 3 | ## Definição 4 | O padrão Factory Method define uma interface para criar um objeto, mas permite que as subclasses possam decidir qual classe instanciar, possibilitando que uma classe seja capaz de prorrogar a instanciação de uma classe para subclasses. 5 | 6 | ## Contexto 7 | 8 | - Você está criando um módulo para geração de boletos em sua aplicação. 9 | - Esses boletos são de um banco específico. 10 | - Diferentes taxas e cálculos para cada tipo de boleto. 11 | - Vencimento 10 dias, Juros 2% Desconto 10% Multa 5% 12 | - Vencimento 30 dias, Juros 5% Desconto 5% Multa 10% 13 | - Vencimento 60 dias, Juros 10% Desconto 0% Multa 20% 14 | 15 | ## Evolução 16 | 17 | - Devemos evoluir nosso módulo para aceitar a geração de boletos de um novo banco. 18 | - Diferentes taxas e cálculos para cada tipo de boleto. 19 | - Vencimento 10 dias, Juros 3% Desconto 5% Multa 2% 20 | - Vencimento 30 dias, Juros 5% Desconto 2% Multa 5% 21 | - Vencimento 60 dias, Juros 10% Desconto 0% Multa 15% 22 | -------------------------------------------------------------------------------- /aula-3/factory_method/src/BancoCaixa.ts: -------------------------------------------------------------------------------- 1 | import BancoCaixaBoleto10Dias from "./BancoCaixaBoleto10Dias"; 2 | import BancoCaixaBoleto30Dias from "./BancoCaixaBoleto30Dias"; 3 | import BancoCaixaBoleto60Dias from "./BancoCaixaBoleto60Dias"; 4 | import Boleto from "./Boleto"; 5 | 6 | export default class BancoCaixa { 7 | gerarBoleto(vencimento: number, valor: number): Boleto { 8 | let boleto: Boleto; 9 | 10 | switch (vencimento) { 11 | case 10: 12 | boleto = new BancoCaixaBoleto10Dias(valor); 13 | break; 14 | case 30: 15 | boleto = new BancoCaixaBoleto30Dias(valor); 16 | break; 17 | case 60: 18 | boleto = new BancoCaixaBoleto60Dias(valor); 19 | break; 20 | default: 21 | throw new Error("Vencimento indisponível"); 22 | } 23 | 24 | console.log(`Boleto gerado com sucesso no valor de R$${valor}`); 25 | console.log(`Valor juros: R$${boleto.calcularJuros()}`); 26 | console.log(`Valor desconto: R$${boleto.calcularDesconto()}`); 27 | console.log(`Valor multa: R$${boleto.calcularMulta()}`); 28 | console.log(`------------------------------------------------`); 29 | 30 | return boleto; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /aula-3/factory_method/src/BancoCaixaBoleto10Dias.ts: -------------------------------------------------------------------------------- 1 | import Boleto from "./Boleto"; 2 | 3 | export default class BancoCaixaBoleto10Dias extends Boleto { 4 | constructor(valor: number) { 5 | super(valor); 6 | this.juros = 0.02; 7 | this.desconto = 0.10; 8 | this.multa = 0.05; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /aula-3/factory_method/src/BancoCaixaBoleto30Dias.ts: -------------------------------------------------------------------------------- 1 | import Boleto from "./Boleto"; 2 | 3 | export default class BancoCaixaBoleto30Dias extends Boleto { 4 | constructor(valor: number) { 5 | super(valor); 6 | this.juros = 0.05; 7 | this.desconto = 0.05; 8 | this.multa = 0.10; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /aula-3/factory_method/src/BancoCaixaBoleto60Dias.ts: -------------------------------------------------------------------------------- 1 | import Boleto from "./Boleto"; 2 | 3 | export default class BancoCaixaBoleto60Dias extends Boleto { 4 | constructor(valor: number) { 5 | super(valor); 6 | this.juros = 0.10; 7 | this.desconto = 0.00; 8 | this.multa = 0.20; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /aula-3/factory_method/src/Boleto.ts: -------------------------------------------------------------------------------- 1 | export default abstract class Boleto { 2 | protected valor: number; 3 | protected juros: number = 0; 4 | protected desconto: number = 0; 5 | protected multa: number = 0; 6 | 7 | constructor(valor: number) { 8 | this.valor = valor; 9 | } 10 | 11 | calcularJuros(): number { 12 | return this.valor * this.juros; 13 | } 14 | 15 | calcularDesconto(): number { 16 | return this.valor * this.desconto; 17 | } 18 | 19 | calcularMulta(): number { 20 | return this.valor * this.multa; 21 | } 22 | } -------------------------------------------------------------------------------- /aula-3/factory_method/src/main.ts: -------------------------------------------------------------------------------- 1 | import BancoCaixa from "./BancoCaixa"; 2 | 3 | const boletoCaixa = new BancoCaixa(); 4 | 5 | boletoCaixa.gerarBoleto(10, 100); 6 | boletoCaixa.gerarBoleto(30, 100); 7 | boletoCaixa.gerarBoleto(60, 100); -------------------------------------------------------------------------------- /aula-3/factory_method/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 4 | "module": "commonjs", /* Specify what module code is generated. */ 5 | "rootDir": "./src", /* Specify the root folder within your source files. */ 6 | "outDir": "./build", /* Specify an output folder for all emitted files. */ 7 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 8 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 9 | "strict": true, /* Enable all strict type-checking options. */ 10 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 11 | } 12 | } 13 | --------------------------------------------------------------------------------