diff --git a/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT.md b/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT.md index b4a9297..48c2975 100644 --- a/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT.md +++ b/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT.md @@ -37,26 +37,26 @@ src/ ### Rétegek Részletes Leírása -#### 1. **Domain Layer** (Domain réteg) +#### 1. **Domain Réteg** (Domain Layer) - **Felelősség**: Az alkalmazás magját képező interfészek és domain modellek - **Tartalma**: Repository interfészek (IUserRepository) - **Függőség**: Nincs más rétegre való függősége -#### 2. **Infrastructure Layer** (Infrastruktúra réteg) +#### 2. **Infrastructure Réteg** (Infrastructure Layer) - **Felelősség**: Technikai implementációk (adatbázis, fájlkezelés, külső API-k) - **Tartalma**: Repository implementációk, adattárolás -- **Függőség**: Domain layer-től függ (implementálja az interfészeket) +- **Függőség**: Domain rétegtől függ (implementálja az interfészeket) -#### 3. **Application Layer** (Alkalmazás réteg) +#### 3. **Application Réteg** (Application Layer) - **Felelősség**: Üzleti logika, use case-ek implementálása - **Tartalma**: Commands, CommandHandlers, Queries, QueryHandlers -- **Függőség**: Domain layer-től függ +- **Függőség**: Domain rétegtől függ - **CQRS Pattern**: Írás (Command) és olvasás (Query) műveletek szétválasztása -#### 4. **API Layer** (API réteg) +#### 4. **API Réteg** (API Layer) - **Felelősség**: HTTP kérések kezelése, routing, válaszok küldése - **Tartalma**: Controllers, Routers, Server konfiguráció -- **Függőség**: Application és Infrastructure layer-től függ +- **Függőség**: Application és Infrastructure rétegtől függ --- @@ -155,7 +155,7 @@ A `package.json` az **npm projekt szíve** - tartalmazza a metaadatokat, függő - `express`: ^5.2.1 - Web framework - `^` (caret): Automatikus minor/patch update-ek engedélyezése - 5.x.x verzió tartományon belül -- `nodemon`: ^3.1.11 - Fejlesztői szerverAutomatikus újraindítás +- `nodemon`: ^3.1.11 - Fejlesztői szerver automatikus újraindítása - Érdemes `devDependencies`-be tenni (csak fejlesztéshez kell) **Létrehozási módok:** @@ -215,7 +215,7 @@ npm install --- -### 2. Domain Layer Implementálás +### 2. Domain Réteg Implementálás #### 2.1 IUserRepository.js - Repository Interface @@ -225,7 +225,7 @@ npm install **Részletes leírás:** -A Domain Layer középpontjában az interfészek állnak. JavaScript-ben nincs natív interfész támogatás (mint pl. TypeScript-ben vagy Java-ban), de osztályokkal szimulálhatjuk ezt a viselkedést. +A Domain réteg középpontjában az interfészek állnak. JavaScript-ben nincs natív interfész támogatás (mint pl. TypeScript-ben vagy Java-ban), de osztályokkal szimulálhatjuk ezt a viselkedést. **Mit kell létrehozni:** @@ -277,7 +277,7 @@ export class IUserRepository { --- -### 3. Infrastructure Layer Implementálás +### 3. Infrastructure Réteg Implementálás #### 3.1 user.json - Adat fájl @@ -448,7 +448,7 @@ export class UserRepository extends IUserRepository { --- -### 4. Application Layer - Query Implementálás +### 4. Application Réteg - Query Implementálás #### 4.1 GetAllUsersQuery @@ -597,7 +597,7 @@ export class GetUserByIdQuery { **Error Handling:** - A dobott hiba később a Controller-ben lesz elkapva - A Controller alakítja át HTTP 404 válasszá -- Ez szépen szétválasztja a rétegeket: Application Layer nem tud HTTP-ről, csak üzleti hibákat dob +- Ez szépen szétválasztja a rétegeket: Application réteg nem tud HTTP-ről, csak üzleti hibákat dob
📄 Teljes kód megtekintése @@ -622,7 +622,7 @@ export class GetUserByIdQueryHandler { --- -### 5. Application Layer - Command Implementálás +### 5. Application Réteg - Command Implementálás #### 5.1 CreateUserCommand @@ -688,7 +688,7 @@ if (!command.name || !command.email) { } ``` - Name és email **kötelező mezők** -- Ez üzleti logika - az Application Layer felelőssége +- Ez üzleti logika - az Application réteg felelőssége - Ha valamelyik hiányzik, kivételt dobunk - Later: Bővíthető email formátum ellenőrzéssel, egyediség ellenőrzéssel, stb. @@ -928,7 +928,7 @@ if (!deleted) { **3. Visszatérési érték:** - **Nincs explicit return!** -- DELETE művelet nem ad vissza adatot (ún. "void" műv elet) +- DELETE művelet nem ad vissza adatot (ún. "void" művelet) - A Controller HTTP 204 No Content választ küld **Fontos különbség:** @@ -962,17 +962,17 @@ export class DeleteUserCommandHandler { --- -### 6. API Layer Implementálás +### 6. API Réteg Implementálás #### 6.1 userController.js - Controller **Fájl**: `src/API/controllers/userController.js` -**Cél**: HTTP kérések kezelése és koordináció az Application layer-rel. +**Cél**: HTTP kérések kezelése és koordináció az Application réteggel. **Részletes leírás:** -A Controller a **Presentation Layer** része - ő az, aki tudja, mi az a HTTP, mi az a request és response. Az Application Layer-t (Handler-ek) használja az üzleti logika végrehajtására. +A Controller a **Presentation réteg** része - ő az, aki tudja, mi az a HTTP, mi az a request és response. Az Application réteget (Handler-ek) használja az üzleti logika végrehajtására. **Fájl szerkezete:** @@ -1264,8 +1264,6 @@ app.listen(PORT, () => { }); ``` -
trong> - ```javascript import express from 'express'; import { UserController } from '../controllers/userController.js'; @@ -1307,11 +1305,7 @@ app.listen(PORT, () => { }); ``` -**Magyarázat:** - -- **express.json()**: JSON body parser middleware (kötelező a POST/PUT kérésekhez) -- **Base path**: `/users` prefix minden user route-hoz -- **Port**: 3000 (módosítható szükség szerint) + --- @@ -1530,13 +1524,13 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); - [ ] Projekt struktúra létrehozva - [ ] package.json konfigurálva (`"type": "module"`) - [ ] Függőségek telepítve -- [ ] Domain layer: IUserRepository létrehozva -- [ ] Infrastructure layer: UserRepository és user.json létrehozva -- [ ] Application layer: Összes Query és Command létrehozva -- [ ] Application layer: Összes Handler létrehozva -- [ ] API layer: UserController létrehozva -- [ ] API layer: userRouter létrehozva -- [ ] API layer: server.js létrehozva és konfigurálva +- [ ] Domain réteg: IUserRepository létrehozva +- [ ] Infrastructure réteg: UserRepository és user.json létrehozva +- [ ] Application réteg: Összes Query és Command létrehozva +- [ ] Application réteg: Összes Handler létrehozva +- [ ] API réteg: UserController létrehozva +- [ ] API réteg: userRouter létrehozva +- [ ] API réteg: server.js létrehozva és konfigurálva - [ ] Szerver elindul hiba nélkül - [ ] GET /users működik - [ ] POST /users működik és ment a JSON fájlba @@ -1565,6 +1559,6 @@ Ez a User Management rendszer egy jól strukturált, modern Node.js alkalmazás, **Nehézségi szint**: Közép-haladó --- - + **Dátum**: 2026. február 13. **Verzió**: 1.0 diff --git a/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT_EGYENI.md b/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT_EGYENI.md new file mode 100644 index 0000000..ca89965 --- /dev/null +++ b/Backend/elso gyakorlat/FELADAT_LEIRAS_USER_MANAGEMENT_EGYENI.md @@ -0,0 +1,222 @@ +# Egyéni Feladat – User Management Rendszer + +> **Ez a leírás teljesen kezdőknek is szól! Ha még soha nem fejlesztettél, akkor is végig tudsz menni rajta. Minden lépésnél részletes magyarázatot, példákat és forrásokat találsz.** + +--- + +## 0. Alapok, amiket tudni érdemes + +### Mi az a User Management rendszer? +Egy olyan program, amiben felhasználókat tudsz létrehozni, listázni, módosítani, törölni. Ilyen van minden weboldalon, ahol regisztrálni lehet. + +### Mik azok a REST API-k? +Olyan szabályok szerint működő webes szolgáltatások, amikhez más programok (vagy akár te is) tudsz kéréseket küldeni (pl. "add vissza az összes felhasználót"). + +### Mik azok a rétegek (layer-ek)? +A programot több részre bontjuk, hogy átláthatóbb legyen. Pl. külön rész kezeli az adatokat, külön rész a webes kéréseket. + +### Mik azok a parancsok (Command) és lekérdezések (Query)? +- **Command:** Valamit módosít (pl. új user létrehozása) +- **Query:** Csak lekérdez (pl. összes user listázása) + +--- + +## 1. Szükséges eszközök, telepítés + +1. **Node.js letöltése:** + - Menj a https://nodejs.org/ oldalra, töltsd le a LTS verziót, telepítsd. +2. **Kód szerkesztő:** + - Ajánlott: [Visual Studio Code](https://code.visualstudio.com/) +3. **Postman vagy Thunder Client:** + - Ezekkel tudod tesztelni az API-t. [Postman letöltése](https://www.postman.com/downloads/) + +--- + +## 2. Projekt létrehozása, első lépések + +1. Hozz létre egy új mappát pl. `user-management` néven. +2. Nyisd meg a mappát VS Code-ban. +3. Nyiss egy terminált (Terminal > New Terminal). +4. Írd be: `npm init -y` (létrehozza a package.json-t) +5. Telepítsd az Express-t: `npm install express` +6. (Ha JSON fájlt használsz adattárolásra, nem kell adatbázis.) + +--- + +## 3. Mappastruktúra kialakítása + +Javasolt szerkezet: + +``` +user-management/ + src/ + API/ + Application/ + Domain/ + Infrastructure/ + package.json +``` + +Minden mappába majd külön fájlokat teszünk (lásd lentebb). + +--- + +## 4. Kódolás lépésről lépésre (példákkal) + +### 4.1. API réteg (Express szerver) +- Hozz létre egy `src/API/server.js` fájlt. +- Írd bele az alábbi mintát: + +
+Express szerver példa + +```js +import express from 'express'; +const app = express(); +app.use(express.json()); + +app.get('/', (req, res) => { + res.send('Hello, User Management!'); +}); + +app.listen(3000, () => { + console.log('Szerver fut a http://localhost:3000 címen'); +}); +``` +
+ +- Futtasd: `node src/API/server.js` (ha hibát ír, nézd meg, hogy mindenhol helyes-e az elérési út és a kód) + +### 4.2. Domain réteg (interfész, entitás) +- Hozz létre egy `src/Domain/IUserRepository.js` fájlt. +- Írd bele, hogy milyen műveleteket vársz el (pl. createUser, getUserById, stb.) + +
+IUserRepository.js példa + +```js +export default class IUserRepository { + createUser(user) {} + getUserById(id) {} + getAllUsers() {} + updateUser(id, user) {} + deleteUser(id) {} +} +``` +
+ +### 4.3. Infrastructure réteg (adattárolás) +- Hozz létre egy `src/Infrastructure/userRepository.js` fájlt. +- Ebben valósítsd meg az IUserRepository metódusait, pl. JSON fájlba írással/olvasással. + +
+userRepository.js példa (részlet) + +```js +import fs from 'fs/promises'; +import path from 'path'; +import IUserRepository from '../Domain/IUserRepository.js'; + +const DATA_PATH = path.resolve('src/Infrastructure/user.json'); + +export default class UserRepository extends IUserRepository { + async createUser(user) { + // ... + } + // ... többi metódus ... +} +``` +
+ +- Hozz létre egy `user.json` fájlt is, pl. így: + +
+user.json példa + +```json +[] +``` +
+ +### 4.4. Application réteg (Command/Query handlerek) +- Hozz létre minden CRUD művelethez külön Command/Query és Handler fájlt. +- Pl. `createUserCommand.js`, `createUserCommandHandler.js`, stb. + +
+createUserCommand.js példa + +```js +export default class CreateUserCommand { + constructor(user) { + this.user = user; + } +} +``` +
+ +
+createUserCommandHandler.js példa + +```js +import UserRepository from '../../Infrastructure/userRepository.js'; +export default class CreateUserCommandHandler { + constructor() { + this.userRepository = new UserRepository(); + } + async handle(command) { + return await this.userRepository.createUser(command.user); + } +} +``` +
+ +### 4.5. API végpontok (Controller, Router) +- Hozz létre egy `userController.js`-t és egy `userRouter.js`-t az API mappában. +- A controller hívja a handlereket, a router összeköti az útvonalakat a controllerrel. + +
+userController.js példa + +```js +import CreateUserCommand from '../../Application/users/command/createUserCommand.js'; +import CreateUserCommandHandler from '../../Application/users/command/createUserCommandHandler.js'; + +export async function createUser(req, res) { + const command = new CreateUserCommand(req.body); + const handler = new CreateUserCommandHandler(); + const result = await handler.handle(command); + res.status(201).json(result); +} +``` +
+ +--- + +## 5. Tesztelés, hibakeresés + +- Indítsd el a szervert: `node src/API/server.js` +- Küldj kéréseket Postmanből vagy Thunder Clientből (GET, POST, PUT, DELETE) +- Ha hibát kapsz, olvasd el figyelmesen a hibaüzenetet, keresd meg a fájlban a hibás sort. +- Próbáld ki az összes végpontot, nézd meg, hogy minden működik-e. + +--- + +## 6. Dokumentáció, beadás + +- Készíts egy rövid leírást (README.md), amiben leírod: + - Mit csinál a programod? + - Hogyan kell elindítani? + - Milyen extra funkciót raktál bele? +- Csatold a forráskódot és a tesztadatokat. + +--- + +## 7. Hasznos források, videók + +- [Node.js alapok magyarul (videó)](https://www.youtube.com/watch?v=U8XF6AFGqlc) +- [Express.js alapok magyarul (videó)](https://www.youtube.com/watch?v=1n_V2A4bHqw) +- [REST API magyarázat (videó)](https://www.youtube.com/watch?v=Q-BpqyOT3a8) +- [JSON fájlok kezelése Node.js-ben (angol)](https://www.digitalocean.com/community/tutorials/how-to-read-and-write-json-files-in-node-js) +- [VS Code rövid bemutató (magyar)](https://www.youtube.com/watch?v=VqCgcpAypFQ) + +--- \ No newline at end of file