From d40cf90161ae17dace60c89fbf6874ec3ce92cb0 Mon Sep 17 00:00:00 2001 From: Attila Hideg Date: Mon, 26 Aug 2024 09:03:37 +0200 Subject: [PATCH 01/15] HF3: Added update as Exercise 2, old moved to Exercise 3 --- docs/hu/homework/mongodb/index.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/hu/homework/mongodb/index.md b/docs/hu/homework/mongodb/index.md index 65c7a162..f2aacd2e 100644 --- a/docs/hu/homework/mongodb/index.md +++ b/docs/hu/homework/mongodb/index.md @@ -1,6 +1,6 @@ # Feladat: MongoDB -A házi feladat opcionális. A teljesítéssel **2 pluszpont és 2 iMsc pont** szerezhető. +A házi feladat opcionális. A teljesítéssel **4 pont és 2 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. @@ -12,7 +12,7 @@ Előkészületként hozz létre egy új adatbázist, a [gyakorlatanyagban](../.. Első lépésként a gyökérben található `neptun.txt` fájlba írd bele a Neptun kódodat! -## Feladat 1: Legnagyobb összértékű termék a raktárban (2 pluszpont) +## Feladat 1: Legnagyobb összértékű termék a raktárban (2 pont) A feladat meghatározni, hogy a raktárunkban egy adott kategóriába tartozó termékek közül melyik képviseli a legnagyobb összértéket — tehát melyik termék az, amelyiknek az **ára szorozva a raktárban lévő mennyiségével a legnagyobb**. Ehhez a `ProductRepository` osztályban a következő metódust kell implementálnunk. @@ -65,7 +65,25 @@ A teszteléshez találsz unit teszteket a solution-ben. A teszteket [Visual Stud A képernyőképen levő forráskód tekintetében nem szükséges, hogy a végső megoldásban szereplő kód betűről betűre megegyezzen a képen és a feltöltött változatban. Tehát a tesztek sikeres lefutása után elkészített képernyőképet nem szükséges frissíteni, ha a forráskódban **kisebb** változtatást eszközölsz. -## Feladat 2: Raktár méret becslés (2 iMsc pont) +## Feladat 2: Új termék beszúrása (2 pont) + +A feladat egy új termék beszúrásához egy függvény készítése. A beszúráskor több feltételnek is meg kell felelni, amiket ellenőrizni kell a beszúrás előtt. Ehhez implementáld az `InsertProduct(string name, string category, int vat)` függvényt + +A következőkre kell figyelni a beszúráskor: +- Amennyiben adott névvel már van termék, dobj kivételt (`ArgumentException`) +- Amennyiben a megadott `category` nevű kategória még nincsen, dobj kivételt (`ArgumentException`) +- Amennyiben a megadott `vat` értékhez tartozik már név egy másik `Product` példány esetén, akkor használd annak a nevét, egyébként vedd fel `"VAT"` névvel a beszúrandó termékhez. + +1. A repository osztály konstruktorát egészítsd ki, hogy legyenek kategóriák is elérhetőek. Ehhez vedd fel a kategóriához tartozó osztályt! + +1. Készítsd el a függvény implementációját, a paraméterekkel kapcsolatos kikötéseket ellenőrizd mielőtt a beszúrást végrehajtod! Segítségedre vannak a `TestExercise2.cs` fájlban található tesztek. + +1. A termék méretei 1x1x1 cm-esek legyenek, a többi nem megadott változót vedd fel általad választott értékekkel! + +!!! example "BEADANDÓ" + A módosított C# forráskódot töltsd fel! Emellett készíts egy képernyőképet az első feladathoz hasonlóan, amelyben a vonatkozó teszteket lefuttattad! A képet `f2.png` néven mentsd el és add be a megoldásod részeként! + +## Feladat 3: Raktár méret becslés (2 iMsc pont) Egy cég új telephelyre költözik. A vezetésnek szüksége van arra az információra, hogy át tudják-e költöztetni a már meglévő raktárkészletet az új raktárba. Implementáld a függvényt, amely kiszámolja a **teljes raktárkészletre a csomagok térfogatát**! @@ -93,7 +111,7 @@ A szükséges adatok nincsenek leképezve C# entitásra, ezeket neked kell elké !!! warning "Fluent Api-t használj" Mindenképpen C#-os Fluent Api-t használj! Ne `BsonDocument`-ben írd meg a lekérdezést! -Ha sikerült implementálni a metódust, akkor a korábban már látott módon a `TestExercise2` osztályban található teszt metódussal ellenőrizni tudod a működést. A teszt az adatbázis kiinduló állapotát feltételezi. +Ha sikerült implementálni a metódust, akkor a korábban már látott módon a `TestExercise3` osztályban található teszt metódussal ellenőrizni tudod a működést. A teszt az adatbázis kiinduló állapotát feltételezi. !!! example "BEADANDÓ" A módosított C# forráskódot töltsd fel. From b744f3975e0e99791621b6c30d09e8a5a3729292 Mon Sep 17 00:00:00 2001 From: Attila Hideg Date: Wed, 28 Aug 2024 10:48:31 +0200 Subject: [PATCH 02/15] HF3: English translation --- docs/en/homework/mongodb/index.md | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/docs/en/homework/mongodb/index.md b/docs/en/homework/mongodb/index.md index 690d4996..dd409812 100644 --- a/docs/en/homework/mongodb/index.md +++ b/docs/en/homework/mongodb/index.md @@ -1,6 +1,6 @@ # Exercise: MongoDB -This exercise is optional. You may earn **2 points** by completing this exercise. +You may earn **4 points** by completing this exercise. Use GitHub Classroom to get your git repository. You can find the **invitation link in Moodle**. Clone the repository created via the link. It contains a skeleton and the expected structure of your submission. After completing the exercises and verifying them, commit and push your submission. @@ -65,7 +65,28 @@ There are unit tests available in the solution. You can [run the unit tests in V The image does not need to show the exact same source code that you submit; there can be some minor changes. If the tests run successfully and you create the screenshot, then later you make some **minor** change to the source, there is no need for you to update the screenshot. -## Exercise 2 optional: Estimating storage space (0 points) +## Exercise 2: Insert a New Product (2 points) + +The task is to create a function for inserting a new product. Several conditions must be met during the insertion, which need to be checked before the operation. Implement the `InsertProduct(string name, string category, int vat)` function. + +The following conditions should be considered during insertion: + +- If a product with the given name already exists, throw an exception (`ArgumentException`). +- If the specified category does not yet exist, throw an exception (`ArgumentException`). +- If the given `vat` value is already associated with the name of another `Product` instance, use that name; otherwise, assign the name `"VAT"` to the product being inserted. + +1. Extend the repository class constructor to include categories. To do this, add the corresponding class for the category! + +1. Implement the function, ensuring that the parameter constraints are checked before performing the insertion! The tests in the `TestExercise2.cs` file will assist you. + +1. The product dimensions should be 1x1x1 cm, and for other unspecified variables, you may choose any valid value. + +!!! example "SUBMISSION" + Upload the modified C# source code! + + Additionally, take a screenshot similar to the one in the first task, where you have run the relevant tests! Save the image as `f2.png` and upload it as part of your solution! + +## Exercise 3 optional: Estimating storage space (0 points) The company is moving to a new location. We need to know whether the current stock can be moved and will fit into the new storage facility. Implement the method that calculates the **total volume of all products in stock**! @@ -93,7 +114,7 @@ The required parts of the products are not mapped to C# classes yet. You need to !!! warning "Use Fluent Api" You must use the C# Fluent Api! Do not write the query using `BsonDocument`! -You may test your implementation with the tests provided in class `TestExercise2`. The tests presume that the database is in its initial state. +You may test your implementation with the tests provided in class `TestExercise3`. The tests presume that the database is in its initial state. !!! example "SUBMISSION" Upload the changed C# source code. From 861678e0a3f47d0d32ca505fab178a1923df5389 Mon Sep 17 00:00:00 2001 From: imre-gabor Date: Fri, 30 Aug 2024 16:51:36 +0200 Subject: [PATCH 03/15] smaller updates --- docs/en/seminar/jpa/index.md | 10 +++++----- docs/hu/seminar/jpa/index.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/en/seminar/jpa/index.md b/docs/en/seminar/jpa/index.md index 8bd12633..cde767e6 100644 --- a/docs/en/seminar/jpa/index.md +++ b/docs/en/seminar/jpa/index.md @@ -46,8 +46,8 @@ The exercises are solved together with the instructor. A few exercises we can tr ## Exercise 1: Start the IDE -1. Start Spring Tool Suite from here: `c:\Work\hatteralkalmazasok\sts-4.5.1.RELEASE\SpringToolSuite4.exe`. -1. It will ask for a workspace, select: `c:\Work\hatteralkalmazasok\workspaces\adatvez` +1. Start Spring Tool Suite from here: `c:\Tools\hatteralkalmazasok\eclipse\SpringToolSuite4.exe`. +1. It will ask for a workspace, select: `c:\Tools\hatteralkalmazasok\workspaces\adatvez` 1. If there is a **webshop** project in the Project Explorer already, delete it: right-click the project / _Delete_, and check _Delete project contents on disk_ ## Exercise 2: Import project @@ -102,7 +102,7 @@ The running application can be stopped with the red _Terminate_ icon in the Cons If we close the _Console_ view by mistake, use shortcut _Alt+Shift+Q, C_ or menu _Window / Show View / Console_ to reopen. -After shutdown, we can re-run using F11. +We can re-run the application using F11 as well. The workspace is configured to automatically terminate the running instance first in this case, so pressing the Terminate button manually is not needed. When running the application in debug mode, the modifications in HTML files and some Java ode modifications are immediately actualized, so we only have to refresh the browser to see the effect of the code modification. But the application has to be restarted if we modify the Java code in either of the following ways @@ -177,8 +177,8 @@ Simply put, when modifying code that is not inside of an existing method, a rest import java.util.List; - import javax.persistence.EntityManager; - import javax.persistence.PersistenceContext; + import jakarta.persistence.EntityManager; + import jakarta.persistence.PersistenceContext; public class ProductRepositoryImpl implements ProductRepositoryCustom { diff --git a/docs/hu/seminar/jpa/index.md b/docs/hu/seminar/jpa/index.md index 8d12f10f..9affb0c5 100644 --- a/docs/hu/seminar/jpa/index.md +++ b/docs/hu/seminar/jpa/index.md @@ -46,8 +46,8 @@ A gyakorlat végig vezetett, a gyakorlatvezető utasításai szerint haladjunk. ## Feladat 1: IDE indítása -1. Indítsuk el a Spring Tool Suite-ot innen: `c:\Work\hatteralkalmazasok\sts-4.5.1.RELEASE\SpringToolSuite4.exe`. -1. Indításkor megkérdezi, hova akarunk dolgozni (workspace), itt válasszuk ezt: `c:\Work\hatteralkalmazasok\workspaces\adatvez` +1. Indítsuk el a Spring Tool Suite-ot innen: `C:\Tools\hatteralkalmazasok\eclipse\SpringToolSuite4.exe`. +1. Indításkor megkérdezi, hova akarunk dolgozni (workspace), itt válasszuk ezt: `C:\Tools\hatteralkalmazasok\workspaces\adatvez` 1. Ha az indulás után a Project Explorer-ben ott van egy korábbi gyakorlatról a **webshop** nevű projekt, azt töröljük ki: a projekten jobb klikk / _Delete_, amikor rákérdez, pipáljuk be, hogy a fájlrendszerről is törlődjön. ## Feladat 2: Projekt importálása @@ -109,7 +109,7 @@ A futó alkalmazást a _Console_ nézet piros _Terminate_ ikonjával lehet leál Ha a teljes _Console_ nézetet bezárjuk véletlenül, elő lehet szedni _Alt+Shift+Q, C_ gyorsbillentyűvel, vagy _Window / Show View / Console_ menüvel. -A leállítás utáni újrafuttatáshoz az F11-et is használhatjuk. +Az újrafuttatáshoz az F11-et is használhatjuk. Az előre elkészített workspace-ben az is be van állítva, hogy ilyenkor a már futó alkalmazást leállítsa az új példány futtatása előtt, tehát a kézi leállítás (Terminate) megspórolható. A debug módban való futtatás jellegzetessége, hogy a HTML és bizonyos Java kód módosítások azonnal életbe lépnek. (A böngészőt persze frissíteni kell.) Újra kell viszont indítani az alkalmazást, ha a Java kódban: @@ -184,8 +184,8 @@ Röviden: a metódus törzsön belüli változásokon kívül mindig újraindít import java.util.List; - import javax.persistence.EntityManager; - import javax.persistence.PersistenceContext; + import jakarta.persistence.EntityManager; + import jakarta.persistence.PersistenceContext; public class ProductRepositoryImpl implements ProductRepositoryCustom { From 4a173d0f7a1c70f56fd63dc643e1e34a93bce810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Fri, 6 Sep 2024 08:56:55 +0200 Subject: [PATCH 04/15] =?UTF-8?q?mongo,=20ef,=20mssql=20imsc=20feladat=203?= =?UTF-8?q?=20pontos;=20ef=20hf=20m=C3=A9g=20visszavonva?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/hu/homework/ef/index.md | 4 ++-- docs/hu/homework/mongodb/index.md | 4 ++-- docs/hu/homework/mssql/index.md | 2 +- mkdocs.hu.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/hu/homework/ef/index.md b/docs/hu/homework/ef/index.md index 06734e38..6a6a6512 100644 --- a/docs/hu/homework/ef/index.md +++ b/docs/hu/homework/ef/index.md @@ -1,6 +1,6 @@ # Feladat: Entity Framework -A házi feladat teljesítésével **4 pont és 2 iMsc pont** szerezhető. +A házi feladat teljesítésével **4 pont és 3 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. @@ -88,7 +88,7 @@ Implementáld a `ProductRepository` osztály függvényeit. !!! example "BEADANDÓ" A módosított C# forráskódot töltsd fel. -## Feladat 3: Logikai törlés Entity Framework-kel (2 iMSc pont) +## Feladat 3: Logikai törlés Entity Framework-kel (3 iMSc pont) !!! note "" A pont megszerzésére az első két feladat megoldásával együtt van lehetőség. diff --git a/docs/hu/homework/mongodb/index.md b/docs/hu/homework/mongodb/index.md index f2aacd2e..06c875b4 100644 --- a/docs/hu/homework/mongodb/index.md +++ b/docs/hu/homework/mongodb/index.md @@ -1,6 +1,6 @@ # Feladat: MongoDB -A házi feladat opcionális. A teljesítéssel **4 pont és 2 iMsc pont** szerezhető. +A házi feladat opcionális. A teljesítéssel **4 pont és 3 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. @@ -83,7 +83,7 @@ A következőkre kell figyelni a beszúráskor: !!! example "BEADANDÓ" A módosított C# forráskódot töltsd fel! Emellett készíts egy képernyőképet az első feladathoz hasonlóan, amelyben a vonatkozó teszteket lefuttattad! A képet `f2.png` néven mentsd el és add be a megoldásod részeként! -## Feladat 3: Raktár méret becslés (2 iMsc pont) +## Feladat 3: Raktár méret becslés (3 iMsc pont) Egy cég új telephelyre költözik. A vezetésnek szüksége van arra az információra, hogy át tudják-e költöztetni a már meglévő raktárkészletet az új raktárba. Implementáld a függvényt, amely kiszámolja a **teljes raktárkészletre a csomagok térfogatát**! diff --git a/docs/hu/homework/mssql/index.md b/docs/hu/homework/mssql/index.md index b4c63c04..2b67086f 100644 --- a/docs/hu/homework/mssql/index.md +++ b/docs/hu/homework/mssql/index.md @@ -1,6 +1,6 @@ # Feladat: MSSQL szerveroldali programozás -A házi feladat opcionális. A teljesítéssel **4 pont és 2 iMsc pont** szerezhető. +A házi feladat opcionális. A teljesítéssel **4 pont és 3 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. diff --git a/mkdocs.hu.yml b/mkdocs.hu.yml index 65fa0a8e..34830af9 100644 --- a/mkdocs.hu.yml +++ b/mkdocs.hu.yml @@ -55,7 +55,7 @@ nav: - homework/mssql/index.md - homework/ef/index.md - homework/mongodb/index.md - - homework/rest/index.md + # - homework/rest/index.md - homework/GitHub.md - homework/GitHub-Actions.md - homework/VisualStudio.md From 12b68f1f8ad3e309dd68ee8ca93a9434958cf1b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Fri, 6 Sep 2024 08:57:34 +0200 Subject: [PATCH 05/15] en toc fix --- mkdocs.en.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mkdocs.en.yml b/mkdocs.en.yml index 5a6b58b5..c3f75509 100644 --- a/mkdocs.en.yml +++ b/mkdocs.en.yml @@ -51,10 +51,9 @@ nav: - "Homework": - homework/index.md - homework/mssql/index.md - - homework/adonet/index.md - homework/ef/index.md - homework/mongodb/index.md - - homework/rest/index.md + # - homework/rest/index.md - homework/GitHub.md - homework/GitHub-Actions.md - homework/VisualStudio.md From 300c9212bce1c9e78febfbf344241119dc89635a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Mon, 16 Sep 2024 13:15:02 +0200 Subject: [PATCH 06/15] =?UTF-8?q?h=C3=A1zi=20opcion=C3=A1lis=20fixek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/homework/adonet/index.md | 2 +- docs/hu/gyakorlatvezetoknek/index.md | 2 +- docs/hu/homework/adonet/index.md | 3 +++ docs/hu/homework/index.md | 10 +++++----- docs/hu/homework/mongodb/index.md | 2 +- docs/hu/homework/mssql/index.md | 2 +- docs/hu/homework/rest/index.md | 5 ++++- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/en/homework/adonet/index.md b/docs/en/homework/adonet/index.md index 8e996da7..c09e6c6f 100644 --- a/docs/en/homework/adonet/index.md +++ b/docs/en/homework/adonet/index.md @@ -1,6 +1,6 @@ # Exercise: ADO.NET data access -This exercise is optional. You may earn **2 points** by completing this exercise. +You may earn **2 points** by completing this exercise. Use GitHub Classroom to get your git repository. You can find the **invitation link in Moodle**. Clone the repository created via the link. It contains a skeleton and the expected structure of your submission. After completing the exercises and verifying them, commit and push your submission. diff --git a/docs/hu/gyakorlatvezetoknek/index.md b/docs/hu/gyakorlatvezetoknek/index.md index 569999f2..63851c44 100644 --- a/docs/hu/gyakorlatvezetoknek/index.md +++ b/docs/hu/gyakorlatvezetoknek/index.md @@ -18,7 +18,7 @@ A gyakorlat kiadott segédlet alapján kerül megtartásra. A gyakorlatvezető f **Számonkérések lebonyolításában segítség.** A tárgyban ZH, PZH, és 4 vizsga van. Mindegyik számonkérés írásban történik. A gyakorlatvezető feladata a számonkérések felügyelése majd a javításban történő részvétel. A felügyelés ideje alkalmanként körülbelül 1 óra, a javítás ideje létszám függően 0.5-2 óra alkalmanként. Gyakorlatvezetőként körülbelül a számonkérések felében kell részt venni. -**Házi feladatok értékelése.** A félév során 5 opcionális kis házi feladatot hirdetünk meg. Ezeket a hallgatók otthon, önállóan oldják meg és adják be GitHub pull request-ek formájában. A házi feladatok kiértékelése részben automatikusan történik: egy szoftver lefuttatja és ellenőrzi a beadott munkát. A gyakorlatvezető feladata a beadott házi feladat formai ellenőrzése: kért képernyőképek megfelelnek-e az előírásoknak és konzisztensek-e a beadott forráskóddal. A házi feladat nem kötelező, nem minden hallgató szokta elkészíteni, így házi feladatonként körülbelül 1 óra idő ráfordítást jelent. +**Házi feladatok értékelése.** A félév során 5 kis házi feladatot hirdetünk meg. Ezeket a hallgatók otthon, önállóan oldják meg és adják be GitHub pull request-ek formájában. A házi feladatok kiértékelése részben automatikusan történik: egy szoftver lefuttatja és ellenőrzi a beadott munkát. A gyakorlatvezető feladata a beadott házi feladat formai ellenőrzése: kért képernyőképek megfelelnek-e az előírásoknak és konzisztensek-e a beadott forráskóddal. A házi feladat nem kötelező, nem minden hallgató szokta elkészíteni, így házi feladatonként körülbelül 1 óra idő ráfordítást jelent. ## Demonstrátorság diff --git a/docs/hu/homework/adonet/index.md b/docs/hu/homework/adonet/index.md index 58829e2d..eec05c0d 100644 --- a/docs/hu/homework/adonet/index.md +++ b/docs/hu/homework/adonet/index.md @@ -1,5 +1,8 @@ # Feladat: ADO.NET adatelérés +!!! important "2024-től kifutott" + FIGYELEM: Ez a feladat 2024-től már nem aktív. + A házi feladat opcionális. A teljesítéssel **2 pluszpont és 2 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. diff --git a/docs/hu/homework/index.md b/docs/hu/homework/index.md index 359ce79a..17fdf22c 100644 --- a/docs/hu/homework/index.md +++ b/docs/hu/homework/index.md @@ -1,6 +1,6 @@ -# Szorgalmi házi feladatok +# Kis házi feladatok -A házi feladatok **opcionálisak, pluszpont és iMsc pont** szerezhető velük. A feladatok leírása található itt; a megoldások beadása GitHub Classroom segítségével történik. +A házi feladatok **kötelezőek (lásd követelméynek), vizsgapont és iMsc pont** szerezhető velük. A feladatok leírása található itt; a megoldások beadása GitHub Classroom segítségével történik. !!! important "Működő kód" A feladatok során működő kódot, kódrészleteteket kell készíteni. A feladat lényege a valóságban működő és a kívánt funkciót ellátó kód készítése. @@ -44,10 +44,10 @@ A feladatok kérik, hogy készíts képernyőképet a megoldás egy-egy részér - REST API feladatokhoz: [Postman](https://www.getpostman.com/) - Az első házi kivételével a C# programozós feladatokhoz: - Microsoft Visual Studio 2022 [az itt található beállításokkal](VisualStudio.md). Linux és MacOS esetén Visual Studio Code és a .NET SDK-val települő [dotnet CLI](https://docs.microsoft.com/en-us/dotnet/tools/) használható. - - [.NET **6.0** SDK](https://dotnet.microsoft.com/download/dotnet/6.0) + - [.NET **8.0** SDK](https://dotnet.microsoft.com/download/dotnet/8.0) - !!! warning ".NET 6.0" - A feladat megoldásához **6.0** .NET SDK telepítése szükséges. + !!! warning ".NET 8.0" + A feladat megoldásához **8.0** .NET SDK telepítése szükséges. Windows-on Visual Studio verzió függvényében lehet, hogy telepítve van (lásd [itt](VisualStudio.md#net-sdk-ellenorzese-es-telepitese) az ellenőrzés módját); ha nem, akkor a fenti linkről kell telepíteni (az SDK-t és _nem_ a runtime-ot.) Linux és MacOS esetén telepíteni szükséges. diff --git a/docs/hu/homework/mongodb/index.md b/docs/hu/homework/mongodb/index.md index 06c875b4..002239f7 100644 --- a/docs/hu/homework/mongodb/index.md +++ b/docs/hu/homework/mongodb/index.md @@ -1,6 +1,6 @@ # Feladat: MongoDB -A házi feladat opcionális. A teljesítéssel **4 pont és 3 iMsc pont** szerezhető. +MongoDB házi feladat, a teljesítéssel **4 pont és 3 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. diff --git a/docs/hu/homework/mssql/index.md b/docs/hu/homework/mssql/index.md index 2b67086f..aa481e67 100644 --- a/docs/hu/homework/mssql/index.md +++ b/docs/hu/homework/mssql/index.md @@ -1,6 +1,6 @@ # Feladat: MSSQL szerveroldali programozás -A házi feladat opcionális. A teljesítéssel **4 pont és 3 iMsc pont** szerezhető. +MSSQL házi feladat, a teljesítéssel **4 pont és 3 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. diff --git a/docs/hu/homework/rest/index.md b/docs/hu/homework/rest/index.md index 0281f4be..6df01ad4 100644 --- a/docs/hu/homework/rest/index.md +++ b/docs/hu/homework/rest/index.md @@ -1,6 +1,9 @@ # Feladat: REST API Web API technológiával -A házi feladat opcionális. A teljesítéssel **2 pluszpont és 2 iMsc pont** szerezhető. +!!! important "FIGYELEM" + 2024-re még nem végleges! + +A ASP.NET Core REST API házi feladat, a teljesítéssel **2 pont és 3 iMsc pont** szerezhető. GitHub Classroom segítségével hozz létre magadnak egy repository-t. A **meghívó URL-t Moodle-ben találod**. Klónozd le az így elkészült repository-t. Ez tartalmazni fogja a megoldás elvárt szerkezetét. A feladatok elkészítése után kommitold és pushold a megoldásod. From 0cbeda10f6ae0fee01493b3a3f5d5d955df0de60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Mon, 16 Sep 2024 13:16:08 +0200 Subject: [PATCH 07/15] hf list fix --- docs/hu/homework/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/hu/homework/index.md b/docs/hu/homework/index.md index 17fdf22c..61ba73e3 100644 --- a/docs/hu/homework/index.md +++ b/docs/hu/homework/index.md @@ -10,7 +10,8 @@ A házi feladatok **kötelezőek (lásd követelméynek), vizsgapont és iMsc po 1. [MSSQL szerveroldali programozás](mssql/index.md) 1. [Entity Framework](ef/index.md) 1. [MongoDB](mongodb/index.md) -1. [REST API Web API technológiával](rest/index.md) +1. REST API Web API technológiával +1. GraphQL ## A feladatok beadása From 5d5e47fc92445051b0694cb3971179c7ea5b853c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Mon, 16 Sep 2024 13:19:57 +0200 Subject: [PATCH 08/15] en fixes --- docs/en/homework/adonet/index.md | 3 +++ docs/en/homework/ef/index.md | 2 +- docs/en/homework/index.md | 5 +++-- docs/en/homework/rest/index.md | 5 ++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/en/homework/adonet/index.md b/docs/en/homework/adonet/index.md index c09e6c6f..3450abb9 100644 --- a/docs/en/homework/adonet/index.md +++ b/docs/en/homework/adonet/index.md @@ -1,5 +1,8 @@ # Exercise: ADO.NET data access +!!! important "IMPORTANT" + Revoked from 2024! + You may earn **2 points** by completing this exercise. Use GitHub Classroom to get your git repository. You can find the **invitation link in Moodle**. Clone the repository created via the link. It contains a skeleton and the expected structure of your submission. After completing the exercises and verifying them, commit and push your submission. diff --git a/docs/en/homework/ef/index.md b/docs/en/homework/ef/index.md index f7f3700a..3a9eb3ae 100644 --- a/docs/en/homework/ef/index.md +++ b/docs/en/homework/ef/index.md @@ -1,6 +1,6 @@ # Exercise: Entity Framework -You may earn **2 points** by completing this exercise. +You may earn **4 points** by completing this exercise. Use GitHub Classroom to get your git repository. You can find the **invitation link in Moodle**. Clone the repository created via the link. It contains a skeleton and the expected structure of your submission. After completing the exercises and verifying them, commit and push your submission. diff --git a/docs/en/homework/index.md b/docs/en/homework/index.md index 5e347c39..a8d98431 100644 --- a/docs/en/homework/index.md +++ b/docs/en/homework/index.md @@ -1,6 +1,6 @@ # Homework -With these exercises you can earn **points** that are added to your exam score. Maximum 4 points per homework. In the exercises and the evaluation results, you will see a text “iMsc”; these iMsc points are not counted! (These are special points for Hungarian curriculum). All non-iMsc exercises are available for points on this course, 5 homeworks, maximum 4 points per homework, maximum 20 points. Here you find the exercise descriptions; the submission of the solutions is expected via GitHub Classroom. If you fail to submit the exercies exactly as in the guide, or it is late, you get no points at all! Make sure to follow the guide and do **everything in time**! +With these exercises you can earn **points** that are added to your exam score. Maximum 4 points per homework. In the exercises and the evaluation results, you will see a text “iMsc” for optional excerciser; these iMsc points are not counted! (These are special points for Hungarian curriculum). All non-iMsc exercises are available for points on this course, 5 homeworks, maximum 4 points per homework, maximum 20 points. Here you find the exercise descriptions; the submission of the solutions is expected via GitHub Classroom. If you fail to submit the exercies exactly as in the guide, or it is late, you get no points at all! Make sure to follow the guide and do **everything in time**! !!! important "Working code" You are expected to write code that actually works! Your code will be executed, and it is required to fulfill the specified task. @@ -10,7 +10,8 @@ With these exercises you can earn **points** that are added to your exam score. 1. [MSSQL server-side programming](mssql/index.md) 1. [Entity Framework](ef/index.md) 1. [MongoDB](mongodb/index.md) -1. [REST API and Web API](rest/index.md) +1. REST API and Web API +1. GraphQL ## Submission diff --git a/docs/en/homework/rest/index.md b/docs/en/homework/rest/index.md index bff6c994..c1691992 100644 --- a/docs/en/homework/rest/index.md +++ b/docs/en/homework/rest/index.md @@ -1,6 +1,9 @@ # Exercise: REST API and Web API -This exercise is optional. You may earn **2 points** by completing this exercise. +!!! important "IMPORTANT" + Not finalized for 2024! + +This exercise is optional. You may earn **4 points** by completing this exercise. Use GitHub Classroom to get your git repository. You can find the **invitation link in Moodle**. Clone the repository created via the link. It contains a skeleton and the expected structure of your submission. After completing the exercises and verifying them, commit and push your submission. From dbfa4c7c46a61da77f94caa7811bdc1a8696e4cc Mon Sep 17 00:00:00 2001 From: Kurcsi Norbert <90260479+norbertkurcsi@users.noreply.github.com> Date: Sat, 5 Oct 2024 19:06:21 +0200 Subject: [PATCH 09/15] Update index.md --- docs/hu/homework/mssql/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hu/homework/mssql/index.md b/docs/hu/homework/mssql/index.md index aa481e67..df99c357 100644 --- a/docs/hu/homework/mssql/index.md +++ b/docs/hu/homework/mssql/index.md @@ -45,7 +45,7 @@ Szeretnénk lehetőséget biztosítani rendelések lemondására is egy tárolt Ellenőrizd az eljárás működését! !!! example "BEADANDÓ" - A trigger kódját az `f2.sql` fájlban add be. Az sql fájl egyetlen utasítást tartalmazzon csak (egyetlen `create procedure cancel_invoice`), ne legyen benne se `use` se `go` parancs! + A tárolt eljárás kódját az `f2.sql` fájlban add be. Az sql fájl egyetlen utasítást tartalmazzon csak (egyetlen `create procedure cancel_invoice`), ne legyen benne se `use` se `go` parancs! Készíts egy képernyőképet amin látható a tárolt eljárás lefutása és annak hatása, illetve mi történik, ha hibás adatokat adunk meg (lehet egy ablakban két tabbal például). A képen legyen látható az adatbázisod neve (a Neptun kódod). A képet `f2.png` néven mentsd el és add be a megoldásod részeként! From e698e533f62c51f0a2163a93c0182bb3a22e2f1a Mon Sep 17 00:00:00 2001 From: Klevis Imeri Date: Sun, 6 Oct 2024 19:37:54 +0200 Subject: [PATCH 10/15] mssql lecture and homework small changes --- docs/en/homework/mssql/index.md | 4 ++-- docs/en/lecture-notes/mssql/sql.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/homework/mssql/index.md b/docs/en/homework/mssql/index.md index 2baf2543..5b7423c4 100644 --- a/docs/en/homework/mssql/index.md +++ b/docs/en/homework/mssql/index.md @@ -78,6 +78,6 @@ We want to extract the `recommended_age` and move it to a new column in the tabl 1. Create a T-SQL script that extracts the content of the `` tag from the xml and moves the value into the `RecommendedAge` column of the table. If the xml description is empty or there is no `` tag, the column's value should be `NULL`. Otherwise, take the tag's text content (without the tag name), copy the value into the column, and remove the tag from the xml. You can presume that there is at most one `` element in the xml. !!! example "SUBMISSION" - Submit the T-SQL code in file `f2.sql`. Do not use a stored procedure in this exercise; create a simple T-SQL code block. This sql file should be executable by itself and should not contain any `use` or `go` commands. + Submit the T-SQL code in file `f3.sql`. Do not use a stored procedure in this exercise; create a simple T-SQL code block. This sql file should be executable by itself and should not contain any `use` or `go` commands. - Create a screenshot that displays the content of the `Product` table after running the script. The new column and the populated values should be visible on the screenshot. Make sure that the database name and your Neptun code are visible on the screenshot. Save the screenshot as `f2.png` and upload it as part of your submission! + Create a screenshot that displays the content of the `Product` table after running the script. The new column and the populated values should be visible on the screenshot. Make sure that the database name and your Neptun code are visible on the screenshot. Save the screenshot as `f3.png` and upload it as part of your submission! diff --git a/docs/en/lecture-notes/mssql/sql.md b/docs/en/lecture-notes/mssql/sql.md index 97cd18a3..4fb6a313 100644 --- a/docs/en/lecture-notes/mssql/sql.md +++ b/docs/en/lecture-notes/mssql/sql.md @@ -120,7 +120,7 @@ where Price=(select max(Price) from Product) What was the min, max and average selling price of each product with name containing _Lego_ having an average selling price more than 10000 ```sql -select p.Id, p.Name, min(oi.Price), max(oi.Price), avg(oi.Price) +select p.Id, p.Name, min(oi.Price), max(oi.Price), sum(oi.Price*oi.Amount)/sum(oi.Amount) from Product p inner join OrderItem oi on p.ID=oi.ProductID Where p.Name like '%Lego%' From 058aba9ac035015996e29c17c82a21ee3f9a8347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Mon, 7 Oct 2024 19:30:01 +0200 Subject: [PATCH 11/15] imsc 3 pont --- docs/hu/homework/mssql/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hu/homework/mssql/index.md b/docs/hu/homework/mssql/index.md index df99c357..00446317 100644 --- a/docs/hu/homework/mssql/index.md +++ b/docs/hu/homework/mssql/index.md @@ -49,7 +49,7 @@ Ellenőrizd az eljárás működését! Készíts egy képernyőképet amin látható a tárolt eljárás lefutása és annak hatása, illetve mi történik, ha hibás adatokat adunk meg (lehet egy ablakban két tabbal például). A képen legyen látható az adatbázisod neve (a Neptun kódod). A képet `f2.png` néven mentsd el és add be a megoldásod részeként! -## Feladat 3: Termék ajánlott korhatára (2 iMsc pont) +## Feladat 3: Termék ajánlott korhatára (3 iMsc pont) !!! note "" Az iMsc pont megszerzésére az első két feladat megoldásával együtt van lehetőség. From f8fce46138333e1577f442ff2db147eccbfc6529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Thu, 17 Oct 2024 09:12:21 +0200 Subject: [PATCH 12/15] imsc 3 pont, +tip --- docs/hu/homework/rest/index.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/hu/homework/rest/index.md b/docs/hu/homework/rest/index.md index 76f8749f..573fcfba 100644 --- a/docs/hu/homework/rest/index.md +++ b/docs/hu/homework/rest/index.md @@ -79,7 +79,7 @@ A termékekkel kapcsolatos leggyakoribb adatbázisműveletek az új beszúrása, -## Feladat 3: Termék részleges frissítése (2 iMsc pont) +## Feladat 3: Termék részleges frissítése (3 iMsc pont) !!! note "" Az iMsc pont megszerzésére az első két feladat megoldásával együtt van lehetőség. @@ -94,7 +94,10 @@ Ebben a feladatban létre kell hoznod egy végpontot, ami biztosítja a terméke A végpont által kapott paraméter típusa `JsonPatchDocument` erősen típusos változata legyen. Tesztelés során figyelj rá, hogy csak a küldött értékek változzanak meg (például, ha nincs felküldött objektumban raktárkészlet, az ne változzon). +!!! tip "JsonPatchDocument" + A `JsonPatchDocument` az ASP.NET Core által nyújtott osztály és tartozik hozzá beépített mechanizmus is. + !!! example "BEADANDÓ" A módosított forráskódot töltsd fel. - Emellett készíts egy képernyőképet Postman-ből (vagy más teszteléshez használt eszközből), amely egy sikeres részleges módosítás eredményét mutatja. A képen legyen látható a kérés és a válasz minden részlete (kérés típusa, URL, válasz kódja, válasz tartalma). A válaszban a névben szerepelnie kell a **Neptun kódodnak**. A képet `f3.png` néven mentsd el és add be a megoldásod részeként! \ No newline at end of file + Emellett készíts egy képernyőképet Postman-ből (vagy más teszteléshez használt eszközből), amely egy sikeres részleges módosítás eredményét mutatja. A képen legyen látható a kérés és a válasz minden részlete (kérés típusa, URL, válasz kódja, válasz tartalma). A válaszban a névben szerepelnie kell a **Neptun kódodnak**. A képet `f3.png` néven mentsd el és add be a megoldásod részeként! From 6faf25cd51e33025e5c33c2820dd133450bd0317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Thu, 17 Oct 2024 09:18:09 +0200 Subject: [PATCH 13/15] rest hf --- mkdocs.hu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.hu.yml b/mkdocs.hu.yml index 34830af9..65fa0a8e 100644 --- a/mkdocs.hu.yml +++ b/mkdocs.hu.yml @@ -55,7 +55,7 @@ nav: - homework/mssql/index.md - homework/ef/index.md - homework/mongodb/index.md - # - homework/rest/index.md + - homework/rest/index.md - homework/GitHub.md - homework/GitHub-Actions.md - homework/VisualStudio.md From 5cd52c1c69c1c0246786988445df0320b4b795ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tibor=20T=C3=B3th?= Date: Thu, 17 Oct 2024 09:19:15 +0200 Subject: [PATCH 14/15] rest hf --- docs/hu/homework/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hu/homework/index.md b/docs/hu/homework/index.md index 61ba73e3..00c957b9 100644 --- a/docs/hu/homework/index.md +++ b/docs/hu/homework/index.md @@ -10,7 +10,7 @@ A házi feladatok **kötelezőek (lásd követelméynek), vizsgapont és iMsc po 1. [MSSQL szerveroldali programozás](mssql/index.md) 1. [Entity Framework](ef/index.md) 1. [MongoDB](mongodb/index.md) -1. REST API Web API technológiával +1. [REST API Web API technológiával](rest/index.md) 1. GraphQL ## A feladatok beadása From f7a93952706e939c1c6a7086814d826263c833e2 Mon Sep 17 00:00:00 2001 From: Kurcsi Norbert Date: Sat, 19 Oct 2024 23:41:49 +0200 Subject: [PATCH 15/15] change .net v6 to v8 --- docs/hu/seminar/ef/index.md | 6 +++--- .../ef/images/vs-migration-history_new.png | Bin 0 -> 26890 bytes 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 overrides/seminar/ef/images/vs-migration-history_new.png diff --git a/docs/hu/seminar/ef/index.md b/docs/hu/seminar/ef/index.md index 6ddef722..eba324ed 100644 --- a/docs/hu/seminar/ef/index.md +++ b/docs/hu/seminar/ef/index.md @@ -24,7 +24,7 @@ Amit érdemes átnézned: - Entity Framework Core és LINQ !!! note "Windows mentes fejlesztés" - A labor alapvetően elvégezhető open-source eszközökkel is (VSCode, .NET 6 SDK, MSSQL Linux alapú verziója akár dockerből), de a labor nem ezeket az eszközöket használja. + A labor alapvetően elvégezhető open-source eszközökkel is (VSCode, .NET 8 SDK, MSSQL Linux alapú verziója akár dockerből), de a labor nem ezeket az eszközöket használja. ## Gyakorlat menete @@ -39,7 +39,7 @@ Az adatbázis az adott géphez kötött, ezért nem biztos, hogy a korábban lé ## Feladat 1: Projekt létrehozása, adatbázis leképzése -Hozz létre Visual Studio segítségével egy C# konzolalkalmazást .NET 6 keretrendszer felett (tehát ne a régi .NET Framework alapút). +Hozz létre Visual Studio segítségével egy C# konzolalkalmazást .NET 8 keretrendszer felett (tehát ne a régi .NET Framework alapút). ![VS projekt típus](images/vs-create-project.png) @@ -130,7 +130,7 @@ Hozd létre a projektet, a neve legyen a neptun kódod és a `c:\work` mappába ![VS Solution Explorer, migration file](images/migration_codefile.png) - ![VS Migration History](images/vs-migration-history.png) + ![VS Migration History](images/vs-migration-history_new.png) - Módosítsunk az adatbázis sémán a code-first modellünkben. diff --git a/overrides/seminar/ef/images/vs-migration-history_new.png b/overrides/seminar/ef/images/vs-migration-history_new.png new file mode 100644 index 0000000000000000000000000000000000000000..937e28b59e6fd48f47156e7ec0e453c1168b2a7a GIT binary patch literal 26890 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

=BH(5e#e( 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