diff --git a/docs/package-lock.json b/docs/package-lock.json index 6d803ba9..758db7ec 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8890,9 +8890,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.12.tgz", + "integrity": "sha512-KtPlUbWfxzGVul8Nut8Gw2Qe8sBzWY+8QVc5SL8iRFnpnrcoCaNlzO40c1R6hPmcdTwIPEDkq0Y9+27a5tVbdQ==", "dev": true, "dependencies": { "esbuild": "^0.18.10", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index b2c71f03..b7141017 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -1996,14 +1996,14 @@ packages: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} dev: true - /@vitejs/plugin-vue@4.3.4(vite@4.4.9)(vue@3.3.4): + /@vitejs/plugin-vue@4.3.4(vite@4.4.12)(vue@3.3.4): resolution: {integrity: sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.4.9(@types/node@18.17.12) + vite: 4.4.12(@types/node@18.17.12) vue: 3.3.4 dev: true @@ -2101,7 +2101,7 @@ packages: /@vuepress/bundler-vite@2.0.0-beta.67(@types/node@18.17.12): resolution: {integrity: sha512-W6YXixxu2G+xPECPFvx4Tzv5fmpBYvApEYVw7qfSNf/5YZ6aeIfV0AMGJZvhk7R/KniofvBTGCjAMSK4fqKp8w==} dependencies: - '@vitejs/plugin-vue': 4.3.4(vite@4.4.9)(vue@3.3.4) + '@vitejs/plugin-vue': 4.3.4(vite@4.4.12)(vue@3.3.4) '@vuepress/client': 2.0.0-beta.67 '@vuepress/core': 2.0.0-beta.67 '@vuepress/shared': 2.0.0-beta.67 @@ -2111,7 +2111,7 @@ packages: postcss: 8.4.31 postcss-load-config: 4.0.1(postcss@8.4.31) rollup: 3.28.1 - vite: 4.4.9(@types/node@18.17.12) + vite: 4.4.12(@types/node@18.17.12) vue: 3.3.4 vue-router: 4.2.4(vue@3.3.4) transitivePeerDependencies: @@ -5396,8 +5396,8 @@ packages: sade: 1.8.1 dev: true - /vite@4.4.9(@types/node@18.17.12): - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + /vite@4.4.12(@types/node@18.17.12): + resolution: {integrity: sha512-KtPlUbWfxzGVul8Nut8Gw2Qe8sBzWY+8QVc5SL8iRFnpnrcoCaNlzO40c1R6hPmcdTwIPEDkq0Y9+27a5tVbdQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: diff --git a/docs/src/en/backend-development/README.md b/docs/src/en/backend-development/README.md index 40c53313..d8542bca 100644 --- a/docs/src/en/backend-development/README.md +++ b/docs/src/en/backend-development/README.md @@ -165,7 +165,7 @@ In the next section, we'll use this starter to recreate our above REST API with - Create a project on [start.spring.io (also called Spring initializr)](https://start.spring.io/) with the following dependencies: Spring Web and Spring Boot DevTools. - Choose Kotlin as the language and Kotlin-Grade as the project manager. -- Add these dependencies: **Spring Web**, **Spring Boot DevTools** and **Spring Data JPA**. +- Add these dependencies: **Spring Web**, **Spring Boot DevTools**, **h2 database** and **Spring Data JPA**. - Click on "Generate". Download the archive, unzip it, and open the project with IntelliJ (preferably) or VSCode. - For VSCode, install a [Kotlin extension](https://marketplace.visualstudio.com/search?term=kotlin&target=VSCode&category=All%20categories&sortBy=Relevance) and [Spring Boot Extension Pack](https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack) ( :warning: Spring extension do not seem to support kotlin). - Create `Customer` data class in the `model` package without the `@Serializable` annotation. diff --git a/docs/src/en/kotlin-features/README.md b/docs/src/en/kotlin-features/README.md index 26a6a64e..8c52147c 100644 --- a/docs/src/en/kotlin-features/README.md +++ b/docs/src/en/kotlin-features/README.md @@ -242,17 +242,17 @@ The official documentation provides exhaustive documentation on [Kotlin and JVM #### Exercise 5 -[Please click on this link to view the exercise](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS43LjEwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiLy8gVGhlICd0aGlzJyBrZXl3b3JkIGluc2lkZSBhbiBleHRlbnNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHJlY2VpdmVyIG9iamVjdCAodGhlIG9iamVjdCB0aGF0IGNhbGxzIHRoZSBleHRlbnNpb24pXG4vLyBUT0RPIGNlZWF0ZSBhbiBleHRlbnNpb24gZnVuY3Rpb24gJ21ha2VRdWVzdGlvbicgb2YgdGhlIFN0cmluZyBjbGFzcyB0aGF0IHJldHVybiBhIG5ldyBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgb3JpZ2luYWwgU3RyaW5nICsgJz8nIGF0IHRoZSBlbmRcblxuLy8gcHJpbnRsbihcIkhvdyBkbyB5b3UgZG9cIi5tYWtlUXVlc3Rpb24oKSkgLy8gc2hvdWxkIHByaW50IFwiSG93IGRvIHlvdSBkbyA/XCJcblxuY2xhc3MgTWFnZShocDogSW50KTogRXh0ZW5zaW9uczAxLkFkdmVudHVyZXIoaHApe1xuICAgIGNvbXBhbmlvbiBvYmplY3Qge1xuICAgICAgICB2YXIgY291bnQgPSAwXG4gICAgfVxuICAgIGluaXQge1xuICAgICAgICBNYWdlLmNvdW50ICs9IDFcbiAgICB9XG59XG4vLyBUT0RPIGRlZmluZSBhbiBleHRlbnNpb24gZnVuY3Rpb24gb24gdGhlIGNvbXBhbmlvbiBvYmplY3QgdGhhdCBwcmludHMgdGhlIG51bWJlciBvZiBjcmVhdGVkIG1hZ2VzLlxuLy8gaGludDogXCJ0aGlzXCIgYWxsb3dzIHRvIHJlZmVyZW5jZSB0aGUgY29tcGFuaW9uIG9iamVjdFxuXG52YWwgbWFnZSA9IE1hZ2UoMTAwKVxudmFsIG1hZ2UyID0gTWFnZSgyMDApXG5wcmludChcIk1hZ2UgY291bnQ6IFwiKVxuLy8gTWFnZS5wcmludENvdW50KCkgLy8gMlxuXG4vLyBUT0RPIGNyYXRlIGFuIGV4dGVuc2lvbiBmdW5jdGlvbiBcImV2ZW5Db3VudCgpOkludFwiIG9uIExpc3Q8SW50PiB0aGF0IHJldHVybiB0aGUgbnVtYmVyIG9mIGV2ZW4gdmFsdWVzXG5cbi8vcHJpbnRsbihsaXN0T2YoMSwgMiwgMywgNCwgNSkuZXZlbkNvdW50KCkpIC8vIHByaW50cyAyXG5cbi8vIFRPRE8gY3JlYXRlIGEgZ2VuZXJpYyBleHRlbnNpb24gZnVuY3Rpb24gXCJjb25jYXRlbmF0ZSgpOlN0cmluZ1wiIG9uIExpc3Q8VD4gdGhhdCBjb25jYXRlbmF0ZXMgdGhlIHRvU3RyaW5nIHZhbHVlIG9mIGFsbCBvZiB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3RcblxuLy8gcHJpbnRsbihsaXN0T2YoXCJIZWxsbyBcIiwgXCJXb3JsZFwiLCBcIkxpbmVcIikuY29uY2F0ZW5hdGUoKSkgLy8gc2hvdWxkIHByaW50IFwiSGVsbG8gV29ybGRMaW5lXCJcbi8vIHByaW50bG4obGlzdE9mKDEwMCwgMjAwLCAzMDApLmNvbmNhdGVuYXRlKCkpIC8vIHNob3VsZCBwcmludCBcIjEwMDIwMDMwMFwiXG5cbi8vIFRPRE8gY3JlYXRlIGEgZ2VuZXJpYyBleHRlbnNpb24gZnVuY3Rpb24gXCJMaXN0Py5tYWtlTm90TnVsbCgpOkxpc3QnICB0aGF0IHJldHVybnMgYW4gZW1wdHkgbGlzdCBpZiB0aGUgcmVjZWl2ZXIgaXMgbnVsbCwgb3IgdGhlIG9yaWdpbmFsIGxpc3Qgb3JoZXJ3aXNlXG5cbi8vIHByaW50bG4obGlzdE9mKDEsIDIsIDMpLm1ha2VOb3ROdWxsKCkpIC8vIHNob3VsZCBwcmludCBbMSwgMiwgM11cbi8vIHZhbCBsOiBMaXN0PEludD4/ID0gbnVsbFxuLy8gcHJpbnRsbihsLm1ha2VOb3ROdWxsKCkpIC8vIHNob3VsZCBwcmludCBbXSJ9) +[Please click on this link to view the exercise](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjIwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoib3BlbiBjbGFzcyBBZHZlbnR1cmVyKHZhciBocDogSW50KXtcbiAgICB2YWwgbWF4SHAgPSBocFxuICAgIGZ1biBhdHRhY2soKTpTdHJpbmcgPSBcIkkgZGVhbHQgMTAgZGFtYWdlXCJcbn1cblxuLy8gLy8gLy8gVGhlICd0aGlzJyBrZXl3b3JkIGluc2lkZSBhbiBleHRlbnNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHJlY2VpdmVyIG9iamVjdCAodGhlIG9iamVjdCB0aGF0IGNhbGxzIHRoZSBleHRlbnNpb24pXG4vLyBUT0RPIGNlZWF0ZSBhbiBleHRlbnNpb24gZnVuY3Rpb24gJ21ha2VRdWVzdGlvbicgb2YgdGhlIFN0cmluZyBjbGFzcyB0aGF0IHJldHVybiBhIG5ldyBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgb3JpZ2luYWwgU3RyaW5nICsgJz8nIGF0IHRoZSBlbmRcblxuLy8gcHJpbnRsbihcIkhvdyBkbyB5b3UgZG9cIi5tYWtlUXVlc3Rpb24oKSkgLy8gc2hvdWxkIHByaW50IFwiSG93IGRvIHlvdSBkbyA/XCJcblxuY2xhc3MgTWFnZShocDogSW50KTogQWR2ZW50dXJlcihocCl7XG4gICAgY29tcGFuaW9uIG9iamVjdCB7XG4gICAgICAgIHZhciBjb3VudCA9IDBcbiAgICB9XG4gICAgaW5pdCB7XG4gICAgICAgIE1hZ2UuY291bnQgKz0gMVxuICAgIH1cbn1cbi8vIFRPRE8gZGVmaW5lIGFuIGV4dGVuc2lvbiBmdW5jdGlvbiBvbiB0aGUgY29tcGFuaW9uIG9iamVjdCB0aGF0IHByaW50cyB0aGUgbnVtYmVyIG9mIGNyZWF0ZWQgbWFnZXMuXG4vLyBoaW50OiBcInRoaXNcIiBhbGxvd3MgdG8gcmVmZXJlbmNlIHRoZSBjb21wYW5pb24gb2JqZWN0XG5cbnZhbCBtYWdlID0gTWFnZSgxMDApXG52YWwgbWFnZTIgPSBNYWdlKDIwMClcbnByaW50KFwiTWFnZSBjb3VudDogXCIpXG4vLyBNYWdlLnByaW50Q291bnQoKSAvLyAyXG5cbi8vIFRPRE8gY3JhdGUgYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIFwiZXZlbkNvdW50KCk6SW50XCIgb24gTGlzdDxJbnQ+IHRoYXQgcmV0dXJuIHRoZSBudW1iZXIgb2YgZXZlbiB2YWx1ZXNcblxuLy9wcmludGxuKGxpc3RPZigxLCAyLCAzLCA0LCA1KS5ldmVuQ291bnQoKSkgLy8gcHJpbnRzIDJcblxuLy8gVE9ETyBjcmVhdGUgYSBnZW5lcmljIGV4dGVuc2lvbiBmdW5jdGlvbiBcImNvbmNhdGVuYXRlKCk6U3RyaW5nXCIgb24gTGlzdDxUPiB0aGF0IGNvbmNhdGVuYXRlcyB0aGUgdG9TdHJpbmcgdmFsdWUgb2YgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdFxuXG4vLyBwcmludGxuKGxpc3RPZihcIkhlbGxvIFwiLCBcIldvcmxkXCIsIFwiTGluZVwiKS5jb25jYXRlbmF0ZSgpKSAvLyBzaG91bGQgcHJpbnQgXCJIZWxsbyBXb3JsZExpbmVcIlxuLy8gcHJpbnRsbihsaXN0T2YoMTAwLCAyMDAsIDMwMCkuY29uY2F0ZW5hdGUoKSkgLy8gc2hvdWxkIHByaW50IFwiMTAwMjAwMzAwXCJcblxuLy8gVE9ETyBjcmVhdGUgYSBnZW5lcmljIGV4dGVuc2lvbiBmdW5jdGlvbiBcIkxpc3Q/Lm1ha2VOb3ROdWxsKCk6TGlzdCcgIHRoYXQgcmV0dXJucyBhbiBlbXB0eSBsaXN0IGlmIHRoZSByZWNlaXZlciBpcyBudWxsLCBvciB0aGUgb3JpZ2luYWwgbGlzdCBvcmhlcndpc2VcblxuLy8gcHJpbnRsbihsaXN0T2YoMSwgMiwgMykubWFrZU5vdE51bGwoKSkgLy8gc2hvdWxkIHByaW50IFsxLCAyLCAzXVxuLy8gdmFsIGw6IExpc3Q8SW50Pj8gPSBudWxsXG4vLyBwcmludGxuKGwubWFrZU5vdE51bGwoKSkgLy8gc2hvdWxkIHByaW50IFtdIn0=) ::: details Please open to see the solution(s) -[Solution](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS43LjEwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiLy8gVGhlICd0aGlzJyBrZXl3b3JkIGluc2lkZSBhbiBleHRlbnNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHJlY2VpdmVyIG9iamVjdCAodGhlIG9iamVjdCB0aGF0IGNhbGxzIHRoZSBleHRlbnNpb24pXG4vLyBUT0RPIGNlZWF0ZSBhbiBleHRlbnNpb24gZnVuY3Rpb24gJ21ha2VRdWVzdGlvbicgb2YgdGhlIFN0cmluZyBjbGFzcyB0aGF0IHJldHVybiBhIG5ldyBTdHJpbmcgdGhhdCBjb250YWlucyB0aGUgb3JpZ2luYWwgU3RyaW5nICsgJz8nIGF0IHRoZSBlbmRcblxuLy8gcHJpbnRsbihcIkhvdyBkbyB5b3UgZG9cIi5tYWtlUXVlc3Rpb24oKSkgLy8gc2hvdWxkIHByaW50IFwiSG93IGRvIHlvdSBkbyA/XCJcblxuLy8gVE9ETyBkZWZpbmUgYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIG9uIHRoZSBjb21wYW5pb24gb2JqZWN0IHRoYXQgcHJpbnRzIHRoZSBudW1iZXIgb2YgY3JlYXRlZCBtYWdlcy5cbmNsYXNzIE1hZ2UoaHA6IEludCk6IEV4dGVuc2lvbnMwMS5BZHZlbnR1cmVyKGhwKXtcbiAgICBjb21wYW5pb24gb2JqZWN0IHtcbiAgICAgICAgdmFyIGNvdW50ID0gMFxuICAgIH1cbiAgICBpbml0IHtcbiAgICAgICAgTWFnZS5jb3VudCArPSAxXG4gICAgfVxufVxuLy8gaGludDogXCJ0aGlzXCIgYWxsb3dzIHRvIHJlZmVyZW5jZSB0aGUgY29tcGFuaW9uIG9iamVjdFxuZnVuIE1hZ2UuQ29tcGFuaW9uLnByaW50Q291bnQoKSA9IHByaW50bG4odGhpcy5jb3VudClcblxudmFsIG1hZ2UgPSBNYWdlKDEwMClcbnZhbCBtYWdlMiA9IE1hZ2UoMjAwKVxucHJpbnQoXCJNYWdlIGNvdW50OiBcIilcbk1hZ2UucHJpbnRDb3VudCgpIC8vIDJcblxuLy8gVE9ETyBjcmF0ZSBhbiBleHRlbnNpb24gZnVuY3Rpb24gXCJldmVuQ291bnQoKTpJbnRcIiBvbiBMaXN0PEludD4gdGhhdCByZXR1cm4gdGhlIG51bWJlciBvZiBldmVuIHZhbHVlc1xuXG4vL3ByaW50bG4obGlzdE9mKDEsIDIsIDMsIDQsIDUpLmV2ZW5Db3VudCgpKSAvLyBwcmludHMgMlxuXG4vLyBUT0RPIGNyZWF0ZSBhIGdlbmVyaWMgZXh0ZW5zaW9uIGZ1bmN0aW9uIFwiY29uY2F0ZW5hdGUoKTpTdHJpbmdcIiBvbiBMaXN0PFQ+IHRoYXQgY29uY2F0ZW5hdGVzIHRoZSB0b1N0cmluZyB2YWx1ZSBvZiBhbGwgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0XG5mdW4gPFQ+IExpc3Q8VD4uY29uY2F0ZW5hdGUoKTogU3RyaW5nID0gdGhpcy5tYXAgeyB2IC0+IHYudG9TdHJpbmcoKSB9LnJlZHVjZSB7IGFjYywgcyAtPiBhY2MgKyBzIH1cbnByaW50bG4obGlzdE9mKFwiSGVsbG8gXCIsIFwiV29ybGRcIiwgXCJMaW5lXCIpLmNvbmNhdGVuYXRlKCkpIC8vIHNob3VsZCBwcmludCBcIkhlbGxvIFdvcmxkTGluZVwiXG5wcmludGxuKGxpc3RPZigxMDAsIDIwMCwgMzAwKS5jb25jYXRlbmF0ZSgpKSAvLyBzaG91bGQgcHJpbnQgXCIxMDAyMDAzMDBcIlxuXG4vLyBUT0RPIGNyZWF0ZSBhIGdlbmVyaWMgZXh0ZW5zaW9uIGZ1bmN0aW9uIFwiTGlzdD8ubWFrZU5vdE51bGwoKTpMaXN0JyAgdGhhdCByZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiB0aGUgcmVjZWl2ZXIgaXMgbnVsbCwgb3IgdGhlIG9yaWdpbmFsIGxpc3Qgb3JoZXJ3aXNlXG5mdW4gPFQ+IExpc3Q8VD4/Lm1ha2VOb3ROdWxsKCk6IExpc3Q8VD57XG4gICAgcmV0dXJuIGxpc3RPZjxUPigpXG59XG5wcmludGxuKGxpc3RPZigxLCAyLCAzKS5tYWtlTm90TnVsbCgpKSAvLyBzaG91bGQgcHJpbnQgWzEsIDIsIDNdXG52YWwgbDogTGlzdDxJbnQ+PyA9IG51bGxcbnByaW50bG4obC5tYWtlTm90TnVsbCgpKSAvLyBzaG91bGQgcHJpbnQgW10ifQ==) +[Solution](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjIwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoib3BlbiBjbGFzcyBBZHZlbnR1cmVyKHZhciBocDogSW50KXtcbiAgICB2YWwgbWF4SHAgPSBocFxuICAgIGZ1biBhdHRhY2soKTpTdHJpbmcgPSBcIkkgZGVhbHQgMTAgZGFtYWdlXCJcbn1cbi8vIFRoZSAndGhpcycga2V5d29yZCBpbnNpZGUgYW4gZXh0ZW5zaW9uIGNvcnJlc3BvbmRzIHRvIHRoZSByZWNlaXZlciBvYmplY3QgKHRoZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZXh0ZW5zaW9uKVxuLy8gVE9ETyBjZWVhdGUgYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uICdtYWtlUXVlc3Rpb24nIG9mIHRoZSBTdHJpbmcgY2xhc3MgdGhhdCByZXR1cm4gYSBuZXcgU3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIG9yaWdpbmFsIFN0cmluZyArICc/JyBhdCB0aGUgZW5kXG5mdW4gU3RyaW5nLm1ha2VRdWVzdGlvbigpID0gXCIke3RoaXN9ID9cIlxuXG4vLyBUT0RPIGRlZmluZSBhbiBleHRlbnNpb24gZnVuY3Rpb24gb24gdGhlIGNvbXBhbmlvbiBvYmplY3QgdGhhdCBwcmludHMgdGhlIG51bWJlciBvZiBjcmVhdGVkIG1hZ2VzLlxuY2xhc3MgTWFnZShocDogSW50KTogQWR2ZW50dXJlcihocCl7XG4gICAgY29tcGFuaW9uIG9iamVjdCB7XG4gICAgICAgIHZhciBjb3VudCA9IDBcbiAgICB9XG4gICAgaW5pdCB7XG4gICAgICAgIE1hZ2UuY291bnQgKz0gMVxuICAgIH1cbn1cbi8vIGhpbnQ6IFwidGhpc1wiIGFsbG93cyB0byByZWZlcmVuY2UgdGhlIGNvbXBhbmlvbiBvYmplY3RcbmZ1biBNYWdlLkNvbXBhbmlvbi5wcmludENvdW50KCkgPSBwcmludGxuKHRoaXMuY291bnQpXG5cblxuZnVuIG1haW4oKXtcbiAgICAvLyBwcmludGxuKFwiSG93IGRvIHlvdSBkb1wiLm1ha2VRdWVzdGlvbigpKSBzaG91bGQgcHJpbnQgXCJIb3cgZG8geW91IGRvID9cIlxuICAgIHByaW50bG4oXCJIb3cgZG8geW91IGRvXCIubWFrZVF1ZXN0aW9uKCkpXG4gICAgXG4gICAgdmFsIG1hZ2UgPSBNYWdlKDEwMClcbiAgICB2YWwgbWFnZTIgPSBNYWdlKDIwMClcbiAgICBwcmludChcIk1hZ2UgY291bnQ6IFwiKVxuICAgIE1hZ2UucHJpbnRDb3VudCgpIC8vIDJcblxuICAgIC8vIFRPRE8gY3JhdGUgYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIFwiZXZlbkNvdW50KCk6SW50XCIgb24gTGlzdDxJbnQ+IHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGV2ZW4gdmFsdWVzXG5cbiAgICAvL3ByaW50bG4obGlzdE9mKDEsIDIsIDMsIDQsIDUpLmV2ZW5Db3VudCgpKSAvLyBwcmludHMgMlxuXG4gICAgLy8gVE9ETyBjcmVhdGUgYSBnZW5lcmljIGV4dGVuc2lvbiBmdW5jdGlvbiBcImNvbmNhdGVuYXRlKCk6U3RyaW5nXCIgb24gTGlzdDxUPiB0aGF0IGNvbmNhdGVuYXRlcyB0aGUgdG9TdHJpbmcgdmFsdWUgb2YgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdFxuICAgIGZ1biA8VD4gTGlzdDxUPi5jb25jYXRlbmF0ZSgpOiBTdHJpbmcgPSB0aGlzLm1hcCB7IHYgLT4gdi50b1N0cmluZygpIH0ucmVkdWNlIHsgYWNjLCBzIC0+IGFjYyArIHMgfVxuICAgIHByaW50bG4obGlzdE9mKFwiSGVsbG8gXCIsIFwiV29ybGRcIiwgXCJMaW5lXCIpLmNvbmNhdGVuYXRlKCkpIC8vIHNob3VsZCBwcmludCBcIkhlbGxvIFdvcmxkTGluZVwiXG4gICAgcHJpbnRsbihsaXN0T2YoMTAwLCAyMDAsIDMwMCkuY29uY2F0ZW5hdGUoKSkgLy8gc2hvdWxkIHByaW50IFwiMTAwMjAwMzAwXCJcblxuICAgIC8vIFRPRE8gY3JlYXRlIGEgZ2VuZXJpYyBleHRlbnNpb24gZnVuY3Rpb24gXCJMaXN0Py5tYWtlTm90TnVsbCgpOkxpc3QnICB0aGF0IHJldHVybiBhbiBlbXB0eSBsaXN0IGlmIHRoZSByZWNlaXZlciBpcyBudWxsLCBvciB0aGUgb3JpZ2luYWwgbGlzdCBvcmhlcndpc2VcbiAgICBmdW4gPFQ+IExpc3Q8VD4/Lm1ha2VOb3ROdWxsKCk6IExpc3Q8VD57XG4gICAgICAgIHJldHVybiBsaXN0T2Y8VD4oKVxuICAgIH1cbiAgICBwcmludGxuKGxpc3RPZigxLCAyLCAzKS5tYWtlTm90TnVsbCgpKSAvLyBzaG91bGQgcHJpbnQgWzEsIDIsIDNdXG4gICAgdmFsIGw6IExpc3Q8SW50Pj8gPSBudWxsXG4gICAgcHJpbnRsbihsLm1ha2VOb3ROdWxsKCkpIC8vIHNob3VsZCBwcmludCBbXVxufSJ9) ::: #### Exercise 6 -[Please click on this link to view the exercise](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS43LjEwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiLy8gVE9ETyB1c2luZyB0aGUgb2JqZWN0IGRlY2xhcmF0aW9uIHN5bmN0YXgsIGNyZWF0ZSBhIHNpbmdsZXRvbiBEcmlua0Rpc3BlbnNlciB0aGF0IGhhcyB0aGVzZSBtZXRob2RzOiBwdXREcmluayhEcmluayksIExpc3Q8RHJpbms+IGFsbEF2YWlsYWJsZURyaW5rcygpIGFuZCBwaWNrTGFzdERyaW5rKCk6RHJpbmtcbi8vICBTeW50YXg6IG9iamVjdCBTaW5nbGV0b25OYW1lIHsgLi4uIH0gfVxuXG4vLyBUT0RPIHVuY29tbWVudCB0byB0ZXN0IHlvdSBjb2RlXG4vL0RyaW5rRGlzcGVuc2VyLnB1dERyaW5rKE9iamVjdEV4cHJlc3Npb25zMDEuRHJpbmsoMTAwKSlcbi8vRHJpbmtEaXNwZW5zZXIucHV0RHJpbmsoT2JqZWN0RXhwcmVzc2lvbnMwMS5Ecmluayg1MCkpXG4vL0RyaW5rRGlzcGVuc2VyLnB1dERyaW5rKE9iamVjdEV4cHJlc3Npb25zMDEuRHJpbmsoNzApKVxuLy9wcmludGxuKERyaW5rRGlzcGVuc2VyLmFsbEF2YWlsYWJsZURyaW5rcygpLnNpemUpIC8vIDNcbi8vRHJpbmtEaXNwZW5zZXIucHV0RHJpbmsoT2JqZWN0RXhwcmVzc2lvbnMwMS5waWNrTGFzdERyaW5rKCkpXG4vL3ByaW50bG4oRHJpbmtEaXNwZW5zZXIuYWxsQXZhaWxhYmxlRHJpbmtzKCkuc2l6ZSkgLy8gMlxuXG4vLyBUT0RPIGNyZWF0ZSBhIGNsYXNzIG5hbWVkIERyaW5rTWFrZXIuIFdlIHdhbnQgdG8gaGF2ZSBhIHN0YXRpYyBtZXRob2QgXCJjcmVhdGVEcmluaygpOiBPYmplY3RFeHByZXNzaW9uczAxLkRyaW5rXCIgdGhhdCBjcmVhdGVzIGEgbmV3IERyaW5rLlxuLy8gICBBbiBvYmplY3QgZGVjbGFyYXRpb24gaW5zaWRlIGEgY2xhc3MgY2FuIGJlIG1hcmtlZCBhcyBjb21wYW5pb25cbi8vICAgU3ludGF4OlxuLypcbmNsYXNzIENsYXNzTmFtZSB7XG4gICAgY29tcGFuaW9uIG9iamVjdCAob3B0aW9ubmFsIG5hbWUpIHtcbiAgICAgICAgLi4uXG4gICAgfVxufVxuKi9cblxuXG4vLyBUT0RPIHVuY29tbWVudCB0byB0ZXN0XG4vL3ZhbCBkcmluayA9IERyaW5rTWFrZXIuY3JlYXRlRHJpbmsoKVxuLy92YWwgZHJpbmsyID0gRHJpbmtNYWtlci5Db21wYW5pb24uY3JlYXRlRHJpbmsoKVxuXG4vLyBUT0RPIHdoYXQgaXMgdGhlIHR5cGUgb2YgY29tcGFuaW9uT2JqZWN0XG4vL3ZhbCBjb21wYW5pb25PYmplY3QgPSBEcmlua01ha2VyXG4vL2NvbXBhbmlvbk9iamVjdC5jcmVhdGVEcmluaygpXG5cbi8vIFRPRE8gbWFrZSB0aGUgZWFybGllciBjb21wYW5pb24gb2JqZWN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIENvdW50ZXIgaW50ZXJmYWNlIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIGNyZWF0ZWQgRHJpbmtzXG5pbnRlcmZhY2UgQ291bnRlcntcbiAgICB2YXIgY291bnQ6IEludFxufVxuLy8gVE9ETyB1bmNvbW1lbnQgdG8gdGVzdFxuLy9wcmludGxuKERyaW5rTWFrZXIuY291bnQpIC8vIDMifQ==) +[Please click on this link to view the exercise](https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjIwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoib3BlbiBjbGFzcyBEcmluayh2YXIgdm9sdW1lOiBJbnQpe1xuICAgIG9wZW4gZnVuIGNvbnN1bWUoY29uc3VtZWRWb2x1bWU6IEludCl7XG4gICAgICAgIHRoaXMudm9sdW1lIC09IGNvbnN1bWVkVm9sdW1lXG4gICAgfVxufVxuLyogVE9ETyB1c2luZyB0aGUgb2JqZWN0IGRlY2xhcmF0aW9uIHN5bmN0YXgsIGNyZWF0ZSBhIHNpbmdsZXRvbiBEcmlua0Rpc3BlbnNlciB0aGF0IGhhcyB0aGVzZSBtZXRob2RzOiBwdXREcmluayhEcmluayksXG4gIExpc3Q8RHJpbms+IGFsbEF2YWlsYWJsZURyaW5rcygpIGFuZCBwaWNrTGFzdERyaW5rKCk6RHJpbmsgKi9cbiAgXG4vLyAgU3ludGF4OiBvYmplY3QgU2luZ2xldG9uTmFtZSB7IC4uLiB9IH1cblxuLy8gVE9ETyB1bmNvbW1lbnQgdG8gdGVzdCB5b3UgY29kZVxuLy9Ecmlua0Rpc3BlbnNlci5wdXREcmluayhEcmluaygxMDApKVxuLy9Ecmlua0Rpc3BlbnNlci5wdXREcmluayhEcmluayg1MCkpXG4vL0RyaW5rRGlzcGVuc2VyLnB1dERyaW5rKERyaW5rKDcwKSlcbi8vcHJpbnRsbihEcmlua0Rpc3BlbnNlci5hbGxBdmFpbGFibGVEcmlua3MoKS5zaXplKSAvLyAzXG4vL0RyaW5rRGlzcGVuc2VyLnB1dERyaW5rKHBpY2tMYXN0RHJpbmsoKSlcbi8vcHJpbnRsbihEcmlua0Rpc3BlbnNlci5hbGxBdmFpbGFibGVEcmlua3MoKS5zaXplKSAvLyAyXG5cbi8vIFRPRE8gY3JlYXRlIGEgY2xhc3MgbmFtZWQgRHJpbmtNYWtlci4gV2Ugd2FudCB0byBoYXZlIGEgc3RhdGljIG1ldGhvZCBcImNyZWF0ZURyaW5rKCk6IE9iamVjdEV4cHJlc3Npb25zMDEuRHJpbmtcIiB0aGF0IGNyZWF0ZXMgYSBuZXcgRHJpbmsuXG4vLyAgIEFuIG9iamVjdCBkZWNsYXJhdGlvbiBpbnNpZGUgYSBjbGFzcyBjYW4gYmUgbWFya2VkIGFzIGNvbXBhbmlvblxuLy8gICBTeW50YXg6XG4vKlxuY2xhc3MgQ2xhc3NOYW1lIHtcbiAgICBjb21wYW5pb24gb2JqZWN0IChvcHRpb25uYWwgbmFtZSkge1xuICAgICAgICAuLi5cbiAgICB9XG59XG4qL1xuXG5cbi8vIFRPRE8gdW5jb21tZW50IHRvIHRlc3Rcbi8vdmFsIGRyaW5rID0gRHJpbmtNYWtlci5jcmVhdGVEcmluaygpXG4vL3ZhbCBkcmluazIgPSBEcmlua01ha2VyLkNvbXBhbmlvbi5jcmVhdGVEcmluaygpXG5cbi8vIFRPRE8gd2hhdCBpcyB0aGUgdHlwZSBvZiBjb21wYW5pb25PYmplY3Rcbi8vdmFsIGNvbXBhbmlvbk9iamVjdCA9IERyaW5rTWFrZXJcbi8vY29tcGFuaW9uT2JqZWN0LmNyZWF0ZURyaW5rKClcblxuLy8gVE9ETyBtYWtlIHRoZSBlYXJsaWVyIGNvbXBhbmlvbiBvYmplY3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQ291bnRlciBpbnRlcmZhY2UgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgY3JlYXRlZCBEcmlua3NcbmludGVyZmFjZSBDb3VudGVye1xuICAgIHZhciBjb3VudDogSW50XG59XG4vLyBUT0RPIHVuY29tbWVudCB0byB0ZXN0XG4vL3ByaW50bG4oRHJpbmtNYWtlci5jb3VudCkgLy8gMyJ9) ::: details Please open to see the solution(s) diff --git a/material/rest-api-ktor-server/http_requests/customer.http b/material/rest-api-ktor-server/http_requests/customer.http index 96173e22..ed8f1732 100644 --- a/material/rest-api-ktor-server/http_requests/customer.http +++ b/material/rest-api-ktor-server/http_requests/customer.http @@ -12,7 +12,7 @@ Content-Type: application/json "email": "jane.smith@company.com" } ### -POST http://{{base_customer_url}} +POST {{base_customer_url}} Content-Type: application/json { @@ -45,6 +45,6 @@ Accept: application/json GET {{base_customer_url}}/500 Accept: application/json ### -DELETE {{base_customer_url}}/100 +DELETE {{base_customer_url}}/ ### DELETE {{base_customer_url}}/500 \ No newline at end of file diff --git a/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.jar b/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.jar index 249e5832..943f0cbf 100644 Binary files a/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.jar and b/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.jar differ diff --git a/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.properties b/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.properties index 774fae87..3499ded5 100644 --- a/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.properties +++ b/material/rest-api-spring-kotlin/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/material/rest-api-spring-kotlin/gradlew b/material/rest-api-spring-kotlin/gradlew index a69d9cb6..65dcd68d 100755 --- a/material/rest-api-spring-kotlin/gradlew +++ b/material/rest-api-spring-kotlin/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac diff --git a/material/rest-api-spring-kotlin/gradlew.bat b/material/rest-api-spring-kotlin/gradlew.bat index f127cfd4..93e3f59f 100644 --- a/material/rest-api-spring-kotlin/gradlew.bat +++ b/material/rest-api-spring-kotlin/gradlew.bat @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% diff --git a/material/rest-api-spring-kotlin/src/main/kotlin/com/worldline/training/restapispringkotlin/controller/CustomerController.kt b/material/rest-api-spring-kotlin/src/main/kotlin/com/worldline/training/restapispringkotlin/controller/CustomerController.kt index 9c95efee..cd315906 100644 --- a/material/rest-api-spring-kotlin/src/main/kotlin/com/worldline/training/restapispringkotlin/controller/CustomerController.kt +++ b/material/rest-api-spring-kotlin/src/main/kotlin/com/worldline/training/restapispringkotlin/controller/CustomerController.kt @@ -9,16 +9,18 @@ val store = mutableListOf() @RestController @RequestMapping("/customer") class CustomerController { - @GetMapping - fun getAll() = store + @GetMapping fun getAll() = store - @GetMapping("{id}") - fun getById(@PathVariable id: String) = store.firstOrNull { it.id == id } + @GetMapping("{id}") fun getById(@PathVariable id: String) = store.firstOrNull { it.id == id } @PostMapping @ResponseStatus(HttpStatus.CREATED) - fun addOne(@RequestBody customer: Customer) { store.add(customer) } + fun addOne(@RequestBody customer: Customer) { + store.add(customer) + } @DeleteMapping("{id}") - fun deleteOne(@PathVariable id: String) { store.removeIf { it.id == id } } -} \ No newline at end of file + fun deleteOne(@PathVariable id: String) { + store.removeIf { it.id == id } + } +}