backend feladat
This commit is contained in:
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,222 +0,0 @@
|
|||||||
# 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:
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Express szerver példa</summary>
|
|
||||||
|
|
||||||
```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');
|
|
||||||
});
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
- 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.)
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>IUserRepository.js példa</summary>
|
|
||||||
|
|
||||||
```js
|
|
||||||
export default class IUserRepository {
|
|
||||||
createUser(user) {}
|
|
||||||
getUserById(id) {}
|
|
||||||
getAllUsers() {}
|
|
||||||
updateUser(id, user) {}
|
|
||||||
deleteUser(id) {}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>userRepository.js példa (részlet)</summary>
|
|
||||||
|
|
||||||
```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 ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
- Hozz létre egy `user.json` fájlt is, pl. így:
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>user.json példa</summary>
|
|
||||||
|
|
||||||
```json
|
|
||||||
[]
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>createUserCommand.js példa</summary>
|
|
||||||
|
|
||||||
```js
|
|
||||||
export default class CreateUserCommand {
|
|
||||||
constructor(user) {
|
|
||||||
this.user = user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>createUserCommandHandler.js példa</summary>
|
|
||||||
|
|
||||||
```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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>userController.js példa</summary>
|
|
||||||
|
|
||||||
```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);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 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)
|
|
||||||
|
|
||||||
---
|
|
||||||
Binary file not shown.
Reference in New Issue
Block a user